在语言处理中,接口只有一个,需要判别全英文、中英文,以便调用不同接口
主要工作为:
1、去除std::string 的符号 包括中英文,避免误判
vector<string> remove_symbol_list {"。", "[", "’", "#", "$", "%", "&", "(", ")", "*", "(", ")", "+", "-", "/", "/", "<", "=", ">", "@", "★", "【", "】", "^", "_", "`", "{", "|", "}", "~", "]", "+", "“", "”", "‘", "’", "…", "\"", "\\", "'","!", "!", "。", "?", "、", ",", "?", ";", "《", "》" ," " ," ", ","};
这是需要处理的符号集合
处理: 对符号集每个符号,是否在std::string 查找位置,为真则去除这个字符,核心代码
size_t pos = 0;
while ((int)(pos = str.find(pattern)) != -1)
{
str.erase(pos, pattern.size());
}
2、将std::string 转成char
char *p = (char*)input.data();
data 和c_str函数主要区别是data返回的char数组没有\0 结束符
3、对所有的文字进行判断,判断中英文主要是通过ASCII码,英文字母是41-90 && 97-122,中文规则,由两个字符来表示一个中文,因此,中文两个字符的高位都是1
char temp ;
while(temp = *p++){
if((temp & 0x80) && (temp & 0x80) ){
return TTSConfig::Simplified_Chinese;
}
}
return TTSConfig::American_English;
由此可以返回相应所需的标识符,只要有中文就判断为中文,全英文才能调用英文接口
参考: