brolin59 / trnlp Goto Github PK
View Code? Open in Web Editor NEWTÜRKÇE İÇİN DOĞAL DİL İŞLEME ARAÇLARI
License: GNU General Public License v3.0
TÜRKÇE İÇİN DOĞAL DİL İŞLEME ARAÇLARI
License: GNU General Public License v3.0
Describe the bug
Hatalı düzeltme
Readme.md dosyalarında imla hataları olduğunu farkettim düzeltmek için correction()
fonksiyonunu kullanmak aklıma geldi.
Sıkça sorulan sorular kısmından bir cümle.
from trnlp import SpellingCorrector
obj = SpellingCorrector()
obj.settext("""Türkçe'nin yapısından dolayı bir kelime için, ek almış yada almamış olsun, birden fazla çözümleme yapılabilmektedir. Örneğin "kanat" kelimesini değerlendirirsek""")
output = obj.correction(all=True)
for x in range(len(output)):
print(output[x][0], end=' ')
Çıktı;
türkçe'nin yapısından dolayı bir kelime için ek almış yada almamış olsun birden fazla çözümleme yapılabilmektedir örneğin kanat kelimesini değerlendirirsek
doğrusu;
türkçe'nin > türkçenin
yada > ya da
Merhaba
NLP ve Python konusunda yeniyim.
Kütüphanenizi biraz test ettim ve çok başarılı buldum.
Benim karşılaştığım problemlerin ana kaynağı, iki kelime arasında boşluk bırakmamak olduğunu söyleyebilirim.
Önerilen kelime listesini incelemedim, ilk önerilen kelimeyi kullandım.
Test sonuçlarını aşağıda iletiyorum. Düzeltmeleri nasıl yapabileceğim konusunda yardımcı olabilir misiniz?
Kütüphanenin yapısı hakkında fazla bilgim yok, algoritmalar konusunda bir döküman var mı?
Nereye kadar düzeltme yapabiliriz, her hangi bir sınırımız var mı merak ediyorum açıkcası.
Test sırasında sürekli memory hatası aldığım için daha fazla çıktı elde edemedim. ( 3 farklı makinede denedim )
SpellingCorrector nesnesini yarattıktan sonra, database kayıt okuma döngüsü içinde
tuple (row) içindeki (row[0]) stringini settext() metoduna veriyorum ve correction(all=True) şeklinde çağrımı yapıyorum.
Aşağıdaki şekilde dönen değerler içindeki ilk kelimeleri birleştirerek yeni düzeltilmiş cümlemi oluşturuyorum ve bunu database e kayıt ediyorum.
connection = None
try:
connection = cx_Oracle.connect(username, password, dsn, encoding=encod)
cursor1 = connection.cursor()
cursor2 = connection.cursor()
sql1 = 'SELECT F.PK, F.COMPLAINT FROM TABLE_FIX F WHERE F.COMPLAINT_FIX IS NULL ORDER BY LENGTH(F.COMPLAINT) DESC'
cursor1.execute(sql1)
obj = SpellingCorrector()
for row in cursor1:
hdrid = row[0]
complaint = row[1]
if type(complaint) is not str:
continue
obj.settext(complaint)
kelimesecenekleri = None
kelimesecenekleri = obj.correction(all=True)
tr_result_cumle = ''
for kelime in kelimesecenekleri:
tr_result_cumle += kelime[0] + ' '
print("Loop...", kelime[0])
sql2 = 'UPDATE TABLE_FIX F SET F.COMPLAINT_FIX = :1 WHERE F.PK = :2'
cursor2.execute(sql2, (tr_result_cumle, hdrid))
cursor2.execute('commit')
Settext metoduna verdiğim string boyu ortalama 600 karakter ama 3000 karakteri yada 100 karakteri bulduğu oluyor.
Bellek kullanımında mı hata yapıyorum, string çok mu büyük bilemedim. del obj ve gc.collect de kullandım ama çözüm olmadı.
Dediğim gibi sadece SpellingCorrector nesnesini döngüye girmeden önce bir kez yaratıyorum.
Metindeki cümleleri teker teker yada kelime kelime göndersem faydası olur mu bilemedim.
Bu konuda da önerilerinizi iletirseniz sevinirim.
Teşekkürler
43.000 karakter yani 6.000 kelime için, 580 civarında düzeltme içinde 40 adet hata, (ki hata olduğu tartışılır) en az %96 başarısınız anlamına gelir.
Düzeltilmiş metini, google yazım denetimi ile incelediğimde 70e yakın hala hatalı olabilecek kelime olduğunu gördüm. (ekte gönderiyorum)
Bu da tüm kelimeler içinde %1 gözden kaçan düzeltme demek.
problemide problemine #aslında de eki ayrı yazılmak istenmiş.
saftada haftada #safhada yazılacağına saftada yazılmış, düzeltmesi ilk harf değişimi ile haftada olarak düzeltmiş. aslında haklı bir düzeltme, rast geldim sadece.
yönetim Yönet'im #yönetim kelimesi sözlükte yoksa belki özel isim olarak algılamış olabilir.
ahlakı5görevinizden #correction yapılmadı
bebegimikaçırdım #correction yapılmadı
merkezi merkezî #gereksiz yere i harfi uzatılmış.
bukadar çukadar #bu kadar bitişik yazıldığı için düzeltme uygulanmış, çukadar ne demek bilemedim :)
müşteri Müşteri #gereksiz yere m harfi büyük yazılmış.
iadecettim #correction yapılmadı, iade ettim yazılmak istenmiş.
dendiki dendiği #ki eki ayrı yazılmadığı için böyle bir sonuca ulaşılmış
nedirve #correction yapılmadı, nedir ve yazılmak istenilmiş.
varsistemden #correction yapılmadı, var sistemden yazılmak istenilmiş.
yazan Yazan #gereksiz yere m harfi büyük yazılmış.
bişey birey #bir şey yazılmak istenmiş, birey olarak düzeltilmiş.
herşeyi herzeyi #her şeyi ayrı yazılmak istenilmiş
bişeye bireye #birşeye yazılmak istenmiş, bireye olarak düzeltilmiş. ş ve r harfleri klavyede birbirlerine uzak olduğu için bişey kelimesini bir şey olarak düzeltilmesini önerebilirim.
rızamla mı rızamla mi #soru ekini mi olarak düzeltmiş.
getirdininiz getirdiğiniz #bendeki örnekte getirdiniz denmek istenmiş fakat düzeltme haklı sebeplerle yapılmış.
tarihi tarihî #gereksiz yere i harfi uzatılmış. muhtemel bu tarz düzeltmeler için kelimenin çümle içindeki yerini göz önünde bulundurmak gerekir.
alibeyköy #correction yapılmadı, özel isimlere eklenebilir.
aramaz iseniz aramaz İsen'iz #konuşma dili yazıya dökülmüş
oluşum Oluş'um
konuşmayı mı konuşmayı mi #soru ekini mi olarak düzeltmiş.
bellısız bellisiz #belirsiz yazılmak istenilmiş.
artık Artık #muhtemel bu tarz düzeltmeler için kelimenin çümle içindeki yerini göz önünde bulundurmak gerekir. Bendeki örnekte soru cümlesinin sonundaydı.
anlayab,ildiniz anlayan ildiniz
samandıraya şamandıraya #Samandıra'ya yazılmak istenilmiş. Samandıra özel isimlerde yok sanırım.
seferinin seferînin #gereksiz yere i harfi uzatılmış.
tarihinde tarihînde #gereksiz yere i harfi uzatılmış.
nazilli'den nazilliden #özel isimlere eklenebilir.
üniversitesi'nden üniversitesinden #doğru mu yanlış mı bilemedim
ingilizce İngiliz'ce #doğru mu yanlış mı bilemedim
okuyan Okuyan
mutlu Mutlu
adlı Adlı
edırne edirne #özel isimlere eklenebilir.
no nom
dönüş Dönüş
luleburgaz lüleburgaz #düzeltmesi doğru yapılmış, sanırım özel isimler listesinde yok
dahili dâhilî #dahili numara anlamında kullanılmış
gıdn gıda #gidin demek istenmiş
pc ipucu #bilgisayar anlamında pc kelimesi kullanılmış.
anlayabildiniz miilk anlayan ildiniz mi #mi ilk bitişik yazılmış.
iskeçe iskele #İskeçe özel isimlere eklenebilir.
msjma mesajıma
göremediğniizi göremediğinizi
yapacaz yapacağız
oomasından olmasından
yokilla yok illa
gb gibi
ettiteyid # etti teyid
çukadar # bukadar bitişik kelimesini çukadar şekline getirmişti.
firme # firma
alınbaska # alın başka
dedikki # dedi ki
aşdıgım # aldığım ilk seçenek olmasa da seçeklerde üst sıralarda olmalı
dogruyol # özel isim yada ayrı yazılmalı
geçmediginiben # geçmediğini ben
defalarcaçözüm # defalarca cözüm
aradgmda # aradığımda
gördükki # gördük ki
yaşanmışçözüm # yaşanmış çözüm
bebegimede # bebeğime de
açacagımayrıca # açacağım ayrıca
söyledilerbelirttim # söylediler belirttim
dendiözellikle # dendi denildi özellikle
nedirve # nedir ve
varsistemden # var sistemden
bakıldıbirkaç # bakıldı birkaç
durulduve # duruldu ve
dedibizde # dedi biz de
aldıken # alırken
eminmisiniz # emin misiniz
işlkez # ilk kez
bulunam # bulunmam
oturturan # oturtan yada otutturan
rel # ret
hemde # hem de
yukarda # yukarıda
Yazık'tır # yazıktır
çıkmıyor sunuz ki # çıkmıyorsunuz ki
sizede # size de her zaman ayrı mı bilemedim
uyarıylamı # uyarıyla mı
bizede # bize de her zaman ayrı mı bilemedim
onada # ona da her zaman ayrı mı bilemedim
tabiki # tabi ki
herşey # her şey
heryerden # her yerden
sevise # servise yada sevişe
yayınlıyacam # yayınlayacağım
yazane yezanesinde # yazıhane yazıhanesinde
diyemi # diye mi
herseye # her şeye
yollıyacam # yollayacağım
birsürü # bir sürü
vrecı # verici
acıklama # açıklama
böylrmı # böyle mi
cokmu # çok mu
onmelı # önemli
ototbus # otobüs
istanbıla # İstanbul'a
körmüsünüz # kör müsünüz
sacede # sadece
söylemeyinbakın # söylemeyin bakın
galibasiz # galiba siz
istiyorumşimdi # istiyorum şimdi
dahaama # daha ama
dileyebilirsinizoncelikle # diyebilirsiniz öncelikle
kucukyalidan # küçükyalıdan
buyukcekmeceden # Büyükçekmece'den yada büyük çekmeceden
birbuçuk # bir buçuk
sağolsunlar # sağ olsunlar
bidaha # bir daha
pamdemi # pandemi
yetisememistirler # yetişememiştirler
izyein # izleyin
kameramaniyim # kameramanıyım
melâne # sözlükte yoktur sanırım
sistemede # sistemde yada sisteme de
yüzaçık # yüzü açık
şikayetcı # şikayetçi
İyi günler, öncelikle çalışmanız için teşekkür ederim. Şu an cümle analizinde sıkıntısız bir şekilde kullanıyorum. Aslında belirteceğim durum çok spesifik durum ama sürekli karşıma çıktığı için bildirmek istedim. "Pahalı" kelimesinin hecelenmesinde "paha+lı" yerine "pahal+ı" şeklinde veriyor. Biraz araştırdığım cimri manasında pahal diye bir kelime olduğunu buldum ama takdir edersiniz ki pek popüler bir kelime değil.
Belki hızlı bir çözüm olarak pahal kelimesi kaynak kütüphaneden çıkarılabilir, yada algoritma yapım eklerini çekim eklerine göre önceliğe koyabilir. Bununla beraber ileride farklı cinaslı veya sesteş örnekler benzer hatalar çıkarabileceği için paylaşmak istedim.
İyi çalışmalar
Türkçe'de sayılar harflerle yazılırken kelimeler arasında boşluk bırakılır (kaynak). Şu anda trnlp.helpers.number_to_word
bunu yapmıyor. Benim örnek bir algoritmam var:
https://gist.github.com/EkremDincel/395afb9efbd99a9509bc3a11178482d8
Hi,
I'v tried your library but I couldn't find to_lower function in SentenceTokenization.py file. Therefore library couldn't tokenize my sentence. Could you please check it?
File "C:\Users\ferhat.guneri\AppData\Local\Programs\Python\Python37-32\lib\site-packages\trnlp\Tokenization\SentenceTokenization.py", line 290, in sentence_token_wsign
if to_lower(kisim) in shortlist:
NameError: name 'to_lower' is not defined
Regards.
merhaba uygulamayı çalışıtrdığımda bana to_loveri tanımlamadığımı söyledi.
https://github.com/aysnrgenc/TurkishDeasciifier
Bu deasciifier neural network ile çalışıyor. büyük verilerle eğitilirse hatasız düzeltme yapabilir. projenize dahil edersiniz diye tavsiye. iyi çalışmalar.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.