我正在写一个Bot,可以检查成千上万的网站,不管是英文与否。
我正在使用Scrapy(python 2.7框架)来抓取每个网站的第一页,
有人可以建议我哪种方法可以检查网站语言,
任何帮助将不胜感激。
答案 0 :(得分:4)
由于您使用的是Python,因此可以试用NLTK。更确切地说,您可以检查NLTK.detect
更多信息和确切的代码段位于:NLTK and language detection
答案 1 :(得分:2)
您可以使用响应标头查找:
答案 2 :(得分:2)
如果网站是多语言,您可以发送“Accept-Language:en-US,en; q = 0.8”标题,并期望回复为英文。如果不是,您可以查看“response.headers”字典,看看是否能找到有关该语言的任何信息。
如果仍然不走运,您可以尝试将IP映射到国家/地区,然后以某种方式映射到语言。作为最后一个资源,请尝试检测语言(我不知道这是多么准确)。
答案 3 :(得分:2)
如果您使用的是Python,我强烈推荐由Marco Lui和Tim Baldwin编写的独立LangID模块。 该模型经过预先训练,字符检测非常准确。它还可以处理XML / HTML文档。
答案 4 :(得分:1)
查看Natural Language Toolkit
:
NLTK :http://nltk.org/
您要查看的是使用corpus
提取NLTK
设置的默认词汇表:
nltk.corpus.words.words()
然后,使用difflib
将您的文字与上述内容进行比较。
参考:http://docs.python.org/library/difflib.html
使用这些工具,您可以创建一个比例来衡量文本与NLTK定义的英语单词之间所需的差异。
答案 5 :(得分:0)
如果html网站使用的是非英文字符,则会在元标记的网页源代码中提及。这有助于浏览器了解如何呈现页面。
以下是阿拉伯语网站http://www.tanmia.ae的示例,其中包含英文页面和阿拉伯语页面
阿拉伯语页面中的元标记是: meta http-equiv =" X-UA-Compatible"含量=" IE =边缘
同一页面,但英文是 meta http-equiv =" Content-Type"含量=" text / html的;字符集= UTF-8" /
如果它的英语然后继续忽略,也许机器人会查看元标记?
答案 6 :(得分:0)
如果您不想信任网页告诉您的内容但想要自己检查,您可以使用统计算法进行语言检测。基于Trigram的算法是健壮的,应该适用于主要使用另一种语言但有一点英语的页面(足以愚弄启发式,例如“检查单词,和或 在页面上)谷歌“ngram语言分类”,你会发现很多关于它是如何完成的参考。
编译自己的英语trigram表很容易,但Natural Language Toolkit附带了几种常用语言的集合。他们在NLTK_DATA/corpora/langid
。您可以在没有nltk库本身的情况下使用trigram数据,但您可能还需要查看nltk.util.trigrams
模块。