ahmetaa / zemberek-nlp

NLP tools for Turkish.
Other
1.14k stars 208 forks source link

Art arda 2 boşluk konulunca hatalı sonuç #156

Closed mertselimb closed 6 years ago

mertselimb commented 6 years ago

Merhaba , İlk önce bu harika kütüphane için teşekkürler.Sizin kodunuzu kullanırken bazı bir girdileri normalize ederken bir sesli harf eklediğini farkettim.Aşağıdaki "o o"lar normal metinde yok.

Kullanılan metin:

Türk Vatanı ve Milletinin ebedi varlığını ve Yüce Türk Devlatinin bölünmez bütünlüğünü belirleyen bu Anayasa, Türkiye Cumhuriyetinin kurucusu, ölümsüz önder ve eşsiz kahraman Atatürk’ün belirlediği milliyetçilik anlayışı ve onun inkılap ve ilkeleri doğrultusunda; Dünya milletleri ailesinin eşit haklara sahip şerefli bir üyesi olarak, Türkiye Cumhuriyetinin ebedi varlığı, refahı, maddi ve manevi mutluluğu ile çağdaş medeniyet düzeyine ulaşma azmi yönünde; Millet iradesinin mutlak üstünlüğü, egemenliğin kayıtsız şartsız Türk Milletine ait olduğu ve bunu millet adına kullanmaya yetkili kılınan hiçbir kişi ve kuruluşun, bu Anayasada gösterilen hürriyetçi demokrasi ve bunun icaplarıyla belirlenmiş hukuk düzeni dışına çıkamayacağı; Kuvvetler ayrımının, Devlet organları arasında üstünlük sıralaması anlamına gelmeyip, belli Devlet yetki ve görevlerinin kullanılmasından ibaret ve bununla sınırlı medeni bir işbölümü ve işbirliği olduğu ve üstünlüğün ancak Anayasa ve kanunlarda bulunduğu; Hiçbir faaliyetin Türk milli menfaatlerinin, Türk varlığının, Devleti ve ülkesiyle bölünmezliği esasının, Türklüğün tarihi ve manevi değerlerinin, Atatürk milliyetçiliği, ilke ve inkılapları ve medeniyetçiliğinin karşısında korunma göremeyeceği ve laiklik ilkesinin gereği olarak kutsal din duygularının, Devlet işlerine ve politikaya kesinlikle karıştırılamayacağı; (5)

Her Türk vatandaşının bu Anayasadaki temel hak ve hürriyetlerden eşitlik ve sosyal adalet gereklerince yararlanarak milli kültür, medeniyet ve hukuk düzeni içinde onurlu bir hayat sürdürme ve maddi ve manevi varlığını bu yönde geliştirme hak ve yetkisine doğuştan sahip olduğu; ––––––––––––––––––––––––––––– (1) Bu Anayasa; Kurucu Meclis tarafından 18/10/1982’de Halkoylamasına sunulmak üzere kabul edilmiş ve 20/10/1982 tarihli ve 17844 sayılı Resmî Gazete’de yayımlanmış; 7/11/1982’de Halkoylamasına sunulduktan sonra 9/11/1982 tarihli ve 17863 Mükerrer sayılı Resmî Gazete’de yeniden yayımlanmıştır. (2) 7/5/2010 tarihli ve 5982 sayılı Kanun ile yapılan Anayasa değişiklikleri 12/9/2010 tarihinde Halkoyuna sunularak kabul edilmiş, buna ilişkin 22/9/2010 tarihli ve 846 sayılı Yüksek Seçim Kurulu Kararı 23/9/2010 tarihli ve 27708 sayılı Resmî Gazete’de yayımlanmıştır. (3) 21/1/2017 tarihli ve 6771 sayılı Kanun ile yapılan Anayasa değişiklikleri 16/4/2017 tarihinde Halkoyuna sunularak kabul edilmiş, buna ilişkin 27/4/2017 tarihli ve 663 sayılı Yüksek Seçim Kurulu Kararı 27/4/2017 tarihli ve 30050 Mükerrer sayılı Resmî Gazete’de yayımlanmıştır. (4) Anayasa’nın Başlangıç metni 23/7/1995 tarih ve 4121 sayılı Kanun’un 1 inci maddesi ile değiştirilmiş ve metne işlenmiştir. (5) Bu fıkrada geçen, “Hiçbir düşünce ve mülahazanın” ibaresi, 3/10/2001 tarih ve 4709 sayılı Kanunun 1 inci maddesiyle “Hiçbir faaliyetin” şeklinde değiştirilmiş ve metne işlenmiştir. 130 Topluca Türk vatandaşlarının milli gurur ve iftiharlarda, milli sevinç ve kederlerde, milli varlığa karşı hak ve ödevlerde, nimet ve külfetlerde ve millet hayatının her türlü tecellisinde ortak olduğu, birbirinin hak ve hürriyetlerine kesin saygı, karşılıklı içten sevgi ve kardeşlik duygularıyla ve "Yurtta sulh, cihanda sulh" arzu ve inancı içinde, huzurlu bir hayat talebine hakları bulunduğu; FİKİR, İNANÇ VE KARARIYLA anlaşılmak, sözüne ve ruhuna bu yönde saygı ve mutlak sadakatle yorumlanıp uygulanmak üzere. TÜRK MİLLETİ TARAFINDAN, demokrasiye aşık Türk evlatlarının vatan ve millet sevgisine emanet ve tevdi olunur. BİRİNCİ KISIM GENEL ESASLAR I. Devletin şekli Madde 1 – Türkiye Devleti bir Cumhuriyettir. II. Cumhuriyetin nitelikleri Madde 2 – Türkiye Cumhuriyeti, toplumun huzuru, milli dayanışma ve adalet anlayışı içinde, insan haklarına saygılı, Atatürk milliyetçiliğine bağlı, başlangıçta belirtilen temel ilkelere dayanan, demokratik, laik ve sosyal bir hukuk Devletidir. III. Devletin bütünlüğü, Resmî dili, bayrağı, milli marşı ve başkenti Madde 3 – Türkiye Devleti, ülkesi ve milletiyle bölünmez bir bütündür. Dili Türkçedir. Bayrağı, şekli kanununda belirtilen, beyaz ay yıldızlı al bayraktır. Milli marşı "İstiklal Marşı"dır. Başkenti Ankara'dır. IV. Değiştirilemeyecek hükümler Madde 4 – Anayasanın 1 inci maddesindeki Devletin şeklinin Cumhuriyet olduğu hakkındaki hüküm ile, 2 nci maddesindeki Cumhuriyetin nitelikleri ve 3 üncü maddesi hükümleri değiştirilemez ve değiştirilmesi teklif edilemez. V. Devletin temel amaç ve görevleri Madde 5 – Devletin temel amaç ve görevleri, Türk milletinin bağımsızlığını ve bütünlüğünü, ülkenin bölünmezliğini, Cumhuriyeti ve demokrasiyi korumak, kişilerin ve toplumun refah, huzur ve mutluluğunu sağlamak; kişinin temel hak ve hürriyetlerini, sosyal hukuk devleti ve adalet ilkeleriyle bağdaşmayacak surette sınırlayan siyasal, ekonomik ve sosyal engelleri kaldırmaya, insanın maddi ve manevi varlığının gelişmesi için gerekli şartları hazırlamaya çalışmaktır. VI. Egemenlik Madde 6 – Egemenlik, kayıtsız şartsız Milletindir. Türk Milleti, egemenliğini, Anayasanın koyduğu esaslara göre, yetkili organları eliyle kullanır. Egemenliğin kullanılması, hiçbir surette hiçbir kişiye, zümreye veya sınıfa bırakılamaz. Hiçbir kimse veya organ kaynağını Anayasadan almayan bir Devlet yetkisi kullanamaz

yaptığım işlem

private static String strNormalize(String str) throws IOException{
        String result = "";
        TurkishMorphology morphology = TurkishMorphology.createWithDefaults();
        TurkishSpellChecker spellChecker = new TurkishSpellChecker(morphology);

        Log.info("Check if written correctly.");
        String[] words = str.split(" ");
        Log.info("Give suggestions.");
        for (String word : words) {
            if(word != null  && !word.equals(""))
            {
                if(!spellChecker.suggestForWord(word).isEmpty())
                result += " " + spellChecker.suggestForWord(word).get(0);
            }
        }
        return result;
    }

Sonuç:

Türk Vatan de Milletinin ebedi varlığını de Yüce Türk Devletinin bölünmez bütünlüğünü belirlenen bu Anayasa Türkiye Cumhuriyetinin kurucusu ölümsüz önde de işsiz kahraman Atatürk’ün belirlediği milliyetçilik anlayışı de onun İnkılap de ülkeleri doğrultusunda Dünya milletler ailesinin eşi Hakları sahip Şerefli bin üyesi olarak Türkiye Cumhuriyetinin ebedi varlığı refahı madde de manevi mutluluğu ise çağdaş medeniyet düzeyinde ulaşmak azami yönünde Millet ifadesinin mutlaka üstünlüğü egemenliği kayıtsız şartsız Türk Milletin ait olduğu de bunun millet adına kullanmaya etkili kılınan hiçbir kişi de kuruluşun bu Anayasaya gösterilen hürriyeti demokrasi de bunun itaplarıyla belirlenmiş hukuk düzenli dışında çıkamayacağı Kuvvetleri ayrımının Devlet oranları arasında üstünlük sıralaması anlamına gelmeyip belli Devlet etki de görevlerini kullanılmasından işaret de bununla sınırlı nedeni bin işbölümü de işbirliği olduğu de üstünlüğü ancak Anayasa de kanunlarda bulunduğu Hiçbir faaliyeti Türk milli menfaatlerinin Türk varlığının Devlet de ülkesiyle bölünmezliği esasının Türk'lüğüne tarihi de manevi değerlerinin Atatürk milliyetçiliği ile de İnkılap'ları de medeniyetsiliğinin karşısında koruma göremeyeceği de laiklik ülkesinin gereği olarak kutsal bin duygularının Devlet işlerin de politikada kesinlikle karıştırılamayacağı Her Türk vatandaşının bu Anayasadaki temel ak de hürriyetlerdin eşitlik de sosyal adalet gereklerine yararlanarak milli kültür medeniyet de hukuk düzenli içinde Onurlu bin hayata sürdürmek de madde de manevi varlığını bu önde geliştirme ak de etkisine doğuştan sahip olduğu Bu Anayasa Kurulu Meclis tarafından Halkoylamasına sunulmak üzere kabul edilmiş de tarihi de sayısı Resmi Gazetede yayımlanmış Halkoylamasına sunulduktan sonra tarihi de Mükerrer sayısı Resmi Gazetede yeniden yayımlanmıştır tarihi de sayısı Kanun ise yapılan Anayasa değişiklikler tarihinde Halkoyuna sunulacak kabul edilmiş bunu ilişkin tarihi de sayısı Yüksek Seçim Kurulu Karar tarihi de sayısı Resmi Gazetede yayımlanmıştır tarihi de sayısı Kanun ise yapılan Anayasa değişiklikler tarihinde Halkoyuna sunulacak kabul edilmiş bunu ilişkin tarihi de sayısı Yüksek Seçim Kurulu Karar tarihi de Mükerrer sayısı Resmi Gazetede yayımlanmıştır Anayasanın Başlangıç metin tarihi de sayısı Kanunun o ince caddesi ise değiştirilmiş de metre işlenmiştir Bu fıkrada geçen hiçbir düşünce de mülahazanın ibaresi tarihi de sayısı Kanunu o ince maddesiyle hiçbir faaliyetin şeklinde değiştirilmiş de metre işlenmiştir Topluma Türk vatandaşlarının milli gurur de iftiharlardan milli Sevinç de kederlerden milli varlığı karşı ak de ödevlerden niyet de külfetlerde de millet hayatını her türlü tecellimsinde ortak olduğu birbirini ak de hürriyetlerin kesin saygı karşılıklı işten sevgi de Kardeşlik duygularımla de yurtta sulh cihazda sulh arz de inancı içinde Huzurlu bin hayata talebinde Hakları bulunduğu FİKİR İNANÇ DE KARARIYLA anlaşılmak sözünü de ruhunu bu önde saygı de mutlaka sadakatle yorumlanır uygulamak üzere TÜRK MİLLET TARAFINDAN demokrasiye açık Türk evlatlarını vatan de millet sevgisini emanet de sevdi olunur BİRİNCİ KASIM GENEL ESASLAR IN Devletin şekli Madde o o Türkiye Devlet bin Cumhuriyettir II Cumhuriyeti nitelikleri Madde o o Türkiye Cumhuriyeti toplumun huzuru milli dayanışma de adalet anlayışı içinde insan Haklarını Saygılı Atatürk milliyetçiliğin Bağlı başlangıçta belirtilen temel ülkelere dayanan demokratik laik de sosyal bin hukuk Devletidir Devletin bütünlüğü Resmi dili bayrağı milli karşı de başkenti Madde o o Türkiye Devletin ülkeyi de milletiyle bölünmez bin bütündür Dile Türkçe'dir Bayrağı şekli Kanunu'na belirtilen beyaz ak yıldızı il bayraktır Milli karşı istiklal Başkenti IVY Değiştirilemeyecek hükümleri Madde o o Anayasanın o ince Caddesi'ndeki Devletin şeklini Cumhuriyet olduğu hakkındaki hüküm ile o inci Caddesi'ndeki Cumhuriyeti nitelikleri de o Ünlü caddesi hükümleri değiştirilemez de değiştirilmesi teklif edilemez VE Devletin temel ama de görevleri Madde o o Devletin temel ama de görevleri Türk milletinin bağımsızlığını de bütünlüğünü ülkenin bölünmezliğiniz Cumhuriyet de demokrasiye korumak kişilerin de toplumun refah huzur de mutluluğunu sağlamak kişinin temel ak de hürriyetlerini sosyal hukuk Devlet de adalet ülkeleriyle bağdaşmayacak suretle sınırlayan siyasal ekonomik de sosyal engeller kaldırmaya insanın madde de manevi varlığını gelişmesi için gerekli şartları hazırlamaya çalışmaktır VIP Egemenlik Madde o o Egemenlik kayıtsız şartsız Milletindir Türk Milletin egemenliğini Anayasanın koyduğu esaslar göre etkili oranları eliyle kullanır Egemenliği kullanılması hiçbir suretle hiçbir kişiye zümreye veya sınıf bırakılamaz Hiçbir kimse veya orman kaynağını Anayasada olmayan bin Devlet etkisi kullanamaz|

mdakin commented 6 years ago

@mertselimb Burada 2 sorun var, birincisi morfolojik olarak cozumlenebilmis kelimeler icin oneri uretmek dogru degil, normal kelimeleri de farkli seylere donusturebilir (verdiginiz ornekte de oyle olmus).

@ahmetaa daha net bir cevap verir sanirim ama sanirim su anda kullanilan spell checker in ciktisini kontrol etmek cok kolay degil dolayisiyla cift bosluklari da ihmal etmek dogru olacaktir (trim() vs ile) bu tur metin problemlerini cozmek icin baska bir yontem de tokenizer kullanmak.

mdakin commented 6 years ago

@mertselimb spellChecker.check() ile kelimenin hatali olup olmadigini kontrol edebilirsiniz.

mdakin commented 6 years ago

@mertselimb Bir ornek ekledim: https://github.com/ahmetaa/zemberek-nlp/blob/master/examples/src/main/java/zemberek/examples/normalization/CorrectDocument.java

ahmetaa commented 6 years ago

Mehmet'in söyledikleri ve yazdığı kod doğru. "o" sıfır uzunluklu giriş için üretiliyor. Çünkü kodunuzda sadece boşlukları ihmal ediyor ama newline karakterlerini spell checker'a veriyorsunuz.

Mehmetin dediklerini tekrar etmiş gibi olacağım ama; Spell checkeri kullanmadan önce cümle ayrımı yapıp mümkünse tokenizer kullanarak kelimelere uygulamanız gerekir. Girdiyi de check() ile önce denetlemek iyi olur

Ayrıca tüm döküman üzerinden otomatik spell checker uygulamak istenmeyen sonuçlar doğurabilir. Yani amacınız neyse ona göre farklı araçlar kullanmanız gerekebilir. Spell checker bu haliyle insan gözetiminde hata düzeltme için kullanıma uygun. (hatayı gösterip öneri sunma şeklinde)

SpellChecker modülü henüz başlangıç aşamasında olduğu için hatalar da yapıyor. mesela roma rakamları için öneri üretiyor vs.

mertselimb commented 6 years ago

Hızlı cevap için teşekkürler. Kodu düzelttim.