如何识别网站的内容语言,如英语,日语,中文等

时间:2010-06-02 11:38:29

标签: c# asp.net web-crawler

(我正在开发一个网站来抓取ASP.NET中的其他网站内容。我能够正确地获取内容但是如何根据该内容确定使用哪种语言。对于Ex.English,Hindi,Chinese ,日本等。

我使用了以下代码。

HttpWebRequest request =(HttpWebRequest)HttpWebRequest.Create(TextBox1.Text);         request.UserAgent =“.NET Web Crawler”;

    WebResponse response = request.GetResponse();

    Stream stream = response.GetResponseStream();

    StreamReader reader = new StreamReader(stream);
    string htmlText = reader.ReadToEnd();

4 个答案:

答案 0 :(得分:1)

嗯,有些网页在html元素中包含“lang”或“xml:lang”属性。例如:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title></title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
</head>
<body>

</body>
</html>

在这个例子中,属性“lang”和“xml:lang”被设置为“en”(即英语)。此外,某些服务器可能会设置“内容 - 语言”标头,您可以检查该值。 (虽然,老实说,我实际上没有看到设置此值的服务器。)

但是,这些属性或标题的值可以是任何值,而某些服务器和网页甚至根本不会说出一种语言。但您可能希望搜索ISO-639ISO-3166定义的公共语言代码。

至于在C#中实现这一点,我承认:我没有太多线索。但我认为WebResponse类有一个名为Headers的属性,您可能需要查看它。

哦,对于像印地语这样的语言,我很确定它们包含该语言独有的字符。在这种情况下,您可以在htmlText字符串中搜索任何这些特定字符。

还有一种简单的方法可以检查htmlText字符串中是否存在特定语言的常用字词。例如,如果您想知道页面是否是法语,您可以搜索“b​​onjour”等字样。

答案 1 :(得分:1)

你可能会在这里找到一些东西: http://www.google.com/uds/samples/language/detect.html

答案 2 :(得分:0)

如果你在谈论“编程语言”,那么你就不能。你可以找到线索,但是无法确定页面是用asp还是php生成的。

如果你不是在谈论编程语言,而是英语/西班牙语/法语等,那么请忽略我的答案(但澄清你的问题)。

答案 3 :(得分:0)

除了希望创建网页的人为html标记添加语言标识符或在元标记中指定它,您的最佳解决方案(这意味着在这两个之后)是检查unicode字符代码的某些非网页上的英文文本。

string text = "あの";
foreach (char c in text)
{
   Console.WriteLine("U+{1:x4}", (int)c);
}

并检查它所属的语言空间。

然而,这并不是100%准确,因为在许多语言中存在字符重叠(由于平假名/片假名的使用,日语可以相当准确地确定,但随机选择的汉字可能只是一个部分没有平假名或片假名的日本汉字。

以编程方式执行此操作的最快方法可能是缩小尽可能多的特定于语言的字符集,然后先检查这些字符集,然后执行更强大的搜索,使其他任何一个都失败。