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:
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.
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:
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:
Bundan sonraki satırların hepsi aşağıdaki yapıya sadık kalacak şekilde düzenlenmelidir:
Her anlam grubu ayrı bir satırda bulunur ve aşağıdakilerden oluşur:
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).
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:
th_tr_TR.dat:
Eşanlamlılar sözlüğüyle ilgili benim merak ettiğim bazı konular da şöyle (Bu konularda bilgili kişiler açıklama yaparsa sevinirim):
Kaynaklar
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:
evBu durumda uygulama bize şu çıktıyı verecektir:
araba
köpek
çiçek
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_meanBuradaki ifadelerin açıklamaları şöyledir:
pos|syn1_mean|syn2|...
.
.
.
pos|mean_syn1|syn2|...
- 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|9Yukarı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.
(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
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.idxBu komutu yukarıdaki örnek için çalıştırdıktan sonra indeks dosyasını açarsanız da aşağıdakileri göreceksiniz:
ISO8859-1Birinci 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:
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
entry|byte_offset_into_data_file_where_entry_is_foundTü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-8th_tr_TR.idx:
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
UTF-8Bu 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.
2
ev|80
köpek|6
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
- MyThes'in README ve data_layout.txt dosyası
- WNDB(5WN) manual page
Linkler ölmüş, çok ihtiyacım vardı şuan.
YanıtlaSil