5

我正在编写一个可以检查数千个网站的机器人,无论它们是英文还是非英文。

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

有人可以建议我检查网站语言的最佳方法吗?

任何帮助,将不胜感激。

4

8 回答 8

4

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

更多信息和确切的代码片段在这里:NLTK 和语言检测

于 2012-07-16T15:21:26.567 回答
2

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

维基百科

于 2012-07-16T15:18:53.577 回答
2

如果网站是多语言的,您可以发送“Accept-Language:en-US,en;q=0.8”标头并期望响应为英文。如果不是,您可以检查“response.headers”字典,看看是否可以找到有关该语言的任何信息。

如果仍然不走运,您可以尝试将 IP 映射到国家,然后以某种方式映射到语言。作为最后一个资源,尝试检测语言(我不知道这有多准确)。

于 2012-07-16T15:31:15.033 回答
2

如果您使用 Python,我强烈推荐由 Marco Lui 和 Tim Baldwin 编写的独立LangID模块。该模型经过预训练,字符检测高度准确。它还可以处理 XML/HTML 文档。

于 2012-08-18T15:52:47.193 回答
1

调查Natural Language Toolkit

NLTK: http: //nltk.org/

您要研究的是使用corpus以下方式提取默认词汇集NLTK

nltk.corpus.words.words()

然后,使用 . 将您的文本与上面的文本进行比较difflib

参考http ://docs.python.org/library/difflib.html

使用这些工具,您可以创建一个量表来衡量您的文本与 NLTK 定义的英文单词之间所需的差异。

于 2012-07-16T15:23:24.900 回答
1

您可以在http://detectlanguage.com使用语言检测 API。 它通过 GET 或 POST 接受文本字符串,并提供带有分数的 JSON 输出。有免费和优质服务。

于 2013-01-21T22:05:58.917 回答
0

如果一个 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" /

也许让机器人查看元标记,如果它的英文然后继续,否则忽略?

于 2012-07-16T15:44:10.303 回答
0

如果您不想相信网页告诉您的内容但想自己检查,您可以使用统计算法进行语言检测。基于三元组的算法很健壮,应该适用于主要使用另一种语言但有一点英语的页面(足以愚弄诸如“检查单词the, and, or with是否在页面上)谷歌“ngram语言分类”,你会发现很多关于它是如何完成的参考资料。

为英语编译自己的三元表很容易,但自然语言工具包附带了一组用于几种常见语言的集合。他们在NLTK_DATA/corpora/langid. 您可以在没有 nltk 库本身的情况下使用 trigram 数据,但您可能还想查看该nltk.util.trigrams模块。

于 2012-07-18T20:35:22.760 回答