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;
}
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));
}
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);
}
}
}
}
}
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();
*/
}
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);
}
Aggregations