В данной статье описано использование 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» который позволит вам это сделать за небольшую плату.
Комментариев нет:
Отправить комментарий
Большая просьба, не писать в комментариях всякую ерунду не по теме!