Search in sources :

Example 1 with TurkishTokenizer

use of zemberek.tokenization.TurkishTokenizer in project zemberek-nlp by ahmetaa.

the class ZemberekNlpScripts method getStrings.

private LinkedHashSet<String> getStrings() throws IOException {
    List<String> lines = Files.readAllLines(Paths.get("/media/depo/data/aaa/corpora/dunya.500k"));
    LinkedHashSet<String> words = new LinkedHashSet<>();
    TurkishTokenizer lexer = TurkishTokenizer.DEFAULT;
    for (String line : lines) {
        words.addAll(lexer.tokenizeToStrings(line));
    }
    Log.info("Line count = %d", lines.size());
    Log.info("Unique word count = %d", words.size());
    Files.write(Paths.get("dunya"), words);
    return words;
}
Also used : LinkedHashSet(java.util.LinkedHashSet) TurkishTokenizer(zemberek.tokenization.TurkishTokenizer)

Example 2 with TurkishTokenizer

use of zemberek.tokenization.TurkishTokenizer in project zemberek-nlp by ahmetaa.

the class CategoryPredictionExperiment method generateSets.

private void generateSets(Path input, Path train, Path test, boolean useOnlyTitle, boolean useLemmas) throws IOException {
    TurkishMorphology morphology = TurkishMorphology.createWithDefaults();
    WebCorpus corpus = new WebCorpus("category", "category");
    Log.info("Loading corpus from %s", input);
    corpus.addDocuments(WebCorpus.loadDocuments(input));
    List<String> set = new ArrayList<>(corpus.documentCount());
    TurkishTokenizer lexer = TurkishTokenizer.DEFAULT;
    Histogram<String> categoryCounts = new Histogram<>();
    for (WebDocument document : corpus.getDocuments()) {
        String category = document.getCategory();
        if (category.length() > 0) {
            categoryCounts.add(category);
        }
    }
    Log.info("All category count = %d", categoryCounts.size());
    categoryCounts.removeSmaller(20);
    for (String c : categoryCounts.getSortedList()) {
        System.out.println(c + " " + categoryCounts.getCount(c));
    }
    Log.info("Reduced label count = %d", categoryCounts.size());
    Log.info("Extracting data from %d documents ", corpus.documentCount());
    int c = 0;
    for (WebDocument document : corpus.getDocuments()) {
        if (document.getCategory().length() == 0) {
            continue;
        }
        if (useOnlyTitle && document.getTitle().length() == 0) {
            continue;
        }
        String content = document.getContentAsString();
        String title = document.getTitle();
        List<Token> docTokens = useOnlyTitle ? lexer.tokenize(title) : lexer.tokenize(content);
        List<String> reduced = new ArrayList<>(docTokens.size());
        String category = document.getCategory();
        if (categoryCounts.contains(category)) {
            category = "__label__" + document.getCategory().replaceAll("[ ]+", "_").toLowerCase(Turkish.LOCALE);
        } else {
            continue;
        }
        for (Token token : docTokens) {
            if (token.getType() == Token.Type.PercentNumeral || token.getType() == Token.Type.Number || token.getType() == Token.Type.Punctuation || token.getType() == Token.Type.RomanNumeral || token.getType() == Token.Type.Time || token.getType() == Token.Type.UnknownWord || token.getType() == Token.Type.Unknown) {
                continue;
            }
            String tokenStr = token.getText();
            reduced.add(tokenStr);
        }
        String join = String.join(" ", reduced);
        if (join.trim().isEmpty()) {
            continue;
        }
        if (useLemmas) {
            SentenceAnalysis analysis = morphology.analyzeAndDisambiguate(join);
            List<String> res = new ArrayList<>();
            for (SentenceWordAnalysis e : analysis) {
                SingleAnalysis best = e.getBestAnalysis();
                if (best.isUnknown()) {
                    res.add(e.getWordAnalysis().getInput());
                    continue;
                }
                List<String> lemmas = best.getLemmas();
                if (lemmas.size() == 0) {
                    continue;
                }
                res.add(lemmas.get(lemmas.size() - 1));
            }
            join = String.join(" ", res);
        }
        set.add("#" + document.getId() + " " + category + " " + join.replaceAll("[']", "").toLowerCase(Turkish.LOCALE));
        if (c++ % 1000 == 0) {
            Log.info("%d of %d processed.", c, corpus.documentCount());
        }
    }
    Log.info("Generate train and test set.");
    saveSets(train, test, new LinkedHashSet<>(set));
}
Also used : SingleAnalysis(zemberek.morphology.analysis.SingleAnalysis) Histogram(zemberek.core.collections.Histogram) ArrayList(java.util.ArrayList) Token(zemberek.tokenization.Token) SentenceAnalysis(zemberek.morphology.analysis.SentenceAnalysis) TurkishMorphology(zemberek.morphology.TurkishMorphology) SentenceWordAnalysis(zemberek.morphology.analysis.SentenceWordAnalysis) WebDocument(zemberek.corpus.WebDocument) TurkishTokenizer(zemberek.tokenization.TurkishTokenizer) WebCorpus(zemberek.corpus.WebCorpus)

Example 3 with TurkishTokenizer

use of zemberek.tokenization.TurkishTokenizer in project zemberek-nlp by ahmetaa.

the class SpellingCorpusProducer method generateCorpus.

void generateCorpus(List<Path> sentenceCorpusPaths, Path output) throws IOException {
    TurkishTokenizer lexer = TurkishTokenizer.DEFAULT;
    try (PrintWriter pw = new PrintWriter(output.toFile(), "utf-8")) {
        for (Path input : sentenceCorpusPaths) {
            WebCorpus wc = getWebCorpus(input);
            Log.info("Processing documents.");
            for (WebDocument doc : wc.getDocuments()) {
                List<String> sentences = doc.getLines();
                for (String sentence : sentences) {
                    List<String> tokenized = TurkishSpellChecker.tokenizeForSpelling(sentence);
                    String tokenSentence = String.join(" ", tokenized);
                    pw.println(tokenSentence);
                }
            }
        }
    }
}
Also used : Path(java.nio.file.Path) TurkishTokenizer(zemberek.tokenization.TurkishTokenizer) PrintWriter(java.io.PrintWriter)

Example 4 with TurkishTokenizer

use of zemberek.tokenization.TurkishTokenizer in project zemberek-nlp by ahmetaa.

the class SpellCheckerPerformanceTests method correctWordFindingTest.

@Test
@Ignore(value = "Not a test.")
public void correctWordFindingTest() throws Exception {
    TurkishMorphology morphology = TurkishMorphology.createWithDefaults();
    TurkishSpellChecker spellChecker = new TurkishSpellChecker(morphology);
    TurkishSentenceExtractor extractor = TurkishSentenceExtractor.DEFAULT;
    TurkishTokenizer tokenizer = TurkishTokenizer.DEFAULT;
    Path path = new File(Resources.getResource("spell-checker-test.txt").getFile()).toPath();
    List<String> lines = Files.readAllLines(path);
    List<String> sentences = extractor.fromParagraphs(lines);
    Stopwatch sw = Stopwatch.createStarted();
    Histogram<String> incorrectFound = new Histogram<>();
    Histogram<String> correctFound = new Histogram<>();
    for (String sentence : sentences) {
        List<Token> tokens = tokenizer.tokenize(sentence);
        for (Token token : tokens) {
            String text = token.getText();
            if (!spellChecker.check(text)) {
                incorrectFound.add(text);
            } else {
                correctFound.add(text);
            }
        }
    }
    Log.info("Elapsed = %d", sw.elapsed(TimeUnit.MILLISECONDS));
    Log.info("Incorrect (total/unique) = %d / %d", incorrectFound.totalCount(), incorrectFound.size());
    Log.info("Correct (total/unique) = %d / %d", correctFound.totalCount(), correctFound.size());
    incorrectFound.saveSortedByCounts(Paths.get("incorrect.txt"), " : ");
    correctFound.saveSortedByCounts(Paths.get("correct.txt"), " : ");
/*
        Path lmPath = Paths.get(ClassLoader.getSystemResource("lm-bigram.slm").toURI());
        SmoothLm model = SmoothLm.builder(lmPath.toFile()).build();
*/
}
Also used : Path(java.nio.file.Path) Histogram(zemberek.core.collections.Histogram) Stopwatch(com.google.common.base.Stopwatch) Token(zemberek.tokenization.Token) TurkishMorphology(zemberek.morphology.TurkishMorphology) TurkishSentenceExtractor(zemberek.tokenization.TurkishSentenceExtractor) TurkishTokenizer(zemberek.tokenization.TurkishTokenizer) File(java.io.File) Ignore(org.junit.Ignore) Test(org.junit.Test)

Example 5 with TurkishTokenizer

use of zemberek.tokenization.TurkishTokenizer in project zemberek-nlp by ahmetaa.

the class CorrectDocument method main.

public static void main(String[] args) throws IOException {
    // This is only for demonstration. Current normalization mechanism is not proper for automatic text normalization.
    String input = "Türk Vatanı ve Milletinin ebedi varlığxını ve Yüce Türk Devlatinin bölünmez bütünlüğünü belirleyen bu Anayasa,\n" + "Türkiye Cumhuriyetinin kurucusu, ölümsüz önder ve eşsiz kahraman Atatürk’ün belirlediği milliyetçilik anlayışı ve onun\n" + "inkılap ve ilkeleri doğrultusunda;\n" + "Dünya milletleri ailesinin eşit haklara sahip şerefli bir üyesi olarak, Türkiye Cumhuriyetinin ebedi varlığı, refahı,\n" + "maddi ve manelvi mutluluğu ile çağdaş medeniyet düzeyine ulaşma azmi yönünde;\n" + "Millet iradesinin mutlak üstünlüğü, egemenliğin kayıtsız şartsız Türk Milletine ait olduğu ve bunu millet adına\n" + "kullanmaya yetkili kılınan hiçbir kişi ve kuruluşun, bu Anayasada gösterilen hürriyetçi demokrasi ve bunun icaplarıyla\n" + "belirlenmiş hukuk düzeni dışına çıkamayacağı;\n" + "Kuvvetler ayrımının, Devlet organları arasında üstünlük sıralaması anlamına gelmeyip, belli Devlet yetki ve\n" + "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\n" + "ve kanunlarda bulunduğu;\n" + "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\n" + "tarihi ve manevi değerlerinin, Atatürk milliyetçiliği, ilke ve inkılapları ve medeniyetçiliğinin karşısında korunma\n" + "göremeyeceği ve laiklik ilkesinin gereği olarak kutsal din duygularının, Devlet işlerine ve politikaya kesinlikle\n" + "karıştırılamayacağı; (5)\n" + "\n" + "Her Türk vatandaşının bu Anayasadaki temel hak ve hürriyetlerden eşitlik ve sosyal adalet gereklerince yararlanarak\n" + "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\n" + "hak ve yetkisine doğuştan sahip olduğu;\n" + "–––––––––––––––––––––––––––––\n" + "(1) Bu Anayasa; Kuruczu Meclis tarafından 18/10/1982’de Halkoylamasına sunulmak üzere kabul edilmiş ve 20/10/1982\n" + "tarihli ve 17844 sayılı Resmî Gazete’de yayımlanmış; 7/11/1982’de Halkoylamasına sunulduktan sonra 9/11/1982 tarihli\n" + "ve 17863 Mükerrer sayıli Resmî Gazete’de yeniden yayımlanmıştır.\n" + "(2) 7/5/2010 tarihli ve 5982 sayılı Kanun ile yapılan Anayasa değişiklikleri 12/9/2010 tarihinde Halkoyuna sunularak kabul\n" + "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î\n" + "Gazete’de yayımlanmıştır.\n" + "(3) 21/1/2017 tarihli ve 6771 sayılı Kanun ile yapılan Anayasa değişiklikleri 16/4/2017 tarihinde Halkoyuna sunularak kabul\n" + "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\n" + "sayılı Resmî Gazete’de yayımlanmıştır.\n" + "(4) Anayasa’nın Başlangıc metni 23/7/1995 tarih ve 4121 sayılı Kanun’un 1 inci maddesi ile değiştirilmiş ve metne\n" + "işlenmiştir.\n" + "(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\n" + "“Hiçbir faaliyetin” şeklinde değiştirilmiş ve metne işlenmiştir.\n" + "130\n" + "Topluca Türk vatandaşlarının milli gurur ve iftiharlarda, milli sevinç ve kederlerde, milli varlığa karşı hak ve\n" + "ödevlerde, nimet ve külfetlerde ve millet hayatının her türlü tecellisinde ortak olduğu, birbirinin hak ve hürriyetlerine kesin\n" + "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\n" + "talebine hakları bulunduğu;\n" + "FİKİR, İNANÇ VE KARARIYLA anlaşılmak, sözüne ve ruhuna bu yönde saygı ve mutlak sadakatle yorumlanıp\n" + "uygulanmak üzere.\n" + "TÜRK MİLLETİ TARAFINDAN, demokrasiye aşık Türk evlatlarının vatan ve millet sevgisine emanet ve tevdi\n" + "olunur.\n" + "BİRİNCİ KISIM\n" + "GENEL ESASLAR\n" + "I. Devletin şekli\n" + "Madde 1 – Türkiye Devleti bir Cumhuriyettir.\n" + "II. Cumhuriyetin nitelikleri\n" + "Madde 2 – Türkiye Cumhuriyeti, toplumun huzuru, milli dayanışma ve adalet anlayışı içinde, insan haklarına saygılı,\n" + "Atatürk milliyetçiliğine bağlı, başlangıçta belirtilen temel ilkelere dayanan, demokratik, laik ve sosyal bir hukuk Devletidir.\n" + "III. Devletin bütünlüğü, Resmî dili, bayrağı, milli marşı ve başkenti\n" + "Madde 3 – Türkiye Devleti, ülkesi ve milletiyle bölünmez bir bütündür. Dili Türkçedir.\n" + "Bayrağı, şekli kanununda belirtilen, beyaz ay yıldızlı al bayraktır.\n" + "Milli marşı \"İstiklal Marşı\"dır.\n" + "Başkenti Ankara'dır.\n" + "IV. Değiştirilemeyecek hükümler\n" + "Madde 4 – Anayasanın 1 inci maddesindeki Devletin şeklinin Cumhuriyet olduğu hakkındaki hüküm ile, 2 nci\n" + "maddesindeki Cumhuriyetin nitelikleri ve 3 üncü maddesi hükümleri değiştirilemez ve değiştirilmesi teklif edilemez.\n" + "V. Devletin temel amaç ve görevleri\n" + "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,\n" + "Cumhuriyeti ve demokrasiyi korumak, kişilerin ve toplumun refah, huzur ve mutluluğunu sağlamak; kişinin temel hak ve\n" + "hürriyetlerini, sosyal hukuk devleti ve adalet ilkeleriyle bağdaşmayacak surette sınırlayan siyasal, ekonomik ve sosyal\n" + "engelleri kaldırmaya, insanın maddi ve manevi varlığının gelişmesi için gerekli şartları hazırlamaya çalışmaktır.\n" + "VI. Egemenlik\n" + "Madde 6 – Egemenlik, kayıtsız şartsız Milletindir.\n" + "Türk Milleti, egemenliğini, Anayasanın koyduğu esaslara göre, yetkili organları eliyle kullanır.\n" + "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\n" + "kaynağını Anayasadan almayan bir Devlet yetkisi kullanamaz";
    TurkishTokenizer tokenizer = TurkishTokenizer.ALL;
    TurkishMorphology morphology = TurkishMorphology.createWithDefaults();
    TurkishSpellChecker spellChecker = new TurkishSpellChecker(morphology);
    StringBuilder output = new StringBuilder();
    for (Token token : tokenizer.tokenize(input)) {
        String text = token.getText();
        if (analyzeToken(token) && !spellChecker.check(text)) {
            List<String> strings = spellChecker.suggestForWord(token.getText());
            if (!strings.isEmpty()) {
                String suggestion = strings.get(0);
                Log.info("Correction: " + text + " -> " + suggestion);
                output.append(suggestion);
            } else {
                output.append(text);
            }
        } else {
            output.append(text);
        }
    }
    Log.info(output);
}
Also used : TurkishSpellChecker(zemberek.normalization.TurkishSpellChecker) TurkishTokenizer(zemberek.tokenization.TurkishTokenizer) Token(zemberek.tokenization.Token) TurkishMorphology(zemberek.morphology.TurkishMorphology)

Aggregations

TurkishTokenizer (zemberek.tokenization.TurkishTokenizer)11 Token (zemberek.tokenization.Token)6 TurkishMorphology (zemberek.morphology.TurkishMorphology)4 ArrayList (java.util.ArrayList)3 Stopwatch (com.google.common.base.Stopwatch)2 Path (java.nio.file.Path)2 Ignore (org.junit.Ignore)2 Test (org.junit.Test)2 Histogram (zemberek.core.collections.Histogram)2 SentenceAnalysis (zemberek.morphology.analysis.SentenceAnalysis)2 File (java.io.File)1 IOException (java.io.IOException)1 PrintWriter (java.io.PrintWriter)1 LinkedHashSet (java.util.LinkedHashSet)1 WebCorpus (zemberek.corpus.WebCorpus)1 WebDocument (zemberek.corpus.WebDocument)1 SentenceWordAnalysis (zemberek.morphology.analysis.SentenceWordAnalysis)1 SingleAnalysis (zemberek.morphology.analysis.SingleAnalysis)1 WordAnalysis (zemberek.morphology.analysis.WordAnalysis)1 TurkishSpellChecker (zemberek.normalization.TurkishSpellChecker)1