|
|
import os |
|
|
import tempfile |
|
|
|
|
|
import pytest |
|
|
|
|
|
import stanza |
|
|
from stanza.tests import * |
|
|
|
|
|
from stanza.utils.datasets.common 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() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
EXPECTED_TXT = "สุรยุทธ์ยันปฏิเสธลงนาม MOU กับอียูไม่กระทบสัมพันธ์1 กันยายน 2550 12:21 น.ผู้สื่อข่าวรายงานเพิ่มเติมว่า จากการลงพื้นที่พบว่า\n\n" |
|
|
EXPECTED_LABELS = "000000010010000010000100010001000100100001000000021000000010000100000100200000000001000001000000001001000100101000000101002\n\n" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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) |
|
|
|