Velhasıl Türkçe Yazım Kontrolü ve Metin Analizi Yapan Doğal Dil İşleme Projesi
Açıkhack 2020 Online Doğal Dil işleme Yarışması kapsamında 1-31 Temmuz 2020 tarihleri arasında Türkçe Doğal Dil Çalışmalarına katkı sağlamak amacıyla tamamen açık kaynak kodlu bir uygulama hazırladık.
Türkiye Açık Kaynak platformu tarafından düzenlenen yarışma, Teknofest, Garanti Bankası vb. birçok özel ve kamu kurum ve kuruluşları desteklemekte. Açık kaynaklı Türkçe Doğal Dil işleme çalışmalarının, türkçe doğal dil işleme kütüphanelerinin, Türkçe derlemlerin artırılması için Açıkhack Doğal dil işleme yarışması düzenlemektedir.
İçerik Tablosu
Velhasıl Doğal Dil İşleme Projesi:
Velhasıl isimli uygulamamız metinlerde yazım denetimi, cümle analizi, metnin özünü bulma ve atasözü önerme, metnin okunabilirliğini artırıcı öneriler sunma gibi özelliklere sahip. Uygulamamıza ve Uygulamamızın kaynak kodlarına https://github.com/MiniVelhasil/velhasil adresinden ulaşabilirsiniz.
Neden Yaptık? Problem Cümlemiz:
Yazım yanlışları ve uzun cümleler metinlerin okunabilirliğini zorlaştırmaktadırlar.*
* Ateşman, Ender (1997). Türkçe okunabilirliğin ölçülmesi. Ankara Üniversitesi, TÖMER Dil Dergisi, S.58, ss.171-174.
http://www.atesman.info/wp-content/uploads/2015/10/Atesman-okunabilirlik.pdf
Çözüm Nedir?
«Velhasıl…» isimli projemiz ile Türkçe metinlerin biçimsel olarak incelenmesi, yazım yanlışlarının bulunması, cümlelerin belirlenmesi, anlam çıkarımı yapılması ve bu yollarla yazının iyileştirilerek okunabilirliğini artırıcı öneriler sunulması amaçlanmıştır.
Projemizin Özellikleri:
- Yazım Denetimi: Yazım yanlışlarını, noktalama işareti hatalı kullanımlarını kontrol eder.
- Kelime Öneri : Yazım yanlışı yapılmış kelimeler için doğru olabilecek kelime önerir.
- Türkçe Kelime Öneri : Türkçe kökenli olmayan kelimeler yerine Türkçe kelime önerir
- Cümle Analizi : Metnin okunabilirliğinin ve akıcılığının artırılmasını sağlamak amacıyla metin içindeki cümleleri analiz eder ve uzun yazılmış birleşik cümlelerin bölünebilmesini önerir.
- Metin İstatistikleri : Metnin kelime sayısı, cümle sayısı, karakter sayısı gibi istatistiklerini bulur.
- Atasözü Öneri : Metnin tamamını inceler ve hazırladığımız 2500’e yakın atasözü içeren ver setimizi kullanarak metinle alakalı atasözlerini bulur.
Yazım Denetimi Aracı:
Yazım yanlışlarını, noktalama işareti hatalı kullanımlarını kontrol eder.
Kullanımı: Velhasıl sınıfını projeye dahil ediyorsunuz.
import velhasıl velhasil_ = velhasil.Velhasil () velhasil_.yazimDenetimi (text))
Metnin yazım kontrolünü yapar.
@param string kelime : Metnin tamamı
@return list : [0,1,2,3,4,5,6] biçiminde
0-> kelime doğru ;
1-> Kelime bir noktalama işareti Önündeki boşluk silinmeli
2-> kelime yanlış
3-> cümleden sonra (enter ile bitmiş) nokta koyulmalı.
4-> Noktalama işaretinden sonra boşluk bırakılmalı (merhana,dünya) uyarı verir (3,14) -doğru döndürür
5-> Noktadan sonra büyük harf gelmeli
6-> Kelime doğru ancak Türkçe kelime önerisi var
Yazım Denetimi için https://github.com/StarlangSoftware/TurkishSpellChecker-Py
Kelime Öneri:
Yazım yanlışı yapılmış kelimeler için doğru olabilecek kelime önerir.
import velhasıl velhasil_ = velhasil.Velhasil () velhasil_.kelimeOneri ("yalnış"))
>> [‘yanlış’, ‘yanlış’, ‘yanlış’, ‘yanış’, ‘yanlış’, ‘yanlış’, ‘yalmış’, ‘yanlış’, ‘yalanış’, ‘yanlış’, ‘yalnız’, ‘yalnız’, ‘yanlış’, ‘yalnız’]
Türkçesini Öner:
Türkçe kökenli olmayan kelimeler yerine Türkçe karşılığını önerir. Bunun için kendi hazırladığımız yaklaşık 550 kelimelik yabancı kelimeler ve Türkçe karşılıkları veri seti hazırladık.
import velhasıl velhasil_ = velhasil.Velhasil () velhasil_.turkcesiniOner ("etap"))
Etap : [‘adım’, ‘basamak’, ‘konak’]
Kulvar : [‘çizgi’, ‘şerit’, ‘yol’]
Dekoder : [‘çözücü’]
Cümle Sonu Belirleme:
Kural tabanlı olarak Türkçe metinlerde cümle sonu belirleme işlemi yapılır.
18 farklı duruma göre Türkçe metinlerdeki cümleleri başarıyla belirler. Bunun için Türkçede sık kullanılan kısaltmaların yer aldığı bir veri seti oluşturuldu. Kısaltmalar ayrıldıktan sonra tek bir Regex cümlesiyle cümle sonu belirlendi.
import velhasıl velhasil_ = velhasil.Velhasil (text) velhasil_.cümleler # cümlelerin yer aldığı bir liste döndürür
sentence = re.compile ( """(?<=['""a-zıüöşğç\""\]\)][\!\?\:\.\…\n\r\n\t])\s+(?=[""A-ZİÜÖŞĞÇ0-9\(\-\(\''\‘\““\""\[\+])""")sent = re.split (sentence, text)
Cümle Sonu | Kurallar |
Doğru | L. U |
Doğru | L. # |
Doğru | L. ‘ |
Doğru | L. “ |
Doğru | L. [ |
Doğru | L. ( |
Doğru | L. + |
Dogru | L. – |
Yanlış | U. U |
Yanlış | #. U |
Yanlış | L. L |
Yanlış | ?.? (Noktadan Sonra Boşluk yok) |
Yanlış | #. # |
Yanlış | ?. ” |
Yanlış | #. , |
Yanlış | #. ) |
Yanlış | #. ] |
Cümle Analizi:
import velhasıl velhasil_ = velhasil.Velhasil () velhasil_.cumleBolucu(cumle)) #True or False
Cümlenin birleşik cümle olduğunu anlamak için bağlaçlar listesi hazırlandı ve VERB TS Corpus Frequency List kullanıldı.
Metin İstatistikleri:
Metin İstatistikleri : Metnin kelime sayısı, cümle sayısı, karakter sayısı gibi istatistiklerini bulur.
import velhasıl velhasil_ = velhasil.Velhasil (text) print ("Kelime sayisi :", velhasil_.kelimesayisi) print ("benzersiz kelime sayisi :", velhasil_.benzersizkelimesayisi) print ("Karakter sayisi :", velhasil_.karaktersayisi) print ("Benzersiz karakter sayisi :", velhasil_.benzersizkaraktersayisi) print ("Paragraf sayisi :", velhasil_.paragrafSayisi) print ("Cümle sayisi :", velhasil_.cumleSayisi) print ("Kelimeler :", velhasil_.benzersizkelimeler)
Atasözü Öneri:
Metnin tamamını inceler ve hazırladığımız 2500’e yakın atasözü içeren veri setimizi kullanarak metinle alakalı atasözlerini bulur.
import velhasilimport atasozlerOneri atasozleri_ = atasozlerOneri.AtasozleriOneri () oneriler = atasozleri_.atasozuBul (text) oneriler.sort(reverse=True)
Gereksinimler ve Ek Kaynaklar:
Gereksinimler
NlpToolkit-MorphologicalAnalysis==1.0.21
NlpToolkit-NGram=1.0.10
PyQt5-stubs==5.14.2.2
Kullanılan Ek Kaynaklar
Yazım Denetimi için https://github.com/StarlangSoftware/TurkishSpellChecker-Py
Not Defteri Örneği :
https://www.learnpyqt.com/examples/no2pads-simple-notepad-clone/
Masaüstü Uygulama ikonları
https://icons8.com sitesinden alındı
Atasözleri : https://www.atasozlerianlamlari.com
Sonuç ve Demo:
Uygulamamıza ve uygulamamızın kaynak kodlarına https://github.com/MiniVelhasil/velhasil adresinden ulaşabilirsiniz.
Yarışmaya katılan diğer projelere github üzerinden acikhack2 etiketiyle ulaşabilirsiniz. https://github.com/topics/acikhack2
Cidden çok güzel yapmışsınız ellerinize, emeğinize sağlık.