В данной статье описано использование on-line сервиса «Google Переводчик (Google Translate)(https://translate.google.ru/)» путем формирования запроса с необходимым текстом для перевода и выполнением синтаксического анализа полученного результата с использованием библиотеки «HtmlAgilityPack».
Выполнить синтаксический анализ можно разными способами, как используя встроенные в Framework средства, так и сторонние библиотеки. В данной статье будет рассмотрен процесс синтаксического анализа с использованием языка «XPath (XML Path Language)», реализующим доступ к частям документа XML, в файлах трансформации «XSLT» и являющимся стандартом консорциума «W3C».
Создайте проект «Windows Form» в «Microsoft Visual Studio». Скачайте библиотеку HtmlAgilityPack (https://htmlagilitypack.codeplex.com/) и добавьте ссылку на нее в Обозревателе решений. Разместите на главной форме вашего проекта три элемента управления:
В Google Chrome перейдите на страницу сервиса Google Переводчик (Google Translate)(https://translate.google.ru/) и выполните перевод любого текста. Сделайте клик правой клавишей мыши по тексту перевода и выберете в появившемся контекстном меню пункт «Просмотр кода элемента». В открывшемся окне вы увидите код загруженной страницы с переводом и выделенной строкой кода контейнера, в котором находится перевод. На данной странице у контейнера с результатом перевода есть идентификатор «result_box», именно по нему мы и будем получать перевод.
Сделайте двойной клик правой клавишей мыши по элементу управления «button1», вы перейдете в редактор кода с установкой курсора в тело автоматически созданного метода «button1_Click», события «Click», возникающего при нажатии на данный элемент управления. Добавьте в него приведенный ниже код.
Выполнить синтаксический анализ можно разными способами, как используя встроенные в Framework средства, так и сторонние библиотеки. В данной статье будет рассмотрен процесс синтаксического анализа с использованием языка «XPath (XML Path Language)», реализующим доступ к частям документа XML, в файлах трансформации «XSLT» и являющимся стандартом консорциума «W3C».
Создайте проект «Windows Form» в «Microsoft Visual Studio». Скачайте библиотеку HtmlAgilityPack (https://htmlagilitypack.codeplex.com/) и добавьте ссылку на нее в Обозревателе решений. Разместите на главной форме вашего проекта три элемента управления:
- 1) richTextBox1 – Текстовый элемент управления для ввода текста, перевод которого необходимо выполнить;
- 2) richTextBox2 - Текстовый элемент управления для вывода результата перевода;
- 3) button1 – элемент управления необходимый для запуска процесса перевода текста.
В Google Chrome перейдите на страницу сервиса Google Переводчик (Google Translate)(https://translate.google.ru/) и выполните перевод любого текста. Сделайте клик правой клавишей мыши по тексту перевода и выберете в появившемся контекстном меню пункт «Просмотр кода элемента». В открывшемся окне вы увидите код загруженной страницы с переводом и выделенной строкой кода контейнера, в котором находится перевод. На данной странице у контейнера с результатом перевода есть идентификатор «result_box», именно по нему мы и будем получать перевод.
Сделайте двойной клик правой клавишей мыши по элементу управления «button1», вы перейдете в редактор кода с установкой курсора в тело автоматически созданного метода «button1_Click», события «Click», возникающего при нажатии на данный элемент управления. Добавьте в него приведенный ниже код.
//Вызываем метод отправки текста для перевода с указанием
//исходного языка и языка перевода.
//И получаем в ответ HTML код страницы ответа.
string result = translate(richTextBox1.Text, "en", "ru");
//Создаем объект класса HtmlDocument.
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
//Загружаем в doc полученный HTML.
doc.LoadHtml(result);
//У созданного объекта doc есть свойство DocumentNode (указывает на верхний узел документа).
//У него же в свою очередь есть методы SelectNodes и SelectSingleNode.
//Первый выбирает коллекцию элементов, а второй — только один. Нам нужен первый метод.
HtmlAgilityPack.HtmlNodeCollection translateNode = doc.DocumentNode.SelectNodes("//span[@id='result_box']");
//Проверяем количество найденных элементов.
if (translateNode.Count != 0)
{
//Элементы найдены, получаем текст между начальным и конечным тегами объекта.
richTextBox2.Text = translateNode[0].InnerText;
}
else
{
//Необходимые нам элементы, отсутствуют на странице.
richTextBox2.Text = "Проблема с переводом";
}Так же добавьте в листинг главной формы метод формирования запроса на перевод и чтения ответа.//word - фраза для перевода, SL -исходный язык, DL - язык перевода.
public string translate(string word, string SL, string DL)
{
//Инициализируем новый экземпляр класса System.Net.CookieContainer.
var cookies = new System.Net.CookieContainer();
string result;
//Задаем значение System.Boolean, которое определяет, используется
//ли поведение 100-Continue.
System.Net.ServicePointManager.Expect100Continue = false;
//Формируем строку запроса на перевод.
string zapros = "http://translate.google.ru/?sl=" + SL + "&tl=" + DL + "&q=" + word;
//Инициализируем новый экземпляр System.Net.WebRequest для заданной схемы URI.
var request = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(zapros);
request.CookieContainer = cookies;
//Указываем системные учетные данные приложения.
request.Credentials = System.Net.CredentialCache.DefaultCredentials;
//Указываем сетевые учетные данные текущего контекста безопасности.
request.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
//Задаем метод для запроса.
request.Method = "POST";
//Задаем значение HTTP-заголовка Content-type.
request.ContentType = "application/x-www-form-urlencoded";
//Задаем значение HTTP-заголовка User-agent.
request.UserAgent = @"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4";
//Получаем объект System.IO.Stream, используемый для записи данных запроса.
using (var requestStream = request.GetRequestStream())
//При переопределении во вложенном классе получаем поток данных из
//интернет-ресурса.
using (var responseStream = request.GetResponse().GetResponseStream())
//Инициализируем новый экземпляр класса System.IO.StreamReader для указанного
//потока с заданной кодировкой символов.
using (var reader = new System.IO.StreamReader(responseStream, Encoding.GetEncoding("UTF-8")))
{
//Считываем поток от текущего положения до конца.
result = reader.ReadToEnd();
}
//Возвращаем полученную строку с HTML кодом страницы.
return result;
} Запустите ваш проект, нажав на клавишу «F5». Введите текст на английском языке в верхнее текстовое поле и нажмите на кнопку «Перевести». Через некоторое время если не будет ошибок, вы увидите перевод вашего текста. Ниже приведен пример перевода текста из Википедии. Внимание, получение перевода в ваших проектах с использованием этой статьи может нарушить условия использования данного сервиса Google. На странице «http://translate.google.ru/about/intl/ru_ALL/forbusiness.html» написано, что если вы хотите внедрить данный сервис в любые ваши приложения и веб-страницы, есть сервис «Translate API» который позволит вам это сделать за небольшую плату.






Комментариев нет:
Отправить комментарий
Большая просьба, не писать в комментариях всякую ерунду не по теме!