Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added Normalizer class #1

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions example_normalize.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
import os

from zemberek.tokenization import Tokenization
from zemberek.normalizer import Normalizer

from tqdm import tqdm

PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
BASE_DIR = os.path.dirname(PROJECT_ROOT)

LOOK_UP_ROOT = os.path.join(PROJECT_ROOT, 'zemberek-data', 'normalization')
LM_FILE_PATH = os.path.join(PROJECT_ROOT, 'zemberek-data', 'lm', 'lm.2gram.slm')


zmbrk_tokenization = Tokenization()
zmbrk_normalize = Normalizer(LOOK_UP_ROOT, LM_FILE_PATH)


content = "Bakan Soylu, Avrupa Birliği (AB) desteğiyle Orta Doğu Araştırmaları Merkezi (ORSAM) ve TOBB Üniversitesi iş birliğinde yürütülen proje kapsamında bir otelde düzenlenen ‘Uluslararası Radikalleşme ve Aşırılık Sempozyumu’nda yaptığı konuşmada, teröristlerin kaçırdığı 13-14 yaşlarındaki kız çocuklarının cinsel istismarına maruz kaldıklarını anlatarak bu yaştaki çocukların anne sevgisine muhtaç olduklarını söyledi.Teröristlerin bu eylemlerinin Birleşmiş Milletler tarafından da teyit edildiğini belirten Soylu, bugün şehirlerin PKK’dan tamamen temizlendiğini, Doğu ve Güneydoğu’da yapılan yatırımlara değinen Soylu, şunları kaydetti: “Bunun sonucunda örgüte katılım tarihin en düşük seviyesindedir. Bir zamanlar yıllık 5 binli rakamlarla ifade edilen örgüte katılım sayısı 2018’de 136 kişi, bu yıl da şu ana kadar 101 kişidir. Örgütün rakamlarında daha düşük. Bu konuyu da kendilerine dert ediniyorlar. Elebaşlarından bir tanesi, son bir haftadaki değerlendirmesinde güneyden yani Suriye civarından örgüte katılım alabiliyoruz ama kuzeyden Türkiye tarafından örgüte artık katılım alamıyoruz diyor.” AA"

# some Turkish tweet examples
content2 = "seni uzun zamadır takip ediyorum usta . ? napıcaz peki abi , teslim mi olucaz . o kadar vahim durum ? ? ama ilk defa seni bu kadar ümidini kaybetmiş gördüm . o zaman bakabileceğimiz ooook işimiz olacak mı . "
content3 = 'izmiiir ’ e de gelecek misiniz :('
content4 = 'kardeş ali koc büyükk düşünüyor baya gidicek getircek bir yabancı kuracak sistemi , her açıdan alt yapı , taktiksel sistem yani o açıdan onu kaldırcak turk yok malesef , hem ali koç dedi şunu kariyerin sonlarına gelmiş yıldız oyuncu almak yok işte vizyon dedim vizyon'

sentences = zmbrk_tokenization.sentence_tokenize(content4)


# Example usage
# Sentences, which have been tokenized, are normalized.
for i, s in enumerate(sentences):
print("Sentence {0}: {1}".format(i, s))
normalized_sentence = zmbrk_normalize.normalize(s)
print("Normalized sentence: {0}\n".format(normalized_sentence))
81 changes: 81 additions & 0 deletions zemberek/normalizer.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
# coding=utf-8
import os
from os.path import join

PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
BASE_DIR = os.path.dirname(PROJECT_ROOT)

ZEMBEREK_PATH = join(BASE_DIR, 'zemberek', 'bin', 'zemberek-full-0.17.1.jar')

import jnius_config

# jnius_config.add_options('-Xrs', '-Xmx4096')
if not jnius_config.vm_running:
jnius_config.set_classpath(ZEMBEREK_PATH)

import jnius


class Normalizer():
def __init__(self, look_up_root, lm_file_path):
"""
Init class for Normalizer.
It resolves related Java classes and initialize equivalent Python classes.

You should first tokenize sentences like in example_normalize.py.

You can find the baseline lookup files and language model here:
https://drive.google.com/drive/folders/1tztjRiUs9BOTH-tb1v7FWyixl-iUpydW

Args:
look_up_root (str): The directory path includes helper files for normalization process.
lm_file_path (str): The file path of 2-gram language model.

Returns:
None.

Raises:
ValueError: If given paths are not valid.
"""
if not os.path.isdir(look_up_root):
raise ValueError(f'The given path for look_up_root is not valid: {look_up_root}')

if not os.path.isfile(lm_file_path):
raise ValueError(f'The given path for lm_file_path is not valid: {lm_file_path}')

self.__resolve_classes__()

lookupRoot = self.PathClass.get(look_up_root)
lmFile = self.PathClass.get(lm_file_path)
morphology = self.TurkishMorphologyClass.createWithDefaults()
self.TurkishSentenceNormalizer = self.TurkishSentenceNormalizerClass(morphology, lookupRoot, lmFile)

def __resolve_classes__(self):
"""
Get related Java classes.

Args:
None.
Returns:
None.
Raises:
None.
"""
self.TurkishSentenceNormalizerClass = jnius.autoclass('zemberek.normalization.TurkishSentenceNormalizer')
self.TurkishMorphologyClass = jnius.autoclass('zemberek.morphology.TurkishMorphology')
self.PathClass = jnius.autoclass('java.nio.file.Paths')

def normalize(self, sentence):
"""
Normalize given sentence and return normalized sentence.

Args:
sentence (str): The raw sentence need to be normalized.

Returns:
- (str): The normalized sentence.

Raises:
None.
"""
return self.TurkishSentenceNormalizer.normalize(sentence)