Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Normalizer'daki farklılık (0.16.0 'dan 0.17.1'e geçiş testlerinde) #233

Open
KadirCanTac opened this issue Nov 11, 2019 · 6 comments
Open

Comments

@KadirCanTac
Copy link

KadirCanTac commented Nov 11, 2019

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.

@ahmetaa
Copy link
Owner

ahmetaa commented Nov 11, 2019

Bu bir hataya isaret ediyor muhtemelen. Inceleyecegim uygun zamanda

@KadirCanTac
Copy link
Author

ilginiz için teşekkür ederim. iyi çalışmalar.

@ahmetaa
Copy link
Owner

ahmetaa commented Nov 13, 2019

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;
  }

@mdakin
Copy link
Collaborator

mdakin commented Nov 13, 2019

deasciifier ciktisini morfolojik olarak analiz edip eger hataliysa iptal etmek makul bir yaklasim mi?

@ahmetaa
Copy link
Owner

ahmetaa commented Nov 19, 2019

@mdakin bana makul geldi bu. ozel isimlerde ve hatali yazilmis kelimelerde bazi sorunlar olusturabilir gerci.

@mdakin
Copy link
Collaborator

mdakin commented Nov 19, 2019

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants