遇到了一个需求,有一对字符串数据需要使用python区分是否是纯英文,这些数据来源于不同国家的输入,区分的目的是为了大概统计英语的输入和其他语言输入的比例。
首先想到的是python提供的函数str.isalpha():
def judge_pure_english(keyword): return keyword.isalpha()
而这样的结果并非满足需求,isalpha()只能判断一个字符串是否是一个的单词,也就是没有空格和其他符号的纯字符即满足条件:
[113211]is english[.гугал плей->False] [113212]is english[노래->True] [113213]is english[亲戚->True] [113214]is english[ខ្មែ->False] [113215]is english[євротрек драйвер->False] [113216]is english[Sweater Weather->False] [113217]is english[Toca led->False] [113218]is english[электронды намаз->False] [113219]is english[шщенок->True] [113220]is english[графический планшет->False] [113221]is english[готы->True] [113222]is english[mindmars->True] [113223]is english[че. а->False] [113224]is english[гонки от полиции->False] [113225]is english[футлол шоу->False] [113226]is english[фспышка на звонок->False] [113227]is english[фрийдом->True] [113228]is english[фотошоп причесок->False] [113229]is english[TouchPal SkinPack->False] [113230]is english[голсовой яндекс->False]
而我们需要的是判断英文,即便有空格也不要紧,于是采用另一种办法:
def judge_pure_english(keyword): return all(ord(c) < 128 for c in keyword)
这样就彻底解决问题了,速度也不慢:
[113210]is english[003 rt->True] [113211]is english[.гугал плей->False] [113212]is english[노래->False] [113213]is english[亲戚->False] [113214]is english[ខ្មែ->False] [113215]is english[євротрек драйвер->False] [113216]is english[Sweater Weather->True] [113217]is english[Toca led->True] [113218]is english[электронды намаз->False] [113219]is english[шщенок->False] [113220]is english[графический планшет->False] [113221]is english[готы->False] [113222]is english[mindmars->True] [113223]is english[че. а->False] [113224]is english[гонки от полиции->False] [113225]is english[футлол шоу->False] [113226]is english[фспышка на звонок->False] [113227]is english[фрийдом->False] [113228]is english[фотошоп причесок->False] [113229]is english[TouchPal SkinPack->True] [113230]is english[голсовой яндекс->False]
得到了想要的结果,通过编码来判断,英文中是用的字母,数字,空格都被认为是英文,一旦出现超出这个范围的字符,就被认为是其他语言。