Skip to content

5. Kelime Kontrolü

ESAT MAHMUT BAYOL edited this page Jun 24, 2020 · 8 revisions

trnlp.spelling_corrector.SpellingCorrector

Ö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.

.settext

Obje tanımlandıktan sonra ".settext()" fonsiyonu ile yeni kelime yada cümle girişi yapılabilir.

.correction(kwargs)

".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 :

1. deasciifier=True

2. unrepeater=True

3. transposes=True

4. inserts=True

5. replaces=True

6. deletes=True

7. vowelizero=True

8. all=True

9. word_list:list

10. freq:dict or Counter object

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ış metindeki karakterleri Ascii olmayan(Non-ASCII) 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 iki harfi arası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.

freq:dict

"freq" parametresi sayesinde kullanıcı tanımlı frekans sözlüğü kullanılabilir. Frekans sözlüğünün nasıl oluşturulabileceğine dair fikirler için Frekans Sözlüğü Oluşturma bölümünü inceleyebilirsiniz. "freq" parametresinin sayılmış kelimeler sözlüğüne eşitlenmesi gerekmektedir.

trnlp.spelling_corrector.SpellingCorrector.deasciifier(self, word: str) -> list

Ascii karakterlerle yazılmış metindeki karakterleri Ascii olmayan(Non-ASCII) 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.

trnlp.spelling_corrector.SpellingCorrector.unrepeater(self, word: str) -> list

"word" değişkeni ile belirlenen kelimede birden fazla yan yana 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.

trnlp.spelling_corrector.SpellingCorrector.transposes(self, word: str) -> list

"word" değişkeni ile belirlenen kelimenin sırayla tüm harflerini 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.

trnlp.spelling_corrector.SpellingCorrector.inserts(self, word: str, char_set=trLowerLetters) -> list

"char_set" parametresi ile belirlenen tüm harfleri, "word" değişkeni ile belirlenen kelimenin her iki harfi arasına sırasıyla ekler.

Kelimenin uzunluğuna "n" dersek, (n + 1) * 34 tane sonuç üretir.

trnlp.spelling_corrector.SpellingCorrector.replaces(self, word: str, char_set=trLowerLetters) -> list

"char_set" parametresi ile belirlenen tüm harfleri, "word" değişkeni ile belirlenen kelimenin tüm harfleri ile değiştirir.

Kelimenin uzunluğuna "n" dersek, n * 34 tane sonuç üretir.

trnlp.spelling_corrector.SpellingCorrector.deletes(self, word: str) -> list

"word" değişkeni ile belirlenen kelimenin sırasıyla her bir harfini siler.

Kelimenin uzunluğuna "n" dersek, n tane sonuç üretir.

trnlp.spelling_corrector.SpellingCorrector.vowelizero(self, word: str) -> list

"word" değişkeni ile belirlenen kelimenin ünsüz harfleri arasına ünlü harfler yerleştirir.

Sonuç döndürürken eleme yaptığı için döndürdüğü sonuç adedi değişkendir.