python网站语言检测

时间:2012-07-16 15:16:09

标签: python scrapy web-crawler language-detection

我正在写一个Bot,可以检查成千上万的网站,不管是英文与否。

我正在使用Scrapy(python 2.7框架)来抓取每个网站的第一页,

有人可以建议我哪种方法可以检查网站语言,

任何帮助将不胜感激。

7 个答案:

答案 0 :(得分:4)

由于您使用的是Python,因此可以试用NLTK。更确切地说,您可以检查NLTK.detect

更多信息和确切的代码段位于:NLTK and language detection

答案 1 :(得分:2)

您可以使用响应标头查找:

Wikipedia

答案 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模块。