Add tags via re
This commit is contained in:
@@ -8,6 +8,7 @@ import subprocess
|
||||
import numpy as np
|
||||
from scipy.io.wavfile import read
|
||||
import torch
|
||||
import regex as re
|
||||
|
||||
MATPLOTLIB_FLAG = False
|
||||
|
||||
@@ -15,6 +16,137 @@ logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
|
||||
logger = logging
|
||||
|
||||
|
||||
|
||||
zh_pattern = re.compile(r'[\u4e00-\u9fa5]')
|
||||
en_pattern = re.compile(r'[a-zA-Z]')
|
||||
jp_pattern = re.compile(r'[\u3040-\u30ff\u31f0-\u31ff]')
|
||||
kr_pattern = re.compile(r'[\uac00-\ud7af\u1100-\u11ff\u3130-\u318f\ua960-\ua97f]')
|
||||
num_pattern=re.compile(r'[0-9]')
|
||||
comma=r"(?<=[.。!!??;;,,、::'\"‘“”’()()《》「」~——])" #向前匹配但固定长度
|
||||
tags={'ZH':'[ZH]','EN':'[EN]','JP':'[JA]','KR':'[KR]'}
|
||||
|
||||
def restart_program():
|
||||
python = sys.executable
|
||||
os.execl(python, python, * sys.argv)
|
||||
|
||||
def tag_cjke(text):
|
||||
'''为中英日韩加tag,中日正则分不开,故先分句分离中日再识别,以应对大部分情况'''
|
||||
sentences = re.split(r"([.。!!??;;,,、::'\"‘“”’()()【】《》「」~——]+ *(?![0-9]))", text) #分句排除小数点
|
||||
sentences.append("")
|
||||
sentences = ["".join(i) for i in zip(sentences[0::2],sentences[1::2])]
|
||||
# print(sentences)
|
||||
prev_lang=None
|
||||
tagged_text = ""
|
||||
for s in sentences:
|
||||
nu = re.sub(r'[\s\p{P}]+', '', s, flags=re.U).strip()
|
||||
if len(nu)==0:
|
||||
continue
|
||||
s = re.sub(r'[()()《》「」【】‘“”’]+', '', s)
|
||||
jp=re.findall(jp_pattern, s)
|
||||
if len(jp)>0:
|
||||
prev_lang,tagged_jke=tag_jke(s,prev_lang)
|
||||
tagged_text +=tagged_jke
|
||||
else:
|
||||
prev_lang,tagged_cke=tag_cke(s,prev_lang)
|
||||
tagged_text +=tagged_cke
|
||||
return tagged_text
|
||||
|
||||
def tag_jke(text,prev_sentence=None):
|
||||
'''为英日韩加tag'''
|
||||
# 初始化标记变量
|
||||
tagged_text = ""
|
||||
prev_lang = None
|
||||
tagged=0
|
||||
# 遍历文本
|
||||
for char in text:
|
||||
# 判断当前字符属于哪种语言
|
||||
if jp_pattern.match(char):
|
||||
lang = "JP"
|
||||
elif zh_pattern.match(char):
|
||||
lang = "JP"
|
||||
elif kr_pattern.match(char):
|
||||
lang = "KR"
|
||||
elif en_pattern.match(char):
|
||||
lang = "EN"
|
||||
# elif num_pattern.match(char):
|
||||
# lang = prev_sentence
|
||||
else:
|
||||
lang = None
|
||||
tagged_text += char
|
||||
continue
|
||||
# 如果当前语言与上一个语言不同,就添加标记
|
||||
if lang != prev_lang:
|
||||
tagged=1
|
||||
if prev_lang==None: # 开头
|
||||
tagged_text =tags[lang]+tagged_text
|
||||
else:
|
||||
tagged_text =tagged_text+tags[prev_lang]+tags[lang]
|
||||
|
||||
# 重置标记变量
|
||||
prev_lang = lang
|
||||
|
||||
# 添加当前字符到标记文本中
|
||||
tagged_text += char
|
||||
|
||||
# 在最后一个语言的结尾添加对应的标记
|
||||
if prev_lang:
|
||||
tagged_text += tags[prev_lang]
|
||||
if not tagged:
|
||||
prev_lang=prev_sentence
|
||||
tagged_text =tags[prev_lang]+tagged_text+tags[prev_lang]
|
||||
|
||||
return prev_lang,tagged_text
|
||||
|
||||
def tag_cke(text,prev_sentence=None):
|
||||
'''为中英韩加tag'''
|
||||
# 初始化标记变量
|
||||
tagged_text = ""
|
||||
prev_lang = None
|
||||
# 是否全略过未标签
|
||||
tagged=0
|
||||
|
||||
# 遍历文本
|
||||
for char in text:
|
||||
# 判断当前字符属于哪种语言
|
||||
if zh_pattern.match(char):
|
||||
lang = "ZH"
|
||||
elif kr_pattern.match(char):
|
||||
lang = "KR"
|
||||
elif en_pattern.match(char):
|
||||
lang = "EN"
|
||||
# elif num_pattern.match(char):
|
||||
# lang = prev_sentence
|
||||
else:
|
||||
# 略过
|
||||
lang = None
|
||||
tagged_text += char
|
||||
continue
|
||||
|
||||
# 如果当前语言与上一个语言不同,添加标记
|
||||
if lang != prev_lang:
|
||||
tagged=1
|
||||
if prev_lang==None: # 开头
|
||||
tagged_text =tags[lang]+tagged_text
|
||||
else:
|
||||
tagged_text =tagged_text+tags[prev_lang]+tags[lang]
|
||||
|
||||
# 重置标记变量
|
||||
prev_lang = lang
|
||||
|
||||
# 添加当前字符到标记文本中
|
||||
tagged_text += char
|
||||
|
||||
# 在最后一个语言的结尾添加对应的标记
|
||||
if prev_lang:
|
||||
tagged_text += tags[prev_lang]
|
||||
# 未标签则继承上一句标签
|
||||
if tagged==0:
|
||||
prev_lang=prev_sentence
|
||||
tagged_text =tags[prev_lang]+tagged_text+tags[prev_lang]
|
||||
return prev_lang,tagged_text
|
||||
|
||||
|
||||
|
||||
def load_checkpoint(checkpoint_path, model, optimizer=None, drop_speaker_emb=False):
|
||||
assert os.path.isfile(checkpoint_path)
|
||||
checkpoint_dict = torch.load(checkpoint_path, map_location='cpu')
|
||||
|
||||
Reference in New Issue
Block a user