Skip to content

Commit 7cf455d

Browse files
author
kaldan007
committed
fix(sent-tokenizer): normalised sentence is included in sentence tokens
1 parent 21bad86 commit 7cf455d

2 files changed

Lines changed: 61 additions & 5 deletions

File tree

botok/tokenizers/sentencetokenizer.py

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# coding: utf8
2-
2+
import re
33
# variables used in the tests
44
ending_particles = [
55
"གོ་",
@@ -34,17 +34,47 @@
3434
clause_boundaries = te_particles + ["ནས་", "ན་"]
3535
dagdra = ["པ་", "བ་", "པོ་", "བོ་"]
3636

37+
normalization_patterns = [(' <utt>', ''),
38+
('༑', '།'),
39+
('\s\s+', ' '),
40+
('ln\d ', ''),
41+
('([^༅།་ ]) །', '\g<1>་ །'),
42+
('༅ །', '༅།'),
43+
('([^་།\d] )', '\g<1>-'),
44+
('([\s\n་།][གདབམའ][ཀཁགངཅཆཇཉཊཋཌཎཏཐདནཔཕབམཙཚཛཝཞཟའཡརལཤཥསཧཨཪ]) ', '\g<1>འ་ '),
45+
('([^་།])\s-', '\g<1>་ -'),
46+
('ཁྱད་པ་ -ར་', 'ཁྱད་པར་'),
47+
('སངས་ རྒྱ་ -ས་', 'སངས་རྒྱས་'),
48+
('བྱང་ཆུབ་སེམས་ དཔའ་', 'བྱང་ཆུབ་སེམས་དཔའ་'),
49+
('ལ་ -ས་', 'ལས་'),
50+
('༌་', '་')]
51+
52+
def get_normalized_sentence(tokens):
53+
sentence = ''
54+
for token in tokens:
55+
sentence += f'{token.text} '
56+
sentence = sentence.strip()
57+
normalized_sentence = sentence
58+
for pattern in normalization_patterns:
59+
normalized_sentence = re.sub(pattern[0], pattern[1], normalized_sentence)
60+
return normalized_sentence
3761

3862
# Turn sentences as indices into sentences as follows:
39-
# (<sent_length>, [token1, token2, ..., tokenn]) where tokens are Token objects
63+
# { 'length':<sent_length>, 'tokens':[token1, token2, ..., tokenn], 'norm_sent':<normalized sentence>} where tokens are Token objects
4064
############################################################
4165
def sentence_tokenizer(tokens):
4266
sent_indices = get_sentence_indices(tokens)
43-
# get tokens for each sentence
4467
sentences = []
4568
for sentence in sent_indices:
69+
cur_sentence = {}
4670
start, end, l = sentence["start"], sentence["end"], sentence["len"]
47-
sentences.append((l, tokens[start : end + 1]))
71+
norm_sentence = get_normalized_sentence(tokens[start : end + 1])
72+
cur_sentence = {
73+
'length': l,
74+
'tokens': tokens[start : end + 1],
75+
'norm_sent': norm_sentence
76+
}
77+
sentences.append(cur_sentence)
4878

4979
return sentences
5080

tests/tokenizers/test_sent_par_tokenizer.py

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ def tokens(wt):
2626
def test_sent_tokenizer(tokens):
2727
sents = sentence_tokenizer(tokens)
2828

29-
out = ["".join([word.text for word in s[1]]) for s in sents]
29+
out = ["".join([word.text for word in s['tokens']]) for s in sents]
3030
expected = [
3131
"བཀུར་བར་མི་འགྱུར་ཞིང༌། །བརྙས་བཅོས་མི་སྙན་རྗོད་པར་བྱེད། །",
3232
"དབང་དང་འབྱོར་པ་ལྡན་པ་ཡི། །རྒྱལ་རིགས་ཕལ་ཆེར་བག་མེད་པས། །མྱོས་པའི་གླང་ཆེན་བཞིན་དུ་འཁྱམས། །དེ་ཡི་འཁོར་ཀྱང་དེ་འདྲར་འགྱུར། །",
@@ -49,6 +49,32 @@ def test_sent_tokenizer(tokens):
4949
]
5050
assert out == expected
5151

52+
def test_normalized_sentence(tokens):
53+
sents = sentence_tokenizer(tokens)
54+
55+
norm_sentences = [sentence['norm_sent'] for sentence in sents]
56+
expected = [
57+
"བཀུར་བ་ -ར་ མི་ འགྱུར་ ཞིང་ ། ། བརྙས་བཅོས་ མི་ སྙན་ རྗོད་པ་ -ར་ བྱེད་ ། །",
58+
"དབང་ དང་ འབྱོར་པ་ ལྡན་པ་ ཡི་ ། ། རྒྱལ་རིགས་ ཕལ་ཆེར་ བག་མེད་པ་ -ས་ ། ། མྱོས་པ་ -འི་ གླང་ཆེན་ བཞིན་ དུ་ འཁྱམས་ ། ། དེ་ ཡི་ འཁོར་ ཀྱང་ དེ་ འདྲ་ -ར་ འགྱུར་ ། །",
59+
"གཞན་ ཡང་ རྒྱལ་པོ་ རྒྱལ་རིགས་ ཀྱི་ ། ། སྤྱོད་པ་ བཟང་ངན་ ཅི་འདྲ་བ་ ། ། དེ་ འདྲ་ -འི་ ཚུལ་ ལ་ བལྟས་ ནས་ སུ་ ། ། འབངས་ རྣམས་ དེ་ དང་ དེ་ འདྲ་ སྟེ་ ། །",
60+
"རྒྱལ་པོ་ ནོར་ ལ་ བརྐམས་ གྱུར་ ན་ ། །",
61+
"ནོར་ གྱིས་ རྒྱལ་ཁྲིམས་ བསླུ་བ་ -ར་ རྩོམ་ ། །",
62+
"མི་བདག་ གཡེམ་ ལ་ དགའ་ གྱུར་ ན་ ། །",
63+
"འཕྱོན་མ་ -འི་ ཚོགས་ རྣམས་ མགོ་འཕང་ མཐོ་ ། །",
64+
"ཕྲ་མ་ -ར་ ཉན་ ན་ དབྱེན་ གྱིས་ གཏོར་ ། །",
65+
"བརྟག་དཔྱད་ མི་ ཤེས་ རྫུན་ གྱིས་ སླུ་ ། ། ང་ ལོ་ ཡང་ན་ ཀུན་ གྱིས་ བསྐྱོད་ ། །",
66+
"ངོ་དགའ་ -ར་ བརྩི་ ན་ ཟོལ་ཚིག་ སྨྲ་ ། །",
67+
"དེ་ དང་ དེ་ ལ་སོགས་པ་ ཡི་ ། ། མི་བདག་ དེ་ ལ་ གང་ གང་ གིས་ ། ། བསླུ་བ་ -ར་ རུང་བ་ -འི་ སྐབས་ མཐོང་ ན་ ། །",
68+
"གཡོན་ཅན་ ཚོགས་ ཀྱིས་ ཐབས་ དེ་ སེམས་ ། ། མི་ རྣམས་ རང་འདོད་ སྣ་ཚོགས་ ལ་ ། ། རྒྱལ་པོ་ ཀུན་ གྱི་ ཐུན་མོང་ ཕྱིར་ ། ། རྒྱལ་པོ་ -ས་ བསམ་ གཞིགས་ མ་ བྱས་ ན་ ། །",
69+
"ཐ་མ་ -ར་ རྒྱལ་སྲིད་ འཇིག་པ་ -ར་ འགྱུར་ ། །",
70+
"ཆེན་པོ་ -འི་ གོ་ས་ -ར་ གནས་པ་ ལ་ ། ། སྐྱོན་ ཀྱང་ ཡོན་ཏན་ ཡིན་ཚུལ་ དུ་ ། ། འཁོར་ ངན་ རྣམས་ ཀྱིས་ ངོ་བསྟོད་ སྨྲ་ ། །",
71+
"དེ་ཕྱིར་ སྐྱོན་ཡོན་ ཤེས་པ་ དཀའ་ ། །",
72+
"ལྷག་པར་ རྩོད་ ལྡན་ སྙིགས་མ་ -འི་ ཚེ་ ། ། འཁོར་ གྱི་ ནང་ ན་མ་ རབས་ མང་ ། །",
73+
"སྐྱོན་ ཡང་ ཡོན་ཏན་ ལྟར་ མཐོང་ ལ་ ། ། རང་འདོད་ ཆེ་ ཞིང་ རྒྱལ་པོ་ བསླུ་ ། ། ཆུས་ དང་ འཁོར་ གྱི་ བདེ་ ཐབས་ ལ་ ། ། བསམ་ གཞིགས་ བྱེད་པ་ དཀོན་པ་ -འི་ ཕྱིར་ ། ། རྒྱལ་པོ་ -ས་ ལེགས་པ་ -ར་ དཔྱད་ ནས་",
74+
"སུ་ ། ། བདེན་པ་ -འི་ ངག་ ལས་",
75+
]
76+
assert norm_sentences == expected
77+
5278

5379
def test_par_tokenizer(tokens):
5480
pars = paragraph_tokenizer(tokens)

0 commit comments

Comments
 (0)