-
-
Notifications
You must be signed in to change notification settings - Fork 19
5. Kelime Kontrolü
Örnek Kullanım 👍
from trnlp import SpellingCorrector
obj = SpellingCorrector()
obj.settext("Bugun hava cok sıcak.")
print(obj.correction(all=True))
>> [['bugün', 'bunun', 'burun', 'bulun', 'bulgun', 'buzun', 'buğun', 'budun', 'bungun', 'busun', 'butun', 'buyun', 'burgun', 'bumun'],
['hava', 'Hava', 'hala', 'dava', 'hata', 'havai', 'havan', 'havva', 'havza', 'ava', 'tava', 'havra', 'havas', 'hav', 'havsa', 'hama', 'haya', 'haşa', 'havla', 'havam', 'hana', 'sava', 'havi', 'hara', 'havya', 'fava', 'hasa', 'kava', 'lava', 'hapa', 'haza', 'hafa', 'haça', 'havı', 'haba', 'bava', 'havda', 'haha', 'çava', 'hada', 'haca', 'haval', 'havca'],
['çok', 'yok', 'cop', 'şok', 'ok', 'çök', 'tok', 'sok', 'coş', 'kok', 'cuk', 'fok', 'bok', 'cık', 'dok', 'lok'],
['sıcak', 'sızak', 'sımak', 'ısıcak']]
Eğer kelime mevcut hali ile zaten bir anlam ifade ediyorsa ihtimal sıralamasına dahil edilmeden listenin en başına eklenir. Her bir kelime için tüm alternatifler liste içerisinde liste olarak ihtimal sıralamasında verilir. Her listenin ilk elemanı seçilirse zaten doğru yazılmış olan yada ihtimali en yüksek olan seçenekler ile işlem yapılmış olur. Tabii her zaman doğru sonuç alınamayacağını bilmemizde fayda var. İstatistiksel olarak en yakın sonucun döndürüleceği unutulmamalıdır. Kelime vektörleri ile tahmin yapılarak daha yakın sonuçlar elde edilebilir. Vakit ve veri bulursam bir deneme yapabilirim. Sağlıklı sonuç alabilirsem fonksiyonun tahmin algoritmasını bu şekilde değiştirebilirim. Şu anki verim de çok sağlıklı olmamasına rağmen yeterli doğruluk oranını yakaladığını düşünüyorum.
Obje tanımlandıktan sonra ".settext()" fonsiyonu ile yeni kelime yada cümle girişi yapılabilir.
".correction()" fonksiyonu parametresiz kullanıldığında sadece morfolojik analiz ile düzeltme yapılmaya çalışılır. Kelime düzeltme işlemleri için "**kwargs" kullanılabilecek parametreler şu şekildedir :
- deasciifier=True
- unrepeater=True
- transposes=True
- inserts=True
- replaces=True
- deletes=True
- vowelizero=True
- all=True
- word_list:list
Bu parametreler tek başına kullanılabildiği gibi birkaçı bir arada da kullanılabilir. Hepsini kullanmak için "all=True" parametresini yazmak yeterlidir. Parametrelerin kullanımları için örnekler şu şekildedir :
deasciifier=True
Ascii karakterlerle yazılmış Türkçe metindeki karakterleri Türkçe karakterlerle değiştirerek kelimeyi çözümlemeye çalışır.
Kelime içerisindeki Ascii karakterlerin sayısına "n" dersek, 2^n tane sonuç üretir.
from trnlp import SpellingCorrector
obj = SpellingCorrector()
obj.settext("Bugun hava cok sıcak.")
print(obj.correction(deasciifier=True))
>> [['bugün', 'buğun'], ['hava', 'Hava'], ['çok', 'çök'], ['sıcak']]
İlk örneğimizde de "Bugun hava cok sıcak." cümlesini "all=True" parametresi ile kullanmıştık. Kelime düzeltme için her kelimeye her bir işlem uygulandığından bir çok sonuç dönmüştü. Yine de her iki durumda da listenin ilk elemanını alırsak doğru sonuca ulaşmış olacağız.
unrepeater=True
Birden fazla yanyana yazılmış harfleri teke düşürür ve kelime çözümlenmeye çalışılır.
Kelime içerisindeki her tekrar eden harf grubu sayısına "n" dersek, 2 * n tane sonuç üretir.
from trnlp import SpellingCorrector
obj = SpellingCorrector()
obj.settext("hayııııııırrrrrr")
print(obj.correction(unrepeater=True))
>> [['hayır']]
transposes=True
Sırayla tüm harfleri yanındaki ile yer değiştirir.
Kelimenin uzunluğuna "n" dersek, n >= 2 olmak şartı ile n - 1 tane sonuç üretir. Kelime uzunluğu 1 ise boş liste döner.
from trnlp import SpellingCorrector
obj = SpellingCorrector()
obj.settext("örenğin")
print(obj.correction(transposes=True))
>> [['örneğin']]
inserts=True
Tüm harfleri kelimenin her kısmına sırasıyla ekler.
Kelimenin uzunluğuna "n" dersek, (n + 1) * 34 tane sonuç üretir.
from trnlp import SpellingCorrector
obj = SpellingCorrector()
obj.settext("örnğin")
print(obj.correction(inserts=True))
>> [['örneğin']]
replaces=True
Tüm harfleri sırasıyla alfabedeki tüm harfler ile değiştirir.
Kelimenin uzunluğuna "n" dersek, n * 34 tane sonuç üretir.
from trnlp import SpellingCorrector
obj = SpellingCorrector()
obj.settext("örnağin")
print(obj.correction(replaces=True))
>> [['örneğin']]
deletes=True
Sırasıyla her bir harfi siler.
Kelimenin uzunluğuna "n" dersek, n tane sonuç üretir.
from trnlp import SpellingCorrector
obj = SpellingCorrector()
obj.settext("örneğine")
print(obj.correction(deletes=True))
>> [['örneğine', 'örneğin']]
vowelizero=True
Ünsüz harfler arasına ünlü harfler yerleştirir.
Sonuç döndürürken eleme yaptığı için döndürdüğü sonuç adedi değişkendir.
from trnlp import SpellingCorrector
obj = SpellingCorrector()
obj.settext("rnğn")
print(obj.correction(vowelizero=True))
>> [['örneğin', 'örneğini', 'örneğine']]
all=True
Yukarıda anlattığım tüm işlemleri her bir kelimeye uygular.
word_list=list
"SpellingCorrector()" klası bir yazıyı parçalamak için standart olarak "trnlp.tokenization.word_token(utext: str, numbers=True, stop=None) -> list" fonksiyonunu kullanır. Eğer siz .settext ile veri girişi yapmadan hali hazırdaki bir kelime listesi için düzeltme(correction) fonksiyonunu kullanmak isteyebilirsiniz. Bu durumda "word_list=list" parametresi ile dışarıdan kelime listesi girişi yapabilirsiniz.