zemberek-nlp
zemberek-nlp copied to clipboard
Normalizer'daki farklılık (0.16.0 'dan 0.17.1'e geçiş testlerinde)
Merhaba, Öncelikle çalışmalarınızdan dolayı sizi takdir eder ve başarılarınızın devamını dilerim. Zemberek-full.jar dosyasını 0.16.0 'dan 0.17.1'e geçiş testlerini yapmaktayım. "alndığından" kelimesinin normalizer işlemin tabi tuttuğumda;
0.16.0 versiyonunda; "alndığından" => "aldığından"
0.17.1 versiyonunda; "alndığından" => "alndiğından"
şeklinde çıktı vermektedir. Bu işlemden sonra kök bulmak için lemma methodu kullanıldığında sonuçlar çok daha farklı oluyor tabi; "aldığından" => al "alndiğından" => alndiğından
(müşteriden bilgiler alındığından... şeklinde devam eden bir cümle fakat alındığından kelimesinin 3. harfı olan "ı" eksik yazılmış)
Normalization bloğunda yapılan kodsal değişikliklerinizi yeniden değerlendirme imkanınız olabilir mi ? iyi çalışmalar.
Bu bir hataya isaret ediyor muhtemelen. Inceleyecegim uygun zamanda
ilginiz için teşekkür ederim. iyi çalışmalar.
Bu problem TurkishSentenceNormalizer icerisindeki probablyRequiresDeasciifier
metodundan kaynaklaniyor. Orada bir heuristic ile bir cumlenin deasciifiere ihtiyaci olup olmadigina bakiliyor. Ancak oradaki yaklasim kisa cumlelerde hatali bir karar verebiliyor. Deasciifier algoritmasi da yeterince iyi olmadigi icin ozellikle hatali kelimelerde yanlis sonuc cikarabiliyor.
Asagidaki metod uzerinde biraz iyilestirme yaparak bu tur durumlar duzeltilebilir dusuncesindeyim. Belki karar icin <0.05 gibi bir sey denilebilir.
/**
* Makes a guess if input sentence requires deasciifier.
*/
static boolean probablyRequiresDeasciifier(String sentence) {
int turkishSpecCount = 0;
for (int i = 0; i < sentence.length(); i++) {
char c = sentence.charAt(i);
if (c == 'ı' || c == 'I') {
continue;
}
if (TurkishAlphabet.INSTANCE.isTurkishSpecific(c)) {
turkishSpecCount++;
}
}
double ratio = turkishSpecCount * 1d / sentence.length();
return ratio < 0.1;
}
deasciifier ciktisini morfolojik olarak analiz edip eger hataliysa iptal etmek makul bir yaklasim mi?
@mdakin bana makul geldi bu. ozel isimlerde ve hatali yazilmis kelimelerde bazi sorunlar olusturabilir gerci.
Genel olarak daha iyi sonuc verecegini dusunuyorum. Hatali yazilmis kelimeyi hatali yazmis baska bir kelimeye donusturmusse zaten buyuk bir kayip olmaz, sadece onceki haline geri donmus olur.