用Python检测英文文本
我知道这个问题已经被问过很多次了,但我还是没能用“现有”的解决方案解决它。希望能得到一些新的想法或者概念,来检测我的句子是否是英文的。现有的解决方案有:
- 语言检测器(是用Ruby写的,不是Python :/)
- 谷歌翻译API v2(不再免费,得每月支付20美元,而我这个项目是为了学术目的。免费额度:每天0个字符)
- Python的语言识别(找不到源代码,下面有链接。自动语言识别)
- Enchant(这个不支持Python 2.7吗?我对Python还很陌生,有什么指南吗?我觉得这可能是我需要的)
- NLTK中的Wordnet(我不知道为什么“wordnet.synsets”缺失,只有“wordnet.Synset”可用。解决方案中的示例代码对我也不管用 T_T,可能又是版本问题?)
- 把英文单词存到列表中,然后比较单词是否存在(嗯,这种方法不太好,因为句子来自Twitter,你也知道的 :P)
有效的解决方案
经过一系列尝试,以下是有效的解决方案(替代上面的列表)
- 维基词典API(使用Urllib2和simplejson来解析。然后检查键是否为-1,表示单词不存在。否则就是英文。当然,使用在Twitter上时,需要先处理单词,去掉特殊字符,比如@、#、?!。关于如何找到键,可以参考这里。Simplejson和随机键值)
- Dogukan Tufekci的回答(已选中)(缺点:如果句子短于20个字符,就必须安装PyEnchant,否则会返回UNKNOWN。而且PyEnchant不支持Python 2.7,意味着无法安装,短于20个字符的句子也无法使用)
参考资料
2 个回答
1
你可以考虑使用隐马尔可夫模型来识别语言,每种语言都有自己独特的特点。
8
你可以试试我在guess_language这个库,它是我通过Miguel Grinberg的Flask超级教程找到的。这个库看起来支持Python 2和3,所以应该没问题。