ahmetaa / zemberek-nlp

NLP tools for Turkish.
Other
1.14k stars 207 forks source link

Kelime gövdesini kullanma hakkında #187

Closed hakkiyagiz closed 5 years ago

hakkiyagiz commented 5 years ago

https://github.com/ahmetaa/zemberek-nlp/wiki/Zemberek-NLP-ile-Metin-S%C4%B1n%C4%B1fland%C4%B1rma

Yukarıdaki linkte kelime gövdelerinin çıkarımı sayesinde sözlükteki kelimelerin daha aza indirgenmesi ve başarı artışı görülmekte.

Örnekteki cümledeki kelimelerden bazıları

yapmadıklarını bırakmadılar

Bu kelimeleri turkishMorphology.analyze methoduna soktuğumuzda aldığımız cevaplar şu şekilde oluşmakta.

[[yapmak:Verb] yap:Verb+ma:Neg|dık:PastPart→Noun+A3sg+ları:P3pl+nı:Acc, [yapmak:Verb] yap:Verb+ma:Neg|dık:PastPart→Noun+lar:A3pl+ın:P2sg+ı:Acc, [yapmak:Verb] yap:Verb+ma:Neg|dık:PastPart→Noun+lar:A3pl+ı:P3sg+nı:Acc, [yapmak:Verb] yap:Verb+ma:Neg|dık:PastPart→Noun+lar:A3pl+ı:P3pl+nı:Acc]
[[bırakmak:Verb] bırak:Verb+ma:Neg+dı:Past+lar:A3pl]

Ancak devamında

yapmadık bırak

şeklinde oluştuğunu görmekteyiz.

Burdaki analiz tam olarak ne şekilde gerçekleşmekte? Sanırım gözden kaçırdığım bir nokta var.

ahmetaa commented 5 years ago

Analiz sonrasında gövde bilgisini getLemmas() ile alabilirsiniz.

Kod ile göstermeye çalışayım.

String sentence = "Jackie Chan'a yapmadıklarını bırakmadılar!";

Cümleyi analiz edip belirsiziliği gider, en iyi sonuç analizlerini ekrana bas (Henüz belirsizlik giderimi çok iyi çalışmıyor):

SentenceAnalysis result = morphology.analyzeAndDisambiguate(sentence);
result.bestAnalysis().forEach(System.out::println);

Çıktı:

[Jackie:Noun,Prop] jackie:Noun+A3sg
[Chan:Noun,Prop] chan:Noun+A3sg+a:Dat
[yapmak:Verb] yap:Verb+ma:Neg|dık:PastPart→Noun+lar:A3pl+ı:P3pl+nı:Acc
[bırakmak:Verb] bırak:Verb+ma:Neg+dı:Past+lar:A3pl
[!:Punc] !:Punc

Bu analizlerin lemma (gövdelerini) yazdır:

result.bestAnalysis().forEach(s->System.out.println(s.getLemmas()));

Çıktı:

[jackie]
[chan]
[yap, yapmadık]
[bırak]
[!]

En uzun gövdeleri kullanabilirsiniz.

ahmetaa commented 5 years ago

Dokümandaki örneğin kodlarını inceleyebilirsiniz.

https://github.com/ahmetaa/zemberek-nlp/blob/master/examples/src/main/java/zemberek/examples/classification/NewsTitleCategoryFinder.java

Ayrıca examples modülünde analiz vs işlemleri için basit örnekler var.

hakkiyagiz commented 5 years ago

Çok teşekkürler epey detaylandırmışsınız.