Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/stanfordnlp/stanza.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'stanza/tests/test_tokenization_lst20.py')
-rw-r--r--stanza/tests/test_tokenization_lst20.py236
1 files changed, 236 insertions, 0 deletions
diff --git a/stanza/tests/test_tokenization_lst20.py b/stanza/tests/test_tokenization_lst20.py
new file mode 100644
index 00000000..a0728123
--- /dev/null
+++ b/stanza/tests/test_tokenization_lst20.py
@@ -0,0 +1,236 @@
+import os
+import tempfile
+
+import pytest
+
+import stanza
+from stanza.tests import *
+
+from stanza.utils.datasets.prepare_tokenizer_treebank import convert_conllu_to_txt
+from stanza.utils.datasets.tokenization.convert_th_lst20 import read_document
+from stanza.utils.datasets.tokenization.process_thai_tokenization import write_section
+
+pytestmark = [pytest.mark.travis, pytest.mark.pipeline]
+
+SMALL_LST_SAMPLE="""
+สุรยุทธ์ NN B_PER B_CLS
+ยัน VV O I_CLS
+ปฏิเสธ VV O I_CLS
+ลงนาม VV O I_CLS
+_ PU O I_CLS
+MOU NN O I_CLS
+_ PU O I_CLS
+กับ PS O I_CLS
+อียู NN B_ORG I_CLS
+ไม่ NG O I_CLS
+กระทบ VV O I_CLS
+สัมพันธ์ NN O E_CLS
+
+1 NU B_DTM B_CLS
+_ PU I_DTM I_CLS
+กันยายน NN I_DTM I_CLS
+_ PU I_DTM I_CLS
+2550 NU E_DTM I_CLS
+_ PU O I_CLS
+12:21 NU B_DTM I_CLS
+_ PU I_DTM I_CLS
+น. CL E_DTM E_CLS
+
+ผู้สื่อข่าว NN O B_CLS
+รายงาน VV O I_CLS
+เพิ่มเติม VV O I_CLS
+ว่า CC O E_CLS
+_ PU O O
+จาก PS O B_CLS
+การ FX O I_CLS
+ลง VV O I_CLS
+พื้นที่ NN O I_CLS
+พบ VV O I_CLS
+ว่า CC O E_CLS
+""".strip()
+
+EXPECTED_CONLLU="""
+1 สุรยุทธ์ _ _ _ _ 0 root 0:root SpaceAfter=No|NewPar=Yes
+2 ยัน _ _ _ _ 1 dep 1:dep SpaceAfter=No
+3 ปฏิเสธ _ _ _ _ 2 dep 2:dep SpaceAfter=No
+4 ลงนาม _ _ _ _ 3 dep 3:dep _
+5 MOU _ _ _ _ 4 dep 4:dep _
+6 กับ _ _ _ _ 5 dep 5:dep SpaceAfter=No
+7 อียู _ _ _ _ 6 dep 6:dep SpaceAfter=No
+8 ไม่ _ _ _ _ 7 dep 7:dep SpaceAfter=No
+9 กระทบ _ _ _ _ 8 dep 8:dep SpaceAfter=No
+10 สัมพันธ์ _ _ _ _ 9 dep 9:dep SpaceAfter=No
+
+1 1 _ _ _ _ 0 root 0:root _
+2 กันยายน _ _ _ _ 1 dep 1:dep _
+3 2550 _ _ _ _ 2 dep 2:dep _
+4 12:21 _ _ _ _ 3 dep 3:dep _
+5 น. _ _ _ _ 4 dep 4:dep SpaceAfter=No
+
+1 ผู้สื่อข่าว _ _ _ _ 0 root 0:root SpaceAfter=No
+2 รายงาน _ _ _ _ 1 dep 1:dep SpaceAfter=No
+3 เพิ่มเติม _ _ _ _ 2 dep 2:dep SpaceAfter=No
+4 ว่า _ _ _ _ 3 dep 3:dep _
+5 จาก _ _ _ _ 4 dep 4:dep SpaceAfter=No
+6 การ _ _ _ _ 5 dep 5:dep SpaceAfter=No
+7 ลง _ _ _ _ 6 dep 6:dep SpaceAfter=No
+8 พื้นที่ _ _ _ _ 7 dep 7:dep SpaceAfter=No
+9 พบ _ _ _ _ 8 dep 8:dep SpaceAfter=No
+10 ว่า _ _ _ _ 9 dep 9:dep SpaceAfter=No
+""".strip()
+
+# Note: these DO NOT line up perfectly (in an emacs window, at least)
+# because Thai characters have a length greater than 1.
+# The lengths of the words are:
+# สุรยุทธ์ 8
+# ยัน 3
+# ปฏิเสธ 6
+# ลงนาม 5
+# MOU 3
+# กับ 3
+# อียู 4
+# ไม่ 3
+# กระทบ 5
+# สัมพันธ์ 8
+# 1 1
+# กันยายน 7
+# 2550 4
+# 12:21 5
+# น. 2
+# ผู้สื่อข่าว 11
+# รายงาน 6
+# เพิ่มเติม 9
+# ว่า 3
+# จาก 3
+# การ 3
+# ลง 2
+# พื้นที่ 7
+# พบ 2
+# ว่า 3
+EXPECTED_TXT = "สุรยุทธ์ยันปฏิเสธลงนาม MOU กับอียูไม่กระทบสัมพันธ์1 กันยายน 2550 12:21 น.ผู้สื่อข่าวรายงานเพิ่มเติมว่า จากการลงพื้นที่พบว่า\n\n"
+EXPECTED_LABELS = "000000010010000010000100010001000100100001000000021000000010000100000100200000000001000001000000001001000100101000000101002\n\n"
+# counting spaces 1234567812312345612345_123_123123412312345123456781_1234567_1234_12345_12123456789AB123456123456789123_12312312123456712123
+
+# note that the word splits go on the final letter of the word in the
+# UD conllu datasets, so that is what we mimic here
+# for example, from EWT:
+# Al-Zaman : American forces killed Shaikh Abdullah
+# 0110000101000000001000000100000010000001000000001
+
+def check_results(documents, expected_conllu, expected_txt, expected_labels):
+ with tempfile.TemporaryDirectory() as output_dir:
+ write_section(output_dir, "lst20", "train", documents)
+ with open(os.path.join(output_dir, "th_lst20.train.gold.conllu")) as fin:
+ conllu = fin.read().strip()
+ with open(os.path.join(output_dir, "th_lst20.train.txt")) as fin:
+ txt = fin.read()
+ with open(os.path.join(output_dir, "th_lst20-ud-train.toklabels")) as fin:
+ labels = fin.read()
+ assert conllu == expected_conllu
+ assert txt == expected_txt
+ assert labels == expected_labels
+
+ assert len(txt) == len(labels)
+
+
+def test_small():
+ """
+ A small test just to verify that the output is being produced as we want
+
+ Note that there currently are no spaces after the first sentence.
+ Apparently this is wrong, but weirdly, doing that makes the model even worse.
+ """
+ lines = SMALL_LST_SAMPLE.strip().split("\n")
+ documents = read_document(lines, spaces_after=False, split_clauses=False)
+ check_results(documents, EXPECTED_CONLLU, EXPECTED_TXT, EXPECTED_LABELS)
+
+EXPECTED_SPACE_CONLLU="""
+1 สุรยุทธ์ _ _ _ _ 0 root 0:root SpaceAfter=No|NewPar=Yes
+2 ยัน _ _ _ _ 1 dep 1:dep SpaceAfter=No
+3 ปฏิเสธ _ _ _ _ 2 dep 2:dep SpaceAfter=No
+4 ลงนาม _ _ _ _ 3 dep 3:dep _
+5 MOU _ _ _ _ 4 dep 4:dep _
+6 กับ _ _ _ _ 5 dep 5:dep SpaceAfter=No
+7 อียู _ _ _ _ 6 dep 6:dep SpaceAfter=No
+8 ไม่ _ _ _ _ 7 dep 7:dep SpaceAfter=No
+9 กระทบ _ _ _ _ 8 dep 8:dep SpaceAfter=No
+10 สัมพันธ์ _ _ _ _ 9 dep 9:dep _
+
+1 1 _ _ _ _ 0 root 0:root _
+2 กันยายน _ _ _ _ 1 dep 1:dep _
+3 2550 _ _ _ _ 2 dep 2:dep _
+4 12:21 _ _ _ _ 3 dep 3:dep _
+5 น. _ _ _ _ 4 dep 4:dep _
+
+1 ผู้สื่อข่าว _ _ _ _ 0 root 0:root SpaceAfter=No
+2 รายงาน _ _ _ _ 1 dep 1:dep SpaceAfter=No
+3 เพิ่มเติม _ _ _ _ 2 dep 2:dep SpaceAfter=No
+4 ว่า _ _ _ _ 3 dep 3:dep _
+5 จาก _ _ _ _ 4 dep 4:dep SpaceAfter=No
+6 การ _ _ _ _ 5 dep 5:dep SpaceAfter=No
+7 ลง _ _ _ _ 6 dep 6:dep SpaceAfter=No
+8 พื้นที่ _ _ _ _ 7 dep 7:dep SpaceAfter=No
+9 พบ _ _ _ _ 8 dep 8:dep SpaceAfter=No
+10 ว่า _ _ _ _ 9 dep 9:dep _
+""".strip()
+
+EXPECTED_SPACE_TXT = "สุรยุทธ์ยันปฏิเสธลงนาม MOU กับอียูไม่กระทบสัมพันธ์ 1 กันยายน 2550 12:21 น. ผู้สื่อข่าวรายงานเพิ่มเติมว่า จากการลงพื้นที่พบว่า\n\n"
+EXPECTED_SPACE_LABELS = "00000001001000001000010001000100010010000100000002010000000100001000001002000000000001000001000000001001000100101000000101002\n\n"
+
+def test_space_after():
+ """
+ This version of the test adds the space after attribute
+ """
+ lines = SMALL_LST_SAMPLE.strip().split("\n")
+ documents = read_document(lines, spaces_after=True, split_clauses=False)
+ check_results(documents, EXPECTED_SPACE_CONLLU, EXPECTED_SPACE_TXT, EXPECTED_SPACE_LABELS)
+
+
+EXPECTED_CLAUSE_CONLLU="""
+1 สุรยุทธ์ _ _ _ _ 0 root 0:root SpaceAfter=No|NewPar=Yes
+2 ยัน _ _ _ _ 1 dep 1:dep SpaceAfter=No
+3 ปฏิเสธ _ _ _ _ 2 dep 2:dep SpaceAfter=No
+4 ลงนาม _ _ _ _ 3 dep 3:dep _
+5 MOU _ _ _ _ 4 dep 4:dep _
+6 กับ _ _ _ _ 5 dep 5:dep SpaceAfter=No
+7 อียู _ _ _ _ 6 dep 6:dep SpaceAfter=No
+8 ไม่ _ _ _ _ 7 dep 7:dep SpaceAfter=No
+9 กระทบ _ _ _ _ 8 dep 8:dep SpaceAfter=No
+10 สัมพันธ์ _ _ _ _ 9 dep 9:dep _
+
+1 1 _ _ _ _ 0 root 0:root _
+2 กันยายน _ _ _ _ 1 dep 1:dep _
+3 2550 _ _ _ _ 2 dep 2:dep _
+4 12:21 _ _ _ _ 3 dep 3:dep _
+5 น. _ _ _ _ 4 dep 4:dep _
+
+1 ผู้สื่อข่าว _ _ _ _ 0 root 0:root SpaceAfter=No
+2 รายงาน _ _ _ _ 1 dep 1:dep SpaceAfter=No
+3 เพิ่มเติม _ _ _ _ 2 dep 2:dep SpaceAfter=No
+4 ว่า _ _ _ _ 3 dep 3:dep _
+
+1 จาก _ _ _ _ 0 root 0:root SpaceAfter=No
+2 การ _ _ _ _ 1 dep 1:dep SpaceAfter=No
+3 ลง _ _ _ _ 2 dep 2:dep SpaceAfter=No
+4 พื้นที่ _ _ _ _ 3 dep 3:dep SpaceAfter=No
+5 พบ _ _ _ _ 4 dep 4:dep SpaceAfter=No
+6 ว่า _ _ _ _ 5 dep 5:dep _
+""".strip()
+
+EXPECTED_CLAUSE_TXT = "สุรยุทธ์ยันปฏิเสธลงนาม MOU กับอียูไม่กระทบสัมพันธ์ 1 กันยายน 2550 12:21 น. ผู้สื่อข่าวรายงานเพิ่มเติมว่า จากการลงพื้นที่พบว่า\n\n"
+EXPECTED_CLAUSE_LABELS = "00000001001000001000010001000100010010000100000002010000000100001000001002000000000001000001000000001002000100101000000101002\n\n"
+
+
+def test_split_clause():
+ """
+ This version of the test also resplits on spaces between clauses
+ """
+ lines = SMALL_LST_SAMPLE.strip().split("\n")
+ documents = read_document(lines, spaces_after=True, split_clauses=True)
+ check_results(documents, EXPECTED_CLAUSE_CONLLU, EXPECTED_CLAUSE_TXT, EXPECTED_CLAUSE_LABELS)
+
+if __name__ == "__main__":
+ lines = SMALL_LST_SAMPLE.strip().split("\n")
+ documents = read_document(lines, spaces_after=False, split_clauses=False)
+
+ write_section("foo", "lst20", "train", documents)