|
1 | 1 | # coding: utf8 |
2 | | - |
| 2 | +import re |
3 | 3 | # variables used in the tests |
4 | 4 | ending_particles = [ |
5 | 5 | "གོ་", |
|
34 | 34 | clause_boundaries = te_particles + ["ནས་", "ན་"] |
35 | 35 | dagdra = ["པ་", "བ་", "པོ་", "བོ་"] |
36 | 36 |
|
| 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 |
37 | 61 |
|
38 | 62 | # 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 |
40 | 64 | ############################################################ |
41 | 65 | def sentence_tokenizer(tokens): |
42 | 66 | sent_indices = get_sentence_indices(tokens) |
43 | | - # get tokens for each sentence |
44 | 67 | sentences = [] |
45 | 68 | for sentence in sent_indices: |
| 69 | + cur_sentence = {} |
46 | 70 | 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) |
48 | 78 |
|
49 | 79 | return sentences |
50 | 80 |
|
|
0 commit comments