Как определить язык контента сайта, такой как английский, японский, китайский и т. Д. - PullRequest
2 голосов
/ 02 июня 2010

(Я разрабатываю веб-сайт для сканирования другого содержимого веб-сайта в ASP.NET. Я могу правильно получить содержимое, но как определить, какой язык используется на основе этого содержимого. Например, английский, хинди, китайский , Японский и т. Д.

Я использовал следующий код.

HttpWebRequest request = (HttpWebRequest) HttpWebRequest.Create (TextBox1.Text); request.UserAgent = "A .NET Web Crawler";

    WebResponse response = request.GetResponse();

    Stream stream = response.GetResponseStream();

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

Ответы [ 4 ]

1 голос
/ 04 июня 2010

Ну, некоторые веб-страницы содержат атрибут "lang" или "xml: lang" в элементе html. Например:

<!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-639 и ISO-3166 .

Что касается реализации этого в C #, я признаю это: я понятия не имею. Но я думаю, что класс WebResponse имеет свойство под названием Headers , на которое вы, возможно, захотите взглянуть.

О, и для таких языков, как хинди, я почти уверен, что они содержат символы, уникальные для этого языка. В этом случае вы можете выполнить поиск в строке htmlText любого из этих конкретных символов.

Существует также простой метод проверки строки htmlText на наличие слов, общих для определенного языка. Например, если вы хотите узнать, является ли страница французской, вы можете найти слово «bonjour» и т. Д.

1 голос
/ 04 июня 2010

Вы можете найти что-то здесь: http://www.google.com/uds/samples/language/detect.html

0 голосов
/ 04 июня 2010

Помимо надежды, что человек, который создал веб-страницу, добавил языковой идентификатор к тегу html или указал его в метатеге, ваше лучшее решение (и это означает, что после этих двух) состоит в том, чтобы проверить код символа Юникод на наличие некоторых Текст на английском с веб-страницы.

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

И проверьте, в какое языковое пространство он попадает.

Однако это не будет на 100% точно, поскольку в ряде языков есть совпадение символов (японский язык может быть определен довольно точно из-за использования хирагана / катакана, но случайный выбор китайских символов МОЖЕТ быть просто разделом японского кандзи без хираганы или катаканы).

Самый быстрый способ сделать это программно, вероятно, состоит в том, чтобы сузить как можно больше языковых наборов символов и сначала проверить их, а затем выполнить более надежный поиск, потерпев неудачу с любым из трех других.

0 голосов
/ 02 июня 2010

Если вы говорите о «языке программирования», то вы не можете. Вы можете найти подсказки, но нет никакого способа узнать наверняка, была ли страница создана с использованием asp или php или чего-либо еще.

Если вы говорите не о языке программирования, а об английском / испанском / французском и т. Д., Тогда игнорируйте мой ответ (но уточните свой вопрос).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...