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
20 changes: 17 additions & 3 deletions pythainlp/tag/named_entity.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,12 +73,22 @@ def _doc2features(doc, i) -> Dict:


class ThaiNameTagger:
def __init__(self) -> None:
def __init__(self, version: str = "1.5") -> None:
"""
Thai named-entity recognizer.

:param str version: Thai NER version.
It's support Thai NER 1.4 & 1.5.
The defualt value is `1.5`
"""
self.crf = CRFTagger()
self.crf.open(get_corpus_path(_CORPUS_NAME, version="1.5"))

if version == "1.4":
self.crf.open(get_corpus_path("thainer-1.4", version="1.4"))
self.pos_tag_name = "orchid_ud"
else:
self.crf.open(get_corpus_path(_CORPUS_NAME, version="1.5"))
self.pos_tag_name = "lst20"

def get_ner(
self, text: str, pos: bool = True, tag: bool = False
Expand Down Expand Up @@ -135,7 +145,11 @@ def get_ner(
'วันที่ <DATE>15 ก.ย. 61</DATE> ทดสอบระบบเวลา <TIME>14:49 น.</TIME>'
"""
tokens = word_tokenize(text, engine=_TOKENIZER_ENGINE)
pos_tags = pos_tag(tokens, engine="perceptron", corpus="lst20")
pos_tags = pos_tag(
tokens,
engine="perceptron",
corpus=self.pos_tag_name
)
x_test = ThaiNameTagger.__extract_features(pos_tags)
y = self.crf.tag(x_test)

Expand Down
31 changes: 30 additions & 1 deletion tests/test_tag.py
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,35 @@ def test_ner(self):
"ทดสอบระบบเวลา <TIME>14:49 น.</TIME>",
)

ner = ThaiNameTagger(version="1.4")
self.assertEqual(ner.get_ner(""), [])
self.assertIsNotNone(ner.get_ner("แมวทำอะไรตอนห้าโมงเช้า"))
self.assertIsNotNone(ner.get_ner("แมวทำอะไรตอนห้าโมงเช้า", pos=False))
self.assertIsNotNone(
ner.get_ner(
"""คณะวิทยาศาสตร์ประยุกต์และวิศวกรรมศาสตร์ มหาวิทยาลัยขอนแก่น
วิทยาเขตหนองคาย 112 หมู่ 7 บ้านหนองเดิ่น
ตำบลหนองกอมเกาะ อำเภอเมือง
จังหวัดหนองคาย 43000"""
)
)
self.assertIsNotNone(
ner.get_ner(
"""คณะวิทยาศาสตร์ประยุกต์และวิศวกรรมศาสตร์ มหาวิทยาลัยขอนแก่น
วิทยาเขตหนองคาย 112 หมู่ 7 บ้านหนองเดิ่น
ตำบลหนองกอมเกาะ อำเภอเมือง
จังหวัดหนองคาย 43000""",
tag=True,
)
)

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

self.assertEqual(
ner.get_ner(
"url = https://thainlp.org/pythainlp/docs/2.0/", tag=True
Expand Down Expand Up @@ -260,7 +289,7 @@ def test_ner(self):
# arguement `tag` is False and `pos` is True
self.assertEqual(
ner.get_ner("ไทย", pos=True, tag=False),
[("ไทย", "NN", "B-LOCATION")],
[('ไทย', 'PROPN', 'B-LOCATION')],
)

# arguement `tag` is False and `pos` is False
Expand Down