Skip to content

Commit

Permalink
Merge pull request #24 from Esukhia/seg-rule-pipeline
Browse files Browse the repository at this point in the history
Untokenize feature
  • Loading branch information
kaldan007 authored Apr 20, 2021
2 parents a6e325e + cefb6c0 commit 64cdca4
Show file tree
Hide file tree
Showing 24 changed files with 541 additions and 783 deletions.
30 changes: 18 additions & 12 deletions pybo/segmentation_rule/pipeline.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import re

from pathlib import Path
from re import T

from bordr import rdr as r
from botok.tokenizers.wordtokenizer import WordTokenizer
Expand All @@ -8,6 +9,7 @@
from pybo.hfr_cqlr_converter import cqlr2hfr

from pybo.segmentation_rule.make_rule import *
from pybo.untokenize import assemble, pre_processing


HOME = Path.home()
Expand Down Expand Up @@ -143,22 +145,27 @@ def get_bilou_tag_line(human_toks, botok_toks):
break
return bilou_tag_line

def get_bilou_tag_data(corpus_data, human_data):
"""Corpus data get segmented by botok.
def get_detokenized_line(tokenized_line):
tokens = pre_processing(tokenized_line)
detokenized_line = assemble(tokens)
return detokenized_line

def get_bilou_tag_data(human_data):
"""Human data get detokenized.
Detokenized text is tokenized by botok.
Bilou tag is given to botok segmented data by comparing with human segmentation
Args:
corpus_data (str): corpus data (unsegmented data)
human_data (str): segmented corpus data by human
Returns:
str: botok segmented data with bilou tag
"""
botok_data = get_botok_segmentation(corpus_data)
human_lines = human_data.splitlines()
botok_lines = botok_data.splitlines()
bilou_tag_data = ''
for human_line, botok_line in zip(human_lines, botok_lines):
for human_line in human_lines:
detokenized_line = get_detokenized_line(human_line)
botok_line = get_botok_segmentation(detokenized_line)
human_toks = get_toks(human_line)
botok_toks = get_toks(botok_line)
bilou_tag_data += get_bilou_tag_line(human_toks, botok_toks) + '\n'
Expand Down Expand Up @@ -375,21 +382,20 @@ def extract_seg_rule(corpus_file_path, dialect_pack_name=DEFAULT_DPACK, type='cq
"""
new_word_list = []
new_remove_word_list = []
corpus_file_name = corpus_file_path.stem
corpus_file_name = corpus_file_path.stem[:-2]
number_of_segmentation = 1
human_data = (corpus_file_path.parent / f'{corpus_file_name}_hd.txt').read_text(encoding='utf-8-sig')
human_data = corpus_file_path.read_text(encoding='utf-8-sig')
human_data = post_process_human_data(human_data)
corpus_data = corpus_file_path.read_text(encoding='utf-8-sig')
while True:
bilou_tag_data = get_bilou_tag_data(corpus_data, human_data)
bilou_tag_data = get_bilou_tag_data(human_data)
print(f'[INFO]: SEGMENTATION PHASE {number_of_segmentation} COMPLETED..')
new_word_list, new_remove_word_list = filter_seg_errors(bilou_tag_data, human_data)
print('[INFO]: FILTER SEGMENTATION ERROR COMPLETED..')
if new_word_list:
new_word_list = add_word_2_adjustment(new_word_list, corpus_file_name, dialect_pack_name, type='words')
if new_remove_word_list:
new_remove_word_list = add_word_2_adjustment(new_remove_word_list, corpus_file_name, dialect_pack_name, type='remove')
bilou_tag_data = get_bilou_tag_data(corpus_data, human_data)
bilou_tag_data = get_bilou_tag_data(human_data)
word_list, remove_word_list = filter_seg_errors(bilou_tag_data, human_data)
new_remove_word_list = [remove_word for remove_word in remove_word_list if remove_word not in new_remove_word_list]
new_word_list = [word for word in word_list if word not in new_word_list]
Expand Down
14 changes: 14 additions & 0 deletions pybo/untokenize.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@

def pre_processing(tokenized_text):
tokens = [token for token in tokenized_text.split(' ') if token]
return tokens

def get_token_text(token):
token_parts = [part for part in token.split('/') if part]
return token_parts[0]

def assemble(tokens):
detokenized_text = ''
for token in tokens:
detokenized_text += get_token_text(token)
return detokenized_text
4 changes: 0 additions & 4 deletions tests/corpus1/corpus1_bilou_rules.txt

This file was deleted.

File renamed without changes.
4 changes: 4 additions & 0 deletions tests/data/corpus1/corpus1_bilou_rules.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
[text="ཀྱི་<NO_POS>"] [text="དོན་<NOUN>"] [pos="U" & text="གཅིག་<NUM>"] 3 = [pos="I"]
[pos="U" & text="ལས་<TEXT>"] [text="བྱེད་པ<VERB>"] 1 = [pos="B"]
[pos="U" & text="གོ་བ་<VERB>"] [text="དང་<NO_POS>"] [text="དོན་<NOUN>"] 1 = [pos="S"]
[text="ཀྱི་<NO_POS>"] [pos="U"] [text="གཅིག་<NUM>"] 2 = [pos="B"]
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
28 changes: 28 additions & 0 deletions tests/data/drokun_test/drokun_test.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
བདག་པས་གཞན་གཅེས་འགྲོ་ཀུན་བརྩེ་བས་སྐྱོང་།
བདག་སོགས་འགྲོ་ཀུན་སྨིན་ཅིང་གྲོལ་བྱའི་ཕྱིར།
དགེ་བས་འགྲོ་ཀུན་སངས་རྒྱས་ཐོབ་ཕྱིར་བསྔོ།
བསོད་ནམས་དེས།།འགྲོ་ཀུན་བཤེས་གཉེན་བསྟེན་པར་ཤོག།
བཅས་ཏེ་གནང་ཚུལ།འགྲོ་ཀུན་དང་བ་འདྲེན་ཕྱིར་བཀོད་པ་
མི་འདུག་པས།།འགྲོ་ཀུན་བརྩེ་བས་སྐྱོངས་ཤིག་
ཆུ་དེས་འགྲོ་ཀུན་ཚིམ་པ་རྨི།
ཆུ་དེས་འགྲོ་ཀུན་ཚིམ་པ་དེ།
ལགས་སོ།།།།གསུམ་པ།འགྲོ་ཀུན་དང་བ་འདྲེན་ཕྱིར་བཀོད་པ་
བདག་པས་གཞན་གཅེས་འགྲོ་ཀུན་བརྩེ་བས་སྐྱོང་།
བདག་སོགས་འགྲོ་ཀུན་སྨིན་ཅིང་གྲོལ་བྱའི་ཕྱིར།
དགེ་བས་འགྲོ་ཀུན་སངས་རྒྱས་ཐོབ་ཕྱིར་བསྔོ།
བསོད་ནམས་དེས།།འགྲོ་ཀུན་བཤེས་གཉེན་བསྟེན་པར་ཤོག།
བཅས་ཏེ་གནང་ཚུལ།འགྲོ་ཀུན་དང་བ་འདྲེན་ཕྱིར་བཀོད་པ་
མི་འདུག་པས།།འགྲོ་ཀུན་བརྩེ་བས་སྐྱོངས་ཤིག་
ཆུ་དེས་འགྲོ་ཀུན་ཚིམ་པ་རྨི།
ཆུ་དེས་འགྲོ་ཀུན་ཚིམ་པ་དེ།
ལགས་སོ།།།།གསུམ་པ།འགྲོ་ཀུན་དང་བ་འདྲེན་ཕྱིར་བཀོད་པ་
བཅས་ཏེ་གནང་ཚུལ།འགྲོ་ཀུན་དང་བ་འདྲེན་ཕྱིར་བཀོད་པ་
བདག་པས་གཞན་གཅེས་འགྲོ་ཀུན་བརྩེ་བས་སྐྱོང་།
བདག་སོགས་འགྲོ་ཀུན་སྨིན་ཅིང་གྲོལ་བྱའི་ཕྱིར།
དགེ་བས་འགྲོ་ཀུན་སངས་རྒྱས་ཐོབ་ཕྱིར་བསྔོ།
བསོད་ནམས་དེས།།འགྲོ་ཀུན་བཤེས་གཉེན་བསྟེན་པར་ཤོག།
བཅས་ཏེ་གནང་ཚུལ།འགྲོ་ཀུན་དང་བ་འདྲེན་ཕྱིར་བཀོད་པ་
མི་འདུག་པས།།འགྲོ་ཀུན་བརྩེ་བས་སྐྱོངས་ཤིག་
ཆུ་དེས་འགྲོ་ཀུན་ཚིམ་པ་རྨི།
ཆུ་དེས་འགྲོ་ཀུན་ཚིམ་པ་དེ།
ལགས་སོ།།།།གསུམ་པ།འགྲོ་ཀུན་དང་བ་འདྲེན་ཕྱིར་བཀོད་པ་
9 changes: 9 additions & 0 deletions tests/data/drokun_test/drokun_test_bilou_rules.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
[text=""] [pos="U"] [text="།།།།<PUNCT>"] 2 = [pos="S"]
[pos="U"] [pos="U" & text="འགྲོ་<VERB>"] [pos="U"] 2 = [pos="B"]
[pos=""] [pos="U" & text="བདག་པ<VERB>"] 2 = [pos="S"]
[pos="U" & text="ཀུན་<DET>"] [pos="U"] [pos="U" & text="དེ<DET>"] 1 = [pos="U"]
[text="བདག་པ<VERB>"] [pos="U"] [text="གཞན་གཅེས་<NO_POS>"] 2 = [pos="I"]
[pos="U" & text="།།།།<PUNCT>"] [text="གསུམ་པ<NUM>"] [text="།<PUNCT>"] 1 = [pos="S"]
[pos="U" & text="ཀུན་<DET>"] [pos="U"] [pos="U"] 1 = [pos="I"]
[text="དེ<DET>"] [] [pos="U" & text="།།<PUNCT>"] 3 = [pos="S"]
[text="གནང་ཚུལ<NO_POS>"] [pos="U"] [pos="U" & text="འགྲོ་<VERB>"] [pos="U"] 3 = [pos="U"]
28 changes: 28 additions & 0 deletions tests/data/drokun_test/drokun_test_hd.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
བདག་ པས་ གཞན་གཅེས་ འགྲོ་ཀུན་ བརྩེ་བ ས་ སྐྱོང་ །
བདག་ སོགས་ འགྲོ་ཀུན་ སྨིན་ ཅིང་ གྲོལ་བྱ འི་ ཕྱིར །
དགེ་བ ས་ འགྲོ་ཀུན་ སངས་རྒྱས་ ཐོབ་ ཕྱིར་ བསྔོ །
བསོད་ནམས་ དེ ས ། ། འགྲོ་ཀུན་ བཤེས་གཉེན་ བསྟེན་པ ར་ ཤོག །
བཅས་ ཏེ་ གནང་ཚུལ ། འགྲོ་ ཀུན་ དང་བ་ འདྲེན་ ཕྱིར་ བཀོད་པ་
མི་ འདུག་པ ས ། ། འགྲོ་ ཀུན་ བརྩེ་བ ས་ སྐྱོངས་ ཤིག་
ཆུ་ དེ ས་ འགྲོ་ཀུན་ ཚིམ་པ་ རྨི །
ཆུ་ དེ ས་ འགྲོ་ ཀུན་ ཚིམ་པ་ དེ །
ལགས་ སོ །། །། གསུམ་པ ། འགྲོ་ཀུན་ དང་བ་ འདྲེན་ ཕྱིར་ བཀོད་པ་
བདག་ པས་ གཞན་གཅེས་ འགྲོ་ཀུན་ བརྩེ་བ ས་ སྐྱོང་ །
བདག་ སོགས་ འགྲོ་ཀུན་ སྨིན་ ཅིང་ གྲོལ་བྱ འི་ ཕྱིར །
དགེ་བ ས་ འགྲོ་ཀུན་ སངས་རྒྱས་ ཐོབ་ ཕྱིར་ བསྔོ །
བསོད་ནམས་ དེ ས ། ། འགྲོ་ཀུན་ བཤེས་གཉེན་ བསྟེན་པ ར་ ཤོག །
བཅས་ ཏེ་ གནང་ཚུལ ། འགྲོ་ ཀུན་ དང་བ་ འདྲེན་ ཕྱིར་ བཀོད་པ་
མི་ འདུག་པ ས ། ། འགྲོ་ ཀུན་ བརྩེ་བ ས་ སྐྱོངས་ ཤིག་
ཆུ་ དེ ས་ འགྲོ་ཀུན་ ཚིམ་པ་ རྨི །
ཆུ་ དེ ས་ འགྲོ་ ཀུན་ ཚིམ་པ་ དེ །
ལགས་ སོ །། །། གསུམ་པ ། འགྲོ་ཀུན་ དང་བ་ འདྲེན་ ཕྱིར་ བཀོད་པ་
བཅས་ ཏེ་ གནང་ཚུལ ། འགྲོ་ ཀུན་ དང་བ་ འདྲེན་ ཕྱིར་ བཀོད་པ་
བདག་ པས་ གཞན་གཅེས་ འགྲོ་ཀུན་ བརྩེ་བ ས་ སྐྱོང་ །
བདག་ སོགས་ འགྲོ་ཀུན་ སྨིན་ ཅིང་ གྲོལ་བྱ འི་ ཕྱིར །
དགེ་བ ས་ འགྲོ་ཀུན་ སངས་རྒྱས་ ཐོབ་ ཕྱིར་ བསྔོ །
བསོད་ནམས་ དེ ས ། ། འགྲོ་ཀུན་ བཤེས་གཉེན་ བསྟེན་པ ར་ ཤོག །
བཅས་ ཏེ་ གནང་ཚུལ ། འགྲོ་ ཀུན་ དང་བ་ འདྲེན་ ཕྱིར་ བཀོད་པ་
མི་ འདུག་པ ས ། ། འགྲོ་ ཀུན་ བརྩེ་བ ས་ སྐྱོངས་ ཤིག་
ཆུ་ དེ ས་ འགྲོ་ཀུན་ ཚིམ་པ་ རྨི །
ཆུ་ དེ ས་ འགྲོ་ ཀུན་ ཚིམ་པ་ དེ །
ལགས་ སོ །། །། གསུམ་པ ། འགྲོ་ཀུན་ དང་བ་ འདྲེན་ ཕྱིར་ བཀོད་པ་
4 changes: 4 additions & 0 deletions tests/data/drokun_test/drokun_test_rules.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
[text="གཞན་གཅེས་"] [text="འགྲོ་" & pos="VERB"] [text="ཀུན་" & pos="DET"] 2 + []
[text="།" & pos="PUNCT"] [text="འགྲོ་" & pos="VERB"] [text="ཀུན་" & pos="DET"] 2 + []
[text="ས་" & pos="PART"] [text="འགྲོ་" & pos="VERB"] [text="ཀུན་" & pos="DET"] 2 + []
[text="སོགས་" & pos="DET"] [text="འགྲོ་" & pos="VERB"] [text="ཀུན་" & pos="DET"] 2 + []
28 changes: 28 additions & 0 deletions tests/data/drokun_test/drokun_test_tr_data.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
བདག་པ<VERB>/S ས་<PART>/I གཞན་གཅེས་<NO_POS>/U འགྲོ་<VERB>/B ཀུན་<DET>/I བརྩེ་བ<VERB>/U ས་<PART>/U སྐྱོང་<VERB>/U །<PUNCT>/U
བདག་<PRON>/U སོགས་<DET>/U འགྲོ་<VERB>/B ཀུན་<DET>/I སྨིན་<VERB>/U ཅིང་<NON_WORD>/U གྲོལ་བྱ<NO_POS>/U འི་<PART>/U ཕྱིར<OTHER>/U །<PUNCT>/U
དགེ་བ<VERB>/U ས་<PART>/U འགྲོ་<VERB>/B ཀུན་<DET>/I སངས་རྒྱས་<NOUN>/U ཐོབ་<VERB>/U ཕྱིར་<OTHER>/U བསྔོ<VERB>/U །<PUNCT>/U
བསོད་ནམས་<NOUN>/U དེ<DET>/U ས<PART>/U །།<PUNCT>/S འགྲོ་<VERB>/B ཀུན་<DET>/I བཤེས་གཉེན་<NOUN>/U བསྟེན་པ<VERB>/U ར་<PART>/U ཤོག<VERB>/U །<PUNCT>/U
བཅས་<VERB>/U ཏེ་<NO_POS>/U གནང་ཚུལ<NO_POS>/U །<PUNCT>/U འགྲོ་<VERB>/U ཀུན་<DET>/U དང་བ་<NOUN>/U འདྲེན་<NO_POS>/U ཕྱིར་<OTHER>/U བཀོད་པ་<VERB>/U
མི་<PART>/U འདུག་པ<VERB>/U ས<PART>/U །།<PUNCT>/U འགྲོ་<VERB>/U ཀུན་<DET>/U བརྩེ་བ<VERB>/U ས་<PART>/U སྐྱོངས་<VERB>/U ཤིག་<NO_POS>/U
ཆུ་<NOUN>/U དེ<DET>/U ས་<PART>/U འགྲོ་<VERB>/B ཀུན་<DET>/I ཚིམ་པ་<VERB>/U རྨི<NO_POS>/U །<PUNCT>/U
ཆུ་<NOUN>/U དེ<DET>/U ས་<PART>/U འགྲོ་<VERB>/U ཀུན་<DET>/U ཚིམ་པ་<VERB>/U དེ<DET>/U །<PUNCT>/U
ལགས་སོ<NO_POS>/S །།།།<PUNCT>/S གསུམ་པ<NUM>/U །<PUNCT>/U འགྲོ་<VERB>/B ཀུན་<DET>/I དང་བ་<NOUN>/U འདྲེན་<NO_POS>/U ཕྱིར་<OTHER>/U བཀོད་པ་<VERB>/U
བདག་པ<VERB>/S ས་<PART>/I གཞན་གཅེས་<NO_POS>/U འགྲོ་<VERB>/B ཀུན་<DET>/I བརྩེ་བ<VERB>/U ས་<PART>/U སྐྱོང་<VERB>/U །<PUNCT>/U
བདག་<PRON>/U སོགས་<DET>/U འགྲོ་<VERB>/B ཀུན་<DET>/I སྨིན་<VERB>/U ཅིང་<NON_WORD>/U གྲོལ་བྱ<NO_POS>/U འི་<PART>/U ཕྱིར<OTHER>/U །<PUNCT>/U
དགེ་བ<VERB>/U ས་<PART>/U འགྲོ་<VERB>/B ཀུན་<DET>/I སངས་རྒྱས་<NOUN>/U ཐོབ་<VERB>/U ཕྱིར་<OTHER>/U བསྔོ<VERB>/U །<PUNCT>/U
བསོད་ནམས་<NOUN>/U དེ<DET>/U ས<PART>/U །།<PUNCT>/S འགྲོ་<VERB>/B ཀུན་<DET>/I བཤེས་གཉེན་<NOUN>/U བསྟེན་པ<VERB>/U ར་<PART>/U ཤོག<VERB>/U །<PUNCT>/U
བཅས་<VERB>/U ཏེ་<NO_POS>/U གནང་ཚུལ<NO_POS>/U །<PUNCT>/U འགྲོ་<VERB>/U ཀུན་<DET>/U དང་བ་<NOUN>/U འདྲེན་<NO_POS>/U ཕྱིར་<OTHER>/U བཀོད་པ་<VERB>/U
མི་<PART>/U འདུག་པ<VERB>/U ས<PART>/U །།<PUNCT>/U འགྲོ་<VERB>/U ཀུན་<DET>/U བརྩེ་བ<VERB>/U ས་<PART>/U སྐྱོངས་<VERB>/U ཤིག་<NO_POS>/U
ཆུ་<NOUN>/U དེ<DET>/U ས་<PART>/U འགྲོ་<VERB>/B ཀུན་<DET>/I ཚིམ་པ་<VERB>/U རྨི<NO_POS>/U །<PUNCT>/U
ཆུ་<NOUN>/U དེ<DET>/U ས་<PART>/U འགྲོ་<VERB>/U ཀུན་<DET>/U ཚིམ་པ་<VERB>/U དེ<DET>/U །<PUNCT>/U
ལགས་སོ<NO_POS>/S །།།།<PUNCT>/S གསུམ་པ<NUM>/U །<PUNCT>/U འགྲོ་<VERB>/B ཀུན་<DET>/I དང་བ་<NOUN>/U འདྲེན་<NO_POS>/U ཕྱིར་<OTHER>/U བཀོད་པ་<VERB>/U
བཅས་<VERB>/U ཏེ་<NO_POS>/U གནང་ཚུལ<NO_POS>/U །<PUNCT>/U འགྲོ་<VERB>/U ཀུན་<DET>/U དང་བ་<NOUN>/U འདྲེན་<NO_POS>/U ཕྱིར་<OTHER>/U བཀོད་པ་<VERB>/U
བདག་པ<VERB>/S ས་<PART>/I གཞན་གཅེས་<NO_POS>/U འགྲོ་<VERB>/B ཀུན་<DET>/I བརྩེ་བ<VERB>/U ས་<PART>/U སྐྱོང་<VERB>/U །<PUNCT>/U
བདག་<PRON>/U སོགས་<DET>/U འགྲོ་<VERB>/B ཀུན་<DET>/I སྨིན་<VERB>/U ཅིང་<NON_WORD>/U གྲོལ་བྱ<NO_POS>/U འི་<PART>/U ཕྱིར<OTHER>/U །<PUNCT>/U
དགེ་བ<VERB>/U ས་<PART>/U འགྲོ་<VERB>/B ཀུན་<DET>/I སངས་རྒྱས་<NOUN>/U ཐོབ་<VERB>/U ཕྱིར་<OTHER>/U བསྔོ<VERB>/U །<PUNCT>/U
བསོད་ནམས་<NOUN>/U དེ<DET>/U ས<PART>/U །།<PUNCT>/S འགྲོ་<VERB>/B ཀུན་<DET>/I བཤེས་གཉེན་<NOUN>/U བསྟེན་པ<VERB>/U ར་<PART>/U ཤོག<VERB>/U །<PUNCT>/U
བཅས་<VERB>/U ཏེ་<NO_POS>/U གནང་ཚུལ<NO_POS>/U །<PUNCT>/U འགྲོ་<VERB>/U ཀུན་<DET>/U དང་བ་<NOUN>/U འདྲེན་<NO_POS>/U ཕྱིར་<OTHER>/U བཀོད་པ་<VERB>/U
མི་<PART>/U འདུག་པ<VERB>/U ས<PART>/U །།<PUNCT>/U འགྲོ་<VERB>/U ཀུན་<DET>/U བརྩེ་བ<VERB>/U ས་<PART>/U སྐྱོངས་<VERB>/U ཤིག་<NO_POS>/U
ཆུ་<NOUN>/U དེ<DET>/U ས་<PART>/U འགྲོ་<VERB>/B ཀུན་<DET>/I ཚིམ་པ་<VERB>/U རྨི<NO_POS>/U །<PUNCT>/U
ཆུ་<NOUN>/U དེ<DET>/U ས་<PART>/U འགྲོ་<VERB>/U ཀུན་<DET>/U ཚིམ་པ་<VERB>/U དེ<DET>/U །<PUNCT>/U
ལགས་སོ<NO_POS>/S །།།།<PUNCT>/S གསུམ་པ<NUM>/U །<PUNCT>/U འགྲོ་<VERB>/B ཀུན་<DET>/I དང་བ་<NOUN>/U འདྲེན་<NO_POS>/U ཕྱིར་<OTHER>/U བཀོད་པ་<VERB>/U
File renamed without changes.
Loading

0 comments on commit 64cdca4

Please sign in to comment.