我正试图从数据集中筛选非英语应用程序,以解决我正在处理的一个问题。
如何将非英语应用程序从数据集中删除?最初的方法是检查字符串是否只能使用ASCII字符进行编码。如果该字符串不能仅用ASCII字符编码,则该字符串具有来自其他字母或特殊字符的字符。
在一些玩具示例中测试这种方法会产生如下结果:
def is_english(app_name):
try:
app_name.encode(encoding='utf-8').decode('ascii')
except UnicodeDecodeError:
return False
else:
return True
print(is_english('Instagram'))
print(is_english('爱奇艺PPS -《欢乐颂2》电视剧热播'))
print(is_english('Docs To Go™ Free Office Suite'))
print(is_english('Instachat '))显然,最初的方法存在一个问题,即'Docs To Go™Free Office Suite‘和'Instachat ',这两个英语应用程序都被认为是非英语应用,因为它们有特殊的字符(即'™’和'')。
对于如何允许使用“™”、“表情符号”等特殊字符,有什么建议吗?
发布于 2020-08-08 23:34:38
您可以定义一个函数,该函数计算多少字符可能是英文字符,并返回高于某个阈值的True。不过,这并不是百分之百完美的(比如德语单词,比如Tastatur键盘这样的字母相同),但也许是个开始:
import re
def is_probably_english(app_name, threshold=0.9):
rx = re.compile(r'[-a-zA-Z0-9_ ]')
ascii = [char for char in app_name if rx.search(char)]
quotient = len(ascii) / len(app_name)
passed = True if quotient >= threshold else False
return passed, quotient
print(is_probably_english('Instagram'))
print(is_probably_english('爱奇艺PPS -《欢乐颂2》电视剧热播'))
print(is_probably_english('Docs To Go™ Free Office Suite'))
print(is_probably_english('Instachat '))这会产生
(True, 1.0)
(False, 0.3157894736842105)
(True, 0.9655172413793104)
(True, 0.9090909090909091)发布于 2020-08-08 23:36:27
有一种方法:
def is_english(app_name):
y = app_name.encode()
return len(app_name) == len(y)发布于 2020-08-08 23:44:47
。
https://stackoverflow.com/questions/63321047
复制相似问题