赞
踩
最近正好碰到这个需求,总结一下用Python进行语言检测的方法。
1.用unicode编码检测
汉字、韩文、日文等都有对应的unicode字符集范围,只要用正则表达式匹配出来即可。
在判断的时候,往往需要去掉一些特殊字符,例如中英文标点符号。可以用下列方法去除:
# 方法一,自定义需要去掉的标点符号,注意这个字符串的首尾出现的[]不是标点符号'[]',
# 而是正则表达式中的中括号,表示定义匹配的字符范围
remove_nota = u'[’·°–!"#$%&\'()*+,-./:;<=>?@,。?★、…【】()《》?“”‘’![\\]^_`{|}~]+'
sentence = '测试。,[].?'
print(re.sub(remove_nota, '', sentence))
# 方法二,只能去掉英文标点符号
remove_punctuation_map = dict((ord(char), None) for char in string.punctuation)
print(sentence.translate(remove_punctuation_map))
输出:
测试
测试。,
还可以把数字也去掉:
# 方法一
sentence = re.sub('[0-9]', '', sentence).strip()
# 方法二
remove_digits = str.maketrans('', '', string.digits)
sentence = sentence.translate(remove_digits)
然后就可以进行语言检测了。
这里的思路是匹配句子的相应语言字符,然后替换掉,如果替换后字符串为空,表示这个句子是纯正的该语言(即不掺杂其它语言)。
也可以用正则表达式查询出句子中属于该语言的字符
s = "English Test"
re_words = re.compile(u"[a-zA-Z]")
res = re.findall(re_words, s) # 查询出所有的匹配字符串
print(res)
res2 = re.sub('[a-zA-Z]', '', s).strip()
print(res2) # 空字符串
if len(res2) <= 0:
print("This is English
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。