Skip to content

Commit b501169

Browse files
Merge pull request #9 from erdiari/main
Added test and github actions to rule them
2 parents 52130dd + a00377b commit b501169

File tree

4 files changed

+273
-5
lines changed

4 files changed

+273
-5
lines changed

.github/workflows/test.yml

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
name: Python check
2+
3+
on: [push]
4+
5+
jobs:
6+
build:
7+
8+
runs-on: ubuntu-latest
9+
strategy:
10+
matrix:
11+
python-version: ["3.7", "3.8", "3.9", "3.10"]
12+
13+
steps:
14+
- uses: actions/checkout@v3
15+
- name: Set up Python ${{ matrix.python-version }}
16+
uses: actions/setup-python@v4
17+
with:
18+
python-version: ${{ matrix.python-version }}
19+
- name: Install dependencies
20+
run: |
21+
sudo apt update
22+
sudo apt -y install swig3.0
23+
python -m pip install --upgrade pip setuptools wheel pytest
24+
pip install '.[extras,develop]'
25+
- name: Test with pytest
26+
run: |
27+
pytest

.pre-commit-config.yaml

-3
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
11
repos:
22
- repo: https://github.com/psf/black
3-
description: "Black formatter to has a consistent formatting."
43
rev: 23.1.0
5-
types_or: [python, pyi, jupyter]
64
hooks:
75
- id: black-jupyter
86
- repo: https://github.com/PyCQA/flake8
9-
description: "Flake8 checket for styling rules."
107
rev: 5.0.4
118
hooks:
129
- id: flake8

setup.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,12 @@
4343
install_requires=[
4444
'tensorflow<2.6.0; python_version < "3.8"',
4545
'tensorflow>=2.6.0; python_version >= "3.8"',
46+
"swig==3.0.12",
4647
"regex",
4748
"requests",
4849
"sentencepiece",
49-
"swig==3.0.12",
5050
"jamspell"
5151
],
52-
extras_require={"extras": ["gensim", "spacy"], "develop": ["pre-commit"]},
52+
extras_require={"extras": ["gensim", "spacy"], "develop": ["pre-commit", "pytest"]},
5353
entry_points={"console_scripts": ["vnlp=vnlp.bin.vnlp:main"]},
5454
)

tests/test_general.py

+244
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,244 @@
1+
import unittest
2+
3+
from vnlp import (
4+
DependencyParser,
5+
PoSTagger,
6+
NamedEntityRecognizer,
7+
StemmerAnalyzer,
8+
SentimentAnalyzer,
9+
Normalizer,
10+
StopwordRemover,
11+
)
12+
13+
14+
class StemmerTest(unittest.TestCase):
15+
def setUp(self):
16+
self.analyzer = StemmerAnalyzer()
17+
18+
def test_predict_1(self):
19+
res = self.analyzer.predict(
20+
"Üniversite sınavlarına canla başla çalışıyorlardı."
21+
)
22+
expected = [
23+
"üniversite+Noun+A3sg+Pnon+Nom",
24+
"sınav+Noun+A3pl+P3sg+Dat",
25+
"can+Noun+A3sg+Pnon+Ins",
26+
"baş+Noun+A3sg+Pnon+Ins",
27+
"çalış+Verb+Pos+Prog1+A3pl+Past",
28+
".+Punc",
29+
]
30+
self.assertEqual(res, expected)
31+
32+
def test_predict_2(self):
33+
res = self.analyzer.predict("Şimdi baştan başla.")
34+
expected = [
35+
"şimdi+Adverb",
36+
"baş+Noun+A3sg+Pnon+Abl",
37+
"başla+Verb+Pos+Imp+A2sg",
38+
".+Punc",
39+
]
40+
self.assertEqual(res, expected)
41+
42+
43+
class NerTest(unittest.TestCase):
44+
def setUp(self):
45+
self.ner = NamedEntityRecognizer()
46+
47+
def test_predict_1(self):
48+
res = self.ner.predict(
49+
"Benim adım Melikşah, 29 yaşındayım, İstanbul'da ikamet ediyorum ve VNGRS AI Takımı'nda çalışıyorum."
50+
)
51+
expected = [
52+
("Benim", "O"),
53+
("adım", "O"),
54+
("Melikşah", "PER"),
55+
(",", "O"),
56+
("29", "O"),
57+
("yaşındayım", "O"),
58+
(",", "O"),
59+
("İstanbul'da", "LOC"),
60+
("ikamet", "O"),
61+
("ediyorum", "O"),
62+
("ve", "O"),
63+
("VNGRS", "ORG"),
64+
("AI", "ORG"),
65+
("Takımı'nda", "ORG"),
66+
("çalışıyorum", "O"),
67+
(".", "O"),
68+
]
69+
self.assertEqual(res, expected)
70+
71+
72+
class PoSTest(unittest.TestCase):
73+
def setUp(self):
74+
self.pos_tagger = PoSTagger()
75+
76+
def test_predict_1(self):
77+
res = self.pos_tagger.predict("Oğuz'un kırmızı bir Astra'sı vardı.")
78+
expected = [
79+
("Oğuz'un", "PROPN"),
80+
("kırmızı", "ADJ"),
81+
("bir", "DET"),
82+
("Astra'sı", "PROPN"),
83+
("vardı", "VERB"),
84+
(".", "PUNCT"),
85+
]
86+
self.assertEqual(res, expected)
87+
88+
89+
class DependencyParserTest(unittest.TestCase):
90+
def setUp(self):
91+
self.dep_parser = DependencyParser()
92+
93+
def test_predict_1(self):
94+
res = self.dep_parser.predict(
95+
"Onun için yol arkadaşlarımızı titizlikle seçer, kendilerini iyice sınarız."
96+
)
97+
expected = [
98+
(1, "Onun", 6, "obl"),
99+
(2, "için", 1, "case"),
100+
(3, "yol", 4, "nmod"),
101+
(4, "arkadaşlarımızı", 6, "obj"),
102+
(5, "titizlikle", 6, "obl"),
103+
(6, "seçer", 10, "parataxis"),
104+
(7, ",", 6, "punct"),
105+
(8, "kendilerini", 10, "obj"),
106+
(9, "iyice", 10, "advmod"),
107+
(10, "sınarız", 0, "root"),
108+
(11, ".", 10, "punct"),
109+
]
110+
self.assertEqual(res, expected)
111+
112+
113+
class SentimentAnalyzerTester(unittest.TestCase):
114+
def setUp(self):
115+
self.sentiment_analyzer = SentimentAnalyzer()
116+
117+
def test_predicts(self):
118+
_places = 1 # 1 decimal places is enough for this test
119+
_msg = "Sentiment analyzer results could change if the model is updated. Please check the results manually and replace the values if necessary."
120+
self.assertAlmostEqual(
121+
self.sentiment_analyzer.predict_proba(
122+
"Zeynep'in okul taksitini Bürokratistan'daki Parabank'tan yatırdım."
123+
),
124+
0.98,
125+
places=_places,
126+
msg=_msg,
127+
)
128+
self.assertAlmostEqual(
129+
self.sentiment_analyzer.predict_proba(
130+
"Sipariş geldiğinde biz karnımızı çoktan atıştırmalıklarla doyurmuştuk."
131+
),
132+
0.08,
133+
places=_places,
134+
msg=_msg,
135+
)
136+
self.assertAlmostEqual(
137+
self.sentiment_analyzer.predict_proba(
138+
"Servis daha iyi olabilirdi ama lezzet ve hız geçer not aldı."
139+
),
140+
1.00,
141+
places=_places,
142+
msg=_msg,
143+
)
144+
self.assertAlmostEqual(
145+
self.sentiment_analyzer.predict_proba("Mutlu değilim diyemem."),
146+
0.85,
147+
places=_places,
148+
msg=_msg,
149+
)
150+
self.assertAlmostEqual(
151+
self.sentiment_analyzer.predict_proba(
152+
"Geçmesin günümüz sevgilim yasla, o güzel başını göğsüme yasla."
153+
),
154+
0.99,
155+
places=_places,
156+
msg=_msg,
157+
)
158+
159+
160+
class NormalizerTester(unittest.TestCase):
161+
def setUp(self):
162+
self.normalizer = Normalizer()
163+
164+
def test_correct_typos(self):
165+
self.assertEqual(
166+
self.normalizer.correct_typos("kassıtlı yazım hatası ekliyorumm"),
167+
"kasıtlı yazım hatası ekliyorum",
168+
)
169+
170+
def test_convert_number_to_words(self):
171+
self.assertEqual(
172+
self.normalizer.convert_numbers_to_words(
173+
"sabah 2 yumurta yedim ve tartıldığımda 1,15 kilogram aldığımı gördüm".split()
174+
),
175+
[
176+
"sabah",
177+
"iki",
178+
"yumurta",
179+
"yedim",
180+
"ve",
181+
"tartıldığımda",
182+
"bir",
183+
"virgül",
184+
"on",
185+
"beş",
186+
"kilogram",
187+
"aldığımı",
188+
"gördüm",
189+
],
190+
)
191+
192+
def test_deasciify(self):
193+
self.assertEqual(
194+
self.normalizer.deasciify("boyle sey gormedim duymadim".split()),
195+
["böyle", "şey", "görmedim", "duymadım"],
196+
)
197+
self.assertEqual(
198+
self.normalizer.deasciify("yatirdim".split()), ["yatırdım"]
199+
)
200+
201+
def test_misc(self):
202+
self.assertEqual(
203+
self.normalizer.lower_case("Test karakterleri: İIĞÜÖŞÇ"),
204+
"test karakterleri: iığüöşç",
205+
)
206+
self.assertEqual(
207+
self.normalizer.remove_punctuations(
208+
"noktalamalı test cümlesidir..."
209+
),
210+
"noktalamalı test cümlesidir",
211+
)
212+
self.assertEqual(
213+
self.normalizer.remove_accent_marks("merhâbâ gûzel yîlkî atî"),
214+
"merhaba guzel yılkı atı",
215+
)
216+
217+
218+
class StopwordRemoverTest(unittest.TestCase):
219+
def setUp(self):
220+
self.stopword_remover = StopwordRemover()
221+
222+
def test_remove_stopwords(self):
223+
self.assertEqual(
224+
self.stopword_remover.drop_stop_words(
225+
"acaba bugün kahvaltıda kahve yerine çay mı içsem ya da neyse süt içeyim".split()
226+
),
227+
["bugün", "kahvaltıda", "kahve", "çay", "içsem", "süt", "içeyim"],
228+
)
229+
230+
def test_dynamic_stopwords(self):
231+
dsw = self.stopword_remover.dynamically_detect_stop_words(
232+
"ben bugün gidip aşı olacağım sonra da eve gelip telefon açacağım aşı nasıl etkiledi eve gelip anlatırım aşı olmak bu dönemde çok ama ama ama ama çok önemli".split()
233+
)
234+
self.assertEqual(dsw, ["ama", "aşı", "gelip", "eve"])
235+
self.stopword_remover.add_to_stop_words(dsw)
236+
self.assertEqual(
237+
self.stopword_remover.drop_stop_words(
238+
"aşı olmak önemli demiş miydim".split()
239+
),
240+
["önemli", "demiş", "miydim"],
241+
)
242+
243+
if __name__ == "__main__":
244+
unittest.main()

0 commit comments

Comments
 (0)