我正在编写一个可以检查数千个网站的机器人,无论它们是英文还是非英文。
我正在使用 Scrapy(python 2.7 框架)来抓取每个网站的首页,
有人可以建议我检查网站语言的最佳方法吗?
任何帮助,将不胜感激。
我正在编写一个可以检查数千个网站的机器人,无论它们是英文还是非英文。
我正在使用 Scrapy(python 2.7 框架)来抓取每个网站的首页,
有人可以建议我检查网站语言的最佳方法吗?
任何帮助,将不胜感激。
由于您使用的是 Python,因此您可以尝试 NLTK。更准确地说,您可以检查 NLTK.detect
更多信息和确切的代码片段在这里:NLTK 和语言检测
您可以使用响应标头找出:
如果网站是多语言的,您可以发送“Accept-Language:en-US,en;q=0.8”标头并期望响应为英文。如果不是,您可以检查“response.headers”字典,看看是否可以找到有关该语言的任何信息。
如果仍然不走运,您可以尝试将 IP 映射到国家,然后以某种方式映射到语言。作为最后一个资源,尝试检测语言(我不知道这有多准确)。
如果您使用 Python,我强烈推荐由 Marco Lui 和 Tim Baldwin 编写的独立LangID模块。该模型经过预训练,字符检测高度准确。它还可以处理 XML/HTML 文档。
调查Natural Language Toolkit
:
NLTK: http: //nltk.org/
您要研究的是使用corpus
以下方式提取默认词汇集NLTK
:
nltk.corpus.words.words()
然后,使用 . 将您的文本与上面的文本进行比较difflib
。
参考:http ://docs.python.org/library/difflib.html
使用这些工具,您可以创建一个量表来衡量您的文本与 NLTK 定义的英文单词之间所需的差异。
您可以在http://detectlanguage.com使用语言检测 API。 它通过 GET 或 POST 接受文本字符串,并提供带有分数的 JSON 输出。有免费和优质服务。
如果一个 html 网站使用非英文字符,它会在元标记的网页源代码中提及。这有助于浏览器知道如何呈现页面。
这是一个阿拉伯网站http://www.tanmia.ae的例子,它有英文页面和阿拉伯文页面
阿拉伯语页面中的元标记是:meta http-equiv="X-UA-Compatible" content="IE=edge
相同的页面,但英文是 meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /
也许让机器人查看元标记,如果它的英文然后继续,否则忽略?
如果您不想相信网页告诉您的内容但想自己检查,您可以使用统计算法进行语言检测。基于三元组的算法很健壮,应该适用于主要使用另一种语言但有一点英语的页面(足以愚弄诸如“检查单词the, and, or with是否在页面上)谷歌“ngram语言分类”,你会发现很多关于它是如何完成的参考资料。
为英语编译自己的三元表很容易,但自然语言工具包附带了一组用于几种常见语言的集合。他们在NLTK_DATA/corpora/langid
. 您可以在没有 nltk 库本身的情况下使用 trigram 数据,但您可能还想查看该nltk.util.trigrams
模块。