Coder Social home page Coder Social logo

brolin59 / trnlp Goto Github PK

View Code? Open in Web Editor NEW
145.0 18.0 20.0 19.58 MB

TÜRKÇE İÇİN DOĞAL DİL İŞLEME ARAÇLARI

License: GNU General Public License v3.0

Python 100.00%
nlp dogal-dil-isleme morfolojik-analiz morfoloji turkish-nlp turkish-sentence-tokenizer

trnlp's People

Contributors

brolin59 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

trnlp's Issues

Hatalı düzeltme

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

Memory Hatası ve Test Sonuçları

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.

Correction sonrası bulduğum hatalar

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.

Bunlar da en başarılı düzeltmeler.

msjma mesajıma
göremediğniizi göremediğinizi
yapacaz yapacağız
oomasından olmasından
yokilla yok illa
gb gibi

Düzeltilmiş metin için Google un bulduğu hatalar

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

Cinaslı/sesteş kelimeler

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

image

İyi çalışmalar

to_lower is not defined

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.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.