From b2e990b3078fd4c019a5efc21404a7ae3ffa48ed Mon Sep 17 00:00:00 2001 From: Wannaphong Phatthiyaphaibun Date: Fri, 26 Feb 2021 12:09:31 +0700 Subject: [PATCH 1/3] Add ThaiNameTagger version --- pythainlp/tag/named_entity.py | 16 +++++++++++++--- tests/test_tag.py | 29 ++++++++++++++++++++++++++++- 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/pythainlp/tag/named_entity.py b/pythainlp/tag/named_entity.py index 216ebe6a8..daa921b61 100644 --- a/pythainlp/tag/named_entity.py +++ b/pythainlp/tag/named_entity.py @@ -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 @@ -135,7 +145,7 @@ def get_ner( 'วันที่ 15 ก.ย. 61 ทดสอบระบบเวลา ' """ 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) diff --git a/tests/test_tag.py b/tests/test_tag.py index f4ffef759..48a3b45a3 100644 --- a/tests/test_tag.py +++ b/tests/test_tag.py @@ -206,6 +206,33 @@ def test_ner(self): "ทดสอบระบบเวลา ", ) + 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), + "วันที่ 15 ก.ย. 61 " + "ทดสอบระบบเวลา ", + ) + self.assertEqual( ner.get_ner( "url = https://thainlp.org/pythainlp/docs/2.0/", tag=True @@ -260,7 +287,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")], + [('ไทย', 'NN', 'B-LOCATION')], ) # arguement `tag` is False and `pos` is False From f45bb41ff38bbbafd8b35c78819739e5a379db66 Mon Sep 17 00:00:00 2001 From: Wannaphong Phatthiyaphaibun Date: Fri, 26 Feb 2021 12:13:42 +0700 Subject: [PATCH 2/3] Fixed PEP8 --- pythainlp/tag/named_entity.py | 12 ++++++++---- tests/test_tag.py | 6 ++++-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/pythainlp/tag/named_entity.py b/pythainlp/tag/named_entity.py index daa921b61..ab320a5cf 100644 --- a/pythainlp/tag/named_entity.py +++ b/pythainlp/tag/named_entity.py @@ -77,9 +77,9 @@ 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` + :param str version: Thai NER version. + It's support Thai NER 1.4 & 1.5. + The defualt value is `1.5` """ self.crf = CRFTagger() @@ -145,7 +145,11 @@ def get_ner( 'วันที่ 15 ก.ย. 61 ทดสอบระบบเวลา ' """ tokens = word_tokenize(text, engine=_TOKENIZER_ENGINE) - pos_tags = pos_tag(tokens, engine="perceptron", corpus=self.pos_tag_name) + 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) diff --git a/tests/test_tag.py b/tests/test_tag.py index 48a3b45a3..791ef9f1a 100644 --- a/tests/test_tag.py +++ b/tests/test_tag.py @@ -213,14 +213,16 @@ def test_ner(self): self.assertIsNotNone( ner.get_ner( """คณะวิทยาศาสตร์ประยุกต์และวิศวกรรมศาสตร์ มหาวิทยาลัยขอนแก่น - วิทยาเขตหนองคาย 112 หมู่ 7 บ้านหนองเดิ่น ตำบลหนองกอมเกาะ อำเภอเมือง + วิทยาเขตหนองคาย 112 หมู่ 7 บ้านหนองเดิ่น + ตำบลหนองกอมเกาะ อำเภอเมือง จังหวัดหนองคาย 43000""" ) ) self.assertIsNotNone( ner.get_ner( """คณะวิทยาศาสตร์ประยุกต์และวิศวกรรมศาสตร์ มหาวิทยาลัยขอนแก่น - วิทยาเขตหนองคาย 112 หมู่ 7 บ้านหนองเดิ่น ตำบลหนองกอมเกาะ อำเภอเมือง + วิทยาเขตหนองคาย 112 หมู่ 7 บ้านหนองเดิ่น + ตำบลหนองกอมเกาะ อำเภอเมือง จังหวัดหนองคาย 43000""", tag=True, ) From 422b8ffe52863dcc02612d1e48cb89ffea7e29b2 Mon Sep 17 00:00:00 2001 From: Wannaphong Phatthiyaphaibun Date: Fri, 26 Feb 2021 12:22:23 +0700 Subject: [PATCH 3/3] Update test_tag.py --- tests/test_tag.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_tag.py b/tests/test_tag.py index 791ef9f1a..b70b1dc7b 100644 --- a/tests/test_tag.py +++ b/tests/test_tag.py @@ -289,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