MyThes ile Eşanlamlılar Sözlüğü Oluşturmak

MyThes, yapılandırılmış bir metin dosyası ve bir indeks dosyası kullanan basit bir eşanlamlılar sözlüğüdür. Sorgulanan kelime veya kelime grubu için ikilik arama yapılır ve kelime hakkında bilgiler, anlamlar ve eşanlamlı kelimeler döndürülür.

Bu son tanım ve ilk cümle birbiriyle biraz çelişir görünebilir. Bunu fark ettiyseniz konu hakkında daha fazla bilgi için Ekşi Sözlük'teki thesaurus başlığına ve Vikipedi'deki Tesarus maddesine bakabilirsiniz.


MyThes'in Özellikleri

MyThes ilk olarak OpenOffice.org'da eşanlamlı kelimeler sözlüğü sunmak için geliştirilmeye başlanmış bir projedir. Başlıca özellikleri arasında aşağıdakiler sıralabilir:

  • LibreOffice, OpenOffice, AbiWord, Pspell vb. uygulamalarla kolayca iletişim kurulabilmesi için C ile yazılmıştır
  • Pek çok platform üzerinde kullanılabilir yapıdadır
  • Yapılandırılmış metin dosyasını okumak ve ikilik arama yapmak için gerekli indeks dosyasını üretmek için basit bir Perl uygulaması kullanır
  • Gerekli tüm bileşenlere sahip en basit halde tasarlanmıştır. Asıl önemli olan eşanlamlı kelimeler sözlüğünün verisini barındıran yapılandırılmış metin dosyasıdır
  • İngilizce için WordNet-2.0'dan alınmış kullanılmaya hazır eşanlamlı kelimeler sözlüğü verileriyle birlikte gelir
  • BSD lisansını kullanan özgür bir yazılımdır


Eşanlamlılar Sözlüğünün Basitçe Kontrolü

MyThes oluşturduğunuz eşanlamlılar sözlüğünü test etmek için basit bir uygulama ile birlikte gelmektedir. Görebildiğim kadarıyla her dağıtımda bu uygulama MyThes paketine dahil edilmiş değil. Bu yüzden kaynak koddan derleme yapmanız gerekebilir. Bunun için arşivi açıp ./configure ve make komutlarını vermeniz yeterli. Uygulamayı çalıştırmak içinse aşağıdakine benzer bir komut kullanabilirsiniz.
./example th_tr_TR_v2.idx th_tr_TR_v2.dat kontrolet.lst
Örneğin eşanlamlı kelimeler sözlüğünde sadece ev ile köpek kelimelerinin olduğunu ve kontrolet.lst dosyasının içeriğinin aşağıdaki gibi olduğunu varsayalım:
ev
araba
köpek
çiçek
Bu durumda uygulama bize şu çıktıyı verecektir:
Thesaurus uses encoding UTF-8
ev has 1 meanings
   meaning 0: (n) yuva
       yuva
       yurt
       vatan
       kale
       aile ocağı
       bakımevi


"araba" is not in thesaurus!
köpek has 1 meanings
   meaning 0: (n) fino
       fino
       it
       havhav
       kuçu
       kuçukuçu
       barak
       çomar
       encik
       enik
       belo


"çiçek" is not in thesaurus!
"" is not in thesaurus!


MyThes'in İhtiyaç Duyduğu Yapılandırılmış Veriler
MyThes'in bir dil için eşanlamlılar sözlüğü sunabilmesi için o dile ait yapılandırılmış bazı dosyaların oluşturulması gerekmektedir. Bunlar aşağıda anlatılmaya çalışılmıştır. Öncelikle bu dosyalar:

  • İkilik veri içermemelidir
  • Satırlar satır sonu imi (newline '\n') ile bitirilmelidir, satır başı karakteri (carriage return) veya satır atlama (linefeeds) ile değil

Dosyaların ilk satırları tercih edilen karakter kodlamasını belirtmek için kullanılır. Eşanlamlılar sözlüğünü çağıran program gerekirse bu karakter kodlamasına veya bu karakter kodlamasından dönüşüm yapabilir. İngilizce için kullanılan karekter kodlaması ISO8859-1'dir. Türkçe için ise UTF-8 kullanılmalıdır. Kullanılabilecek karakter kodlamalarının bir listesi de aşağıda görülebilir:

  • UTF-8
  • ISO8859-1
  • ISO8859-2
  • ISO8859-3
  • ISO8859-4
  • ISO8859-5
  • ISO8859-6
  • ISO8859-7
  • ISO8859-8
  • ISO8859-9
  • ISO8859-10
  • KOI8-R
  • CP-1251
  • ISO8859-14
  • ISCII-DEVANAGARI

Bundan sonraki satırların hepsi aşağıdaki yapıya sadık kalacak şekilde düzenlenmelidir:
entry|num_mean
pos|syn1_mean|syn2|...
.
.
.
pos|mean_syn1|syn2|...
Buradaki ifadelerin açıklamaları şöyledir:

  • entry (girdi): kelime veya kelime grubunun tüm harfleri küçük yazılmış olarak tanımlandığı yer
  • num_mean (anlam_sayısı): girdinin kaç ayrı anlam grubuna sahip olduğu

Her anlam grubu ayrı bir satırda bulunur ve aşağıdakilerden oluşur:

  • pos (tür):  sözcük türü veya diğer anlamlara özgü açıklama
  • syn1_mean (sinonim1_anlam): birinci eşanlamlı sözcük aynı zamanda anlam grubunun kendisini tanımlamak için de kullanılır
  • syn2 (sinonim2): anlam grubundaki ikinci eşanlamlı sözcük

Yukarıda anlatılanların daha iyi anlaşılabilmesi için aşağıdaki gerçek örneğe bakabilirsiniz (Hem bu örneği hem de yukarıdaki öğeleri asıl hallerinde bırakmayı tercih ettim. Hem eksik bilgi hem de çeviri hataları nedeniyle büyük bir yanlışın oluşmasının önüne geçebilmek için).
simple|9
(adj)|simple|elemental|ultimate|oversimplified|simplistic|simplex|simplified|unanalyzable
(adj)|elementary|uncomplicated|unproblematic|easy
(adj)|bare|mere|plain
(adj)|childlike|wide-eyed|dewy-eyed|naive |naif
(adj)|dim-witted|half-witted|simple-minded|retarded
(adj)|simple|unsubdivided|unlobed|smooth
(adj)|plain
(noun)|herb|herbaceous plant
(noun)|simpleton|person|individual|someone|somebody|mortal|human|soul
Yukarıdaki örnek simple kelimesinin 9 farklı anlam grubunda eşanlamlı kelimelere sahip olduğunu söylemektedir. Ayrıca her anlam grubunun sözcük türü de belirtilmiştir.

Bir dil için yapılandırılmış sözlük dosyasını hazırladıktan sonra th_gen_idx.pl Perl programını kullanmanız ve bir indeks dosyası oluşturmanız gerekmektedir. th_gen_idx.pl programını arşiv içinden bulabileceğiniz gibi dağıtımınızın MyThes geliştirme paketinden (mythes-devel) de bulabilirsiniz. Programın Türkçe için doğru şekilde çalıştırma biçimi şöyledir:
cat th_tr_TR_v2.dat | ./th_gen_idx.pl > th_tr_TR_v2.idx
Bu komutu yukarıdaki örnek için çalıştırdıktan sonra indeks dosyasını açarsanız da aşağıdakileri göreceksiniz:
ISO8859-1
142689
'hood|10
's gravenhage|88
'tween|173
'tween decks|196
.22|231
.22 caliber|319
.22 calibre|365
.38 caliber|411
.38 calibre|457
.45 caliber|503
.45 calibre|549
0|595
1|666
1 chronicles|6283
1 esdras|6336
Birinci satır yapılandırılmış eşanlamlılar sözlüğüyle aynı karakter kodlamasını belirtir. İkinci satır eşanlamlılar sözlüğündeki toplam girdi sayısını temsil eder. Diğer bütün satırlar da aşağıdaki yapıdadır:
entry|byte_offset_into_data_file_where_entry_is_found
Türkçe için hazırladığım iki kelimelik eşanlamlılar sözlüğü ve bu sözlükten üretilmiş indeks dosyasını da sözlük oluşturmanın Türkçe'de nasıl olduğu hakkında fikir vermesi açısından aşağıya ekliyorum.

th_tr_TR.dat:
UTF-8
köpek|1
(n)|fino|it|havhav|kuçu|kuçukuçu|barak|çomar|encik|enik|belo
ev|1
(n)|yuva|yurt|vatan|kale|aile ocağı|bakımevi
th_tr_TR.idx:
UTF-8
2
ev|80
köpek|6
Bu iki dosyayı indirip /usr/share/mythes/ dizinin içine kopyaladığınız zaman LibreOffice ile birlikte kullanmaya başlayabilirsiniz. İleride iki kelimenin yanına binlerce kelime daha eklemeyi başarabilirsek dağıtımların depolarında da bulunabilir hale gelebilir bu sözlük. Türkçe için nasıl bir ortak çalışma yapılabilir şu an tam bilmiyorum ama fikri olanlar lütfen yorum olarak eklemekten çekinmesin. Ben de yazabilirsem üçüncü bir yazıyla konu hakkında fikirlerimi söyleyeceğim.

Eşanlamlılar sözlüğüyle ilgili benim merak ettiğim bazı konular da şöyle (Bu konularda bilgili kişiler açıklama yaparsa sevinirim):

  • Sözlük eklere karşı daha dayanıklı olabilir mi? Örneğin köpek kelimesi tanımlı olduğu zaman ayrıca tanımlı olmayan köpekler kelimesi için de öneri yapılabilir mi? Kelime en yalın haline indirgenip o şekilde eşanlamlı kelimelerine bakılabilir ve bunlar önerilirken uygun ekler almış halde gösterilebilir? Zemberek veya Hunspell'in yardımı dokunabilir mi? İngilice sözlükteki durum nedir? Microsoft Word ne yapıyor? Tabii bu her ek için olmayacak. Örneğin köpekler için itler önerisi mantıklı olacaktır ama köpeklik için kuçukuçuluk diyemeyiz.
  • Her sözlükte kelime türleri belirtilmemiş. Bunları kesin doğrulukla öğrenmek için ne yapılabilir? Zemberek bunu da yapıyor muydu? Ondan yararlanılabilir mi?


Kaynaklar

Yorumlar

Yorum Gönder

sen de yaz yaz yaz buraya yaz bütün sözlerini

Bu blogdaki popüler yayınlar

Mızıka Tabları Nasıl Okunur

Muhtar Kellesi

conio.h