Skip to content
Merged
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
Binary file not shown.
Binary file not shown.
8 changes: 4 additions & 4 deletions pythainlp/tag/perceptron.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,20 @@
Perceptron Part-Of-Speech tagger
"""
import os
import pickle
from typing import List, Tuple

import dill
from pythainlp.corpus import corpus_path
from pythainlp.tag.orchid import tag_signs, tag_to_text

_ORCHID_DATA_FILENAME = "orchid_pt_tagger.dill"
_PUD_DATA_FILENAME = "ud_thai_pud_pt_tagger.dill"
_ORCHID_DATA_FILENAME = "orchid_pt_tagger.pkl"
_PUD_DATA_FILENAME = "ud_thai_pud_pt_tagger.pkl"


def _load_tagger(filename):
data_filename = os.path.join(corpus_path(), filename)
with open(data_filename, "rb") as fh:
model = dill.load(fh)
model = pickle.load(fh)
return model


Expand Down
1 change: 0 additions & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
dill==0.3.*
python-crfsuite==0.9.*
requests==2.23.*
tinydb==4.1.*
Expand Down
5 changes: 2 additions & 3 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@
"""

requirements = [
"dill>=0.3.0",
"python-crfsuite>=0.9.6",
"requests>=2.22.0",
"tinydb>=3.0",
Expand Down Expand Up @@ -91,7 +90,7 @@
"etcc.txt",
"negations_th.txt",
"orchid_pos_th.json",
"orchid_pt_tagger.dill",
"orchid_pt_tagger.pkl",
"person_names_female_th.txt",
"person_names_male_th.txt",
"sentenceseg-crfcut-v2.model",
Expand All @@ -101,7 +100,7 @@
"thailand_provinces_th.txt",
"tnc_freq.txt",
"ttc_freq.txt",
"ud_thai_pud_pt_tagger.dill",
"ud_thai_pud_pt_tagger.pkl",
"ud_thai_pud_unigram_tagger.json",
"words_th_thai2fit_201810.txt",
"words_th.txt",
Expand Down
122 changes: 58 additions & 64 deletions tests/test_tag.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,9 @@
from pythainlp.tag import perceptron, pos_tag, pos_tag_sents, unigram
from pythainlp.tag.locations import tag_provinces
from pythainlp.tag.named_entity import ThaiNameTagger
from pythainlp.tokenize import (
word_tokenize,
)


class TestTagPackage(unittest.TestCase):

def test_pos_tag(self):
tokens = ["ผม", "รัก", "คุณ"]

Expand All @@ -29,7 +25,7 @@ def test_pos_tag(self):
self.assertIsNotNone(pos_tag(tokens, engine="unigram", corpus="pud"))
self.assertIsNotNone(pos_tag([""], engine="unigram", corpus="pud"))
self.assertEqual(
pos_tag(word_tokenize("คุณกำลังประชุม"), engine="unigram"),
pos_tag(["คุณ", "กำลัง", "ประชุม"], engine="unigram"),
[("คุณ", "PPRS"), ("กำลัง", "XVBM"), ("ประชุม", "VACT")],
)

Expand All @@ -43,6 +39,10 @@ def test_pos_tag(self):
self.assertEqual(perceptron.tag([], corpus="pud"), [])
self.assertEqual(perceptron.tag(None, corpus="orchid"), [])
self.assertEqual(perceptron.tag([], corpus="orchid"), [])
self.assertEqual(
pos_tag(["นักเรียน", "ถาม", "ครู"]),
[("นักเรียน", "NCMN"), ("ถาม", "VACT"), ("ครู", "NCMN")],
)

self.assertEqual(pos_tag_sents(None), [])
self.assertEqual(pos_tag_sents([]), [])
Expand Down Expand Up @@ -81,108 +81,102 @@ def test_ner(self):
"""คณะวิทยาศาสตร์ประยุกต์และวิศวกรรมศาสตร์ มหาวิทยาลัยขอนแก่น
วิทยาเขตหนองคาย 112 หมู่ 7 บ้านหนองเดิ่น ตำบลหนองกอมเกาะ อำเภอเมือง
จังหวัดหนองคาย 43000""",
tag=True
tag=True,
)
)

# arguement `tag` is True
self.assertEqual(
ner.get_ner(
"วันที่ 15 ก.ย. 61 ทดสอบระบบเวลา 14:49 น.",
tag=True
),
ner.get_ner("วันที่ 15 ก.ย. 61 ทดสอบระบบเวลา 14:49 น.", tag=True),
"วันที่ <DATE>15 ก.ย. 61</DATE> "
"ทดสอบระบบเวลา <TIME>14:49 น.</TIME>")
"ทดสอบระบบเวลา <TIME>14:49 น.</TIME>",
)

self.assertEqual(
ner.get_ner(
"url = https://thainlp.org/pythainlp/docs/2.0/",
tag=True
"url = https://thainlp.org/pythainlp/docs/2.0/", tag=True
),
"url = <URL>https://thainlp.org/pythainlp/docs/2.0/</URL>")
"url = <URL>https://thainlp.org/pythainlp/docs/2.0/</URL>",
)

self.assertEqual(
ner.get_ner(
"example@gmail.com",
tag=True
),
"<EMAIL>example@gmail.com</EMAIL>")
ner.get_ner("example@gmail.com", tag=True),
"<EMAIL>example@gmail.com</EMAIL>",
)

self.assertEqual(
ner.get_ner(
"รหัสไปรษณีย์ 19130",
tag=True
),
"รหัสไปรษณีย์ <ZIP>19130</ZIP>")
ner.get_ner("รหัสไปรษณีย์ 19130", tag=True),
"รหัสไปรษณีย์ <ZIP>19130</ZIP>",
)

self.assertEqual(
ner.get_ner(
"เบอร์โทรศัพท์ 091-123-4567",
tag=True
),
"เบอร์โทรศัพท์ <PHONE>091-123-4567</PHONE>")
ner.get_ner("เบอร์โทรศัพท์ 091-123-4567", tag=True),
"เบอร์โทรศัพท์ <PHONE>091-123-4567</PHONE>",
)

self.assertEqual(
ner.get_ner(
"อาจารย์เอกพล ประจำคณะวิศวกรรมศาสตร์ ",
tag=True
),
ner.get_ner("อาจารย์เอกพล ประจำคณะวิศวกรรมศาสตร์ ", tag=True),
"<PERSON>อาจารย์เอกพล</PERSON> ประจำ<ORGANIZATION>"
"คณะวิศวกรรมศาสตร์</ORGANIZATION> ")
"คณะวิศวกรรมศาสตร์</ORGANIZATION> ",
)

self.assertEqual(
ner.get_ner(
"มาตรา 80 ปพพ ให้ใช้อัตราภาษีร้อยละ 10.0"
" ในการคำนวณภาษีมูลค่าเพิ่ม",
tag=True
tag=True,
),
"<LAW>มาตรา 80 ปพพ</LAW> "
"ให้ใช้อัตราภาษี<PERCENT>ร้อยละ 10.0</PERCENT>"
" ในการคำนวณภาษีมูลค่าเพิ่ม")
" ในการคำนวณภาษีมูลค่าเพิ่ม",
)

self.assertEqual(
ner.get_ner(
"ยาว 20 เซนติเมตร",
tag=True
),
"ยาว <LEN>20 เซนติเมตร</LEN>")
ner.get_ner("ยาว 20 เซนติเมตร", tag=True),
"ยาว <LEN>20 เซนติเมตร</LEN>",
)

self.assertEqual(
ner.get_ner(
"1 บาท",
pos=True,
tag=True),
"<MONEY>1 บาท</MONEY>")
ner.get_ner("1 บาท", pos=True, tag=True), "<MONEY>1 บาท</MONEY>"
)

self.assertEqual(
ner.get_ner(
"ไทย",
pos=False,
tag=True
),
"<LOCATION>ไทย</LOCATION>")
ner.get_ner("ไทย", pos=False, tag=True), "<LOCATION>ไทย</LOCATION>"
)

# arguement `tag` is False and `pos` is True
self.assertEqual(
ner.get_ner(
"ไทย",
pos=True,
tag=False
),
[('ไทย', 'PROPN', 'B-LOCATION')])
ner.get_ner("ไทย", pos=True, tag=False),
[("ไทย", "PROPN", "B-LOCATION")],
)

# arguement `tag` is False and `pos` is False
self.assertEqual(
ner.get_ner(
"วันที่ 15 ก.ย. 61 ทดสอบระบบเวลา 14:49 น.",
pos=False,
tag=False
tag=False,
),
[('วันที่', 'O'), (' ', 'O'), ('15', 'B-DATE'),
(' ', 'I-DATE'), ('ก.ย.', 'I-DATE'), (' ', 'I-DATE'),
('61', 'I-DATE'), (' ', 'O'), ('ทดสอบ', 'O'), ('ระบบ', 'O'),
('เวลา', 'O'), (' ', 'O'), ('14', 'B-TIME'), (':', 'I-TIME'),
('49', 'I-TIME'), (' ', 'I-TIME'), ('น.', 'I-TIME')])
[
("วันที่", "O"),
(" ", "O"),
("15", "B-DATE"),
(" ", "I-DATE"),
("ก.ย.", "I-DATE"),
(" ", "I-DATE"),
("61", "I-DATE"),
(" ", "O"),
("ทดสอบ", "O"),
("ระบบ", "O"),
("เวลา", "O"),
(" ", "O"),
("14", "B-TIME"),
(":", "I-TIME"),
("49", "I-TIME"),
(" ", "I-TIME"),
("น.", "I-TIME"),
],
)

# self.assertEqual(
# ner.get_ner("แมวทำอะไรตอนห้าโมงเช้า"),
Expand Down