|
|
@ -650,32 +650,29 @@ 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 = []
|
|
|
|
|
|
|
|
i = 0
|
|
|
|
# function 1
|
|
|
|
# function 1
|
|
|
|
for i, (word, pos) in enumerate(seg):
|
|
|
|
while i < len(seg):
|
|
|
|
|
|
|
|
word, pos = seg[i]
|
|
|
|
|
|
|
|
merged = False
|
|
|
|
if (
|
|
|
|
if (
|
|
|
|
i - 1 >= 0
|
|
|
|
i - 1 >= 0
|
|
|
|
and word == "一"
|
|
|
|
and word == "一"
|
|
|
|
and i + 1 < len(seg)
|
|
|
|
and i + 1 < len(seg)
|
|
|
|
and seg[i - 1][0] == seg[i + 1][0]
|
|
|
|
|
|
|
|
and seg[i - 1][1] == "v"
|
|
|
|
|
|
|
|
and seg[i + 1][1] == "v"
|
|
|
|
|
|
|
|
):
|
|
|
|
):
|
|
|
|
new_seg[i - 1][0] = new_seg[i - 1][0] + "一" + new_seg[i - 1][0]
|
|
|
|
last = new_seg[-1] if new_seg else seg[i - 1]
|
|
|
|
else:
|
|
|
|
if last[0] == seg[i + 1][0] and last[1] == "v" and seg[i + 1][1] == "v":
|
|
|
|
if (
|
|
|
|
combined = last[0] + "一" + seg[i + 1][0]
|
|
|
|
i - 2 >= 0
|
|
|
|
new_seg[-1] = [combined, last[1]]
|
|
|
|
and seg[i - 1][0] == "一"
|
|
|
|
i += 2
|
|
|
|
and seg[i - 2][0] == word
|
|
|
|
merged = True
|
|
|
|
and pos == "v"
|
|
|
|
if not merged:
|
|
|
|
and seg[i - 2][1] == "v"
|
|
|
|
new_seg.append([word, pos])
|
|
|
|
):
|
|
|
|
i += 1
|
|
|
|
continue
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
|
|
|
new_seg.append([word, pos])
|
|
|
|
|
|
|
|
seg = new_seg
|
|
|
|
seg = new_seg
|
|
|
|
new_seg = []
|
|
|
|
new_seg = []
|
|
|
|
# function 2
|
|
|
|
# function 2
|
|
|
|
for i, (word, pos) in enumerate(seg):
|
|
|
|
for word, pos in seg:
|
|
|
|
if new_seg and new_seg[-1][0] == "一":
|
|
|
|
if new_seg and new_seg[-1][0] == "一":
|
|
|
|
new_seg[-1][0] = new_seg[-1][0] + word
|
|
|
|
new_seg[-1][0] = new_seg[-1][0] + word
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|