Bir arkadaşımın "okuldan sonra ölüm gelir" şeklinde ifadesine önce şaşırarak sonra işin içinde bir bit yeniği arıyarak aklıma bazı fikirler geldi. İşin aslı; okul kelimesinin harflerinin her birinden bir sonra gelen harflerin oluşturduğu kelime "ölüm". Ne büyük tesadüf değilmi? Yaptığım ufak çaplı bir araştırma ile, 12703 kelime içinde sadece 8 kelime bu şekilde eşleşti. Bunların içinde 4 harfli eşleşme sadece 2 adet. "Nötr" be "Okul" kelimeleri.

"Nötr" kelimesini Türkçe saymassak 12703 kelime içinde sadece bir adet eşleşme var; (okul-ölüm) eşleşmesi. Bunun oranı 0,000157 den daha az. Bu değerde okuldan sonra ölüm gelir tezinin tesadüf olma ihtimalini gösterir. Okulumun bitmesine son 2-3 ay kala(!) yaptığım ufak bir çalışmayı paylaşmak istiyorum. (okul_olum.rar)
"İngilizce-Türkçe" sözlük veritabanından (sozluk.rar) sadece Türkçe kelimeleri alarak ufak bir veritabanı (kelimeler.mdb) oluşturdum.Dil olarak C#kullandığım programı bölüm bölüm açıklayalım.
List<string> kelimeler = new List<string>();
List<string> eşleşmeler = new List<string>();
string harfler = "abcçdefgğhıijklmnoöprsştuüvyz-";
private void Form1_Load(object sender, EventArgs e)
{
baglan();
//tüm kelimeleri yaz
int k = 0;
foreach (var kelime in kelimeler)
{
listBox1.Items.Add(kelimeler[k].ToString());
k++;
}
//tüm kelimeleri kontrol et
for (int i = 0; i < kelimeler.Count; i++)
{
string al = kelimeler[i].ToString();
string ver = "";
foreach (char harf in al)
{
int sayı = harfler.IndexOf(harf);
ver += harfler[sayı + 1];
}
if (kelimeler.Contains(ver))
{
listBox2.Items.Add(al + " - " + ver);
eşleşmeler.Add(ver);
}
}
int kelime_adet = kelimeler.Count;
int eşleşme_adet = listBox2.Items.Count;
double ikiharfli = eşleşmeler.Where(kelime => kelime.Length == 2).Count();
double üçharfli = eşleşmeler.Where(kelime => kelime.Length == 3).Count();
double dörtharfli = eşleşmeler.Where(kelime => kelime.Length == 4).Count();
string metin = string.Format("{0} adet kelime içinde sadece {1} adet kelime eşleşmiştir."
+" {2} kelime içinde {3} adet iki harfli, {4} adet üç harfli,"
+ " {5} adet dört harfli eşleşme vardır.\n\nDört harfli eşleşme ihtimali : {6} dır.",
kelime_adet, eşleşme_adet,kelime_adet,ikiharfli,üçharfli,dörtharfli,dörtharfli/kelime_adet);
richTextBox1.Text = metin;
}
İlk olarak bağlantı kurulup tüm kelimeler "kelimeler" listesine eklenmektedir. Daha sonra "kelimeler" içindeki tüm kelimeler dolaşılıp harflerinin bir sonraki harflerden oluşan kelime elde edilmektedir.
public void baglan()
{
OleDbConnection baglanti = new OleDbConnection();
baglanti.ConnectionString = @"Provider= Microsoft.Jet.OleDB.4.0;Data Source = kelimeler.mdb";
string sorgu = "SELECT kelime FROM TBLkelimeler";
try
{
baglanti.Open();
komut = new OleDbCommand(sorgu, baglanti);
tablo = komut.ExecuteReader();
while (tablo.Read())
{
kelimeler.Add(tablo[0].ToString());
}
}
catch
{
MessageBox.Show("Hata!");
}
finally
{
baglanti.Close();
}
}
Yeni kelime oluşturulur.
for (int i = 0; i < kelimeler.Count; i++)
{
string al = kelimeler[i].ToString();
string ver = "";
foreach (char harf in al)
{
int sayı = harfler.IndexOf(harf);
ver += harfler[sayı + 1];
}
Yeni oluşan kelime, "kelimeler" içindeyse listbox'a eklenir.
if (kelimeler.Contains(ver))
{
listBox2.Items.Add(al + " - " + ver);
eşleşmeler.Add(ver);
}
}
Son olarakta eşleşmeler sayılıp oranlar hesaplanır.
int kelime_adet = kelimeler.Count;
int eşleşme_adet = listBox2.Items.Count;
double ikiharfli = eşleşmeler.Where(kelime => kelime.Length == 2).Count();
double üçharfli = eşleşmeler.Where(kelime => kelime.Length == 3).Count();
double dörtharfli = eşleşmeler.Where(kelime => kelime.Length == 4).Count();
string metin = string.Format("{0} adet kelime içinde sadece {1} adet kelime eşleşmiştir."
+" {2} kelime içinde {3} adet iki harfli, {4} adet üç harfli,"
+ " {5} adet dört harfli eşleşme vardır.\n\nDört harfli eşleşme ihtimali : {6} dır.",
kelime_adet, eşleşme_adet,kelime_adet,ikiharfli,üçharfli,dörtharfli,dörtharfli/kelime_adet);
Bu ufak ama önemli araştırma ile Doğal Dil İşleme üzerine ilk çalışmamı da yapmış oldum. Nice iyi çalışmalara...(Tabi okul bitmeden)
d956ba37-36f4-4a2a-901b-f889293dc62c|3|4.7