Справочник по C#

    Исходники по языку программирования CSharp

    Google Переводчик (Google Translate) и C#: Справочник по C#

    /
    /
    /
    216 Views


          В данной статье описано использование 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/) и добавьте ссылку на нее в Обозревателе решений. Разместите на главной форме вашего проекта три элемента управления:

    • 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» который позволит вам это сделать за небольшую плату.

    Google Переводчик (Google Translate) и C#: Справочник по C#

    0.00 (0%) 0 votes

    moyadcode13
    • Facebook
    • Twitter
    • Google+
    • Linkedin
    • Pinterest
    moyadcode10
    moyadcode11
    moyadcode9