【Fix Speech Issue No.8】issue 3652 merge_yi function has a bug

pull/3786/head
mattheliu 1 year ago
parent 03022f2170
commit 6c2c1234a6

@ -237,31 +237,26 @@ class ToneSandhi():
# output seg: [['听一听', 'v']] # output seg: [['听一听', 'v']]
def _merge_yi(self, seg: List[Tuple[str, str]]) -> List[Tuple[str, str]]: def _merge_yi(self, seg: List[Tuple[str, str]]) -> List[Tuple[str, str]]:
new_seg = [] new_seg = []
# function 1 skip_next = False
for i, (word, pos) in enumerate(seg): # function 1
if i - 1 >= 0 and word == "" and i + 1 < len(seg) and seg[i - 1][ for i, (word, pos) in enumerate(seg):
0] == seg[i + 1][0] and seg[i - 1][1] == "v": if skip_next:
if i - 1 < len(new_seg): skip_next = False
new_seg[i - continue
1][0] = new_seg[i - 1][0] + "" + new_seg[i - 1][0] if i - 1 >= 0 and word == "" and i + 1 < len(seg) and seg[i - 1][0] == seg[i + 1][0] and seg[i - 1][1] == "v":
else: new_seg[-1] = (new_seg[-1][0] + "" + seg[i + 1][0], new_seg[-1][1])
new_seg.append([word, pos]) skip_next = True
new_seg.append([seg[i + 1][0], pos]) else:
else: new_seg.append((word, pos))
if i - 2 >= 0 and seg[i - 1][0] == "" and seg[i - 2][ seg = new_seg
0] == word and pos == "v": new_seg = []
continue # function 2
else: for i, (word, pos) in enumerate(seg):
new_seg.append([word, pos]) if new_seg and new_seg[-1][0] == "":
seg = new_seg new_seg[-1] = (new_seg[-1][0] + word, new_seg[-1][1])
new_seg = [] else:
# function 2 new_seg.append((word, pos))
for i, (word, pos) in enumerate(seg): return new_seg
if new_seg and new_seg[-1][0] == "":
new_seg[-1][0] = new_seg[-1][0] + word
else:
new_seg.append([word, pos])
return new_seg
# the first and the second words are all_tone_three # the first and the second words are all_tone_three
def _merge_continuous_three_tones( def _merge_continuous_three_tones(

Loading…
Cancel
Save