【问题标题】:How to Identify the website's content language like English, Japanese, Chinese etc如何识别网站的内容语言,如英文、日文、中文等
【发布时间】:2010-06-02 11:38:28
【问题描述】:

(我正在开发一个网站来抓取 ASP.NET 中的其他网站内容。我能够正确获取内容,但如何根据该内容确定使用哪种语言。例如英语、印地语、中文, 日语等

我使用了以下代码。

HttpWebRequest 请求 = (HttpWebRequest)HttpWebRequest.Create(TextBox1.Text); request.UserAgent = "一个 .NET 网络爬虫";

    WebResponse response = request.GetResponse();

    Stream stream = response.GetResponseStream();

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

【问题讨论】:

    标签: c# asp.net web-crawler


    【解决方案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”(即英语)。此外,某些服务器可能会设置“Content-Language”标头,您可以检查该值。 (虽然,老实说,我实际上并没有看到设置此值的服务器)。

    但是,这些属性或标头的值可以是任何值,并且某些服务器和网页甚至根本不会声明一种语言。但您可能需要搜索ISO-639ISO-3166 定义的通用语言代码。

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 谢谢,我想确定它的英文/中文/日文是否这样。
      【解决方案4】:

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

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

      并检查它属于哪个语言空间。

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

      以编程方式执行此操作的最快方法可能是尽可能多地缩小语言特定字符集的范围,并首先检查这些字符集,然后在其他三个失败中进行更强大的搜索。

      【讨论】:

        猜你喜欢
        • 2010-09-30
        • 2015-06-04
        • 1970-01-01
        • 2021-01-01
        • 2013-04-12
        • 2021-09-28
        • 2020-06-14
        • 1970-01-01
        • 2011-05-11
        相关资源
        最近更新 更多