Как обнаружить язык строки?

Запись твердого кода Steve Maguire.

20
задан Alon Gubkin 5 September 2013 в 23:04
поделиться

4 ответа

" Комментарии к документации XML (Руководство по программированию на C #) В Visual C # вы можете создать документацию для своего кода, включив теги XML в специальные поля комментариев в исходном коде непосредственно перед блоком кода, на который они ссылаются. "

http://msdn.microsoft.com/en-us/library /b2s063f7.aspx

затем вы можете использовать Sandcastle для генерации файлов chm, если хотите

http://www.hanselman.com/blog/SandcastleMicrosoftCTPOfAHelpCHMFileGeneratorOnTheTailsOfTheDeathOfNDoc.aspx

-121 --- 14129 ] Если у контекста вашего кода есть доступ в Интернет, вы можете попробовать использовать Google API для определения языка. http://code.google.com/apis/ajaxlanguage/documentation/

var text = "¿Dónde está el baño?";
google.language.detect(text, function(result) {
  if (!result.error) {
    var language = 'unknown';
    for (l in google.language.Languages) {
      if (google.language.Languages[l] == result.language) {
        language = l;
        break;
      }
    }
    var container = document.getElementById("detection");
    container.innerHTML = text + " is: " + language + "";
  }
});

И, поскольку вы используете C #, ознакомьтесь с этой статьей о том, как вызывать API из C #. .

ОБНОВЛЕНИЕ: Эта ссылка на C # исчезла, вот кешированная копия ее ядра:

string s = TextBoxTranslateEnglishToHebrew.Text;
string key = "YOUR GOOGLE AJAX API KEY";
GoogleLangaugeDetector detector =
   new GoogleLangaugeDetector(s, VERSION.ONE_POINT_ZERO, key);

GoogleTranslator gTranslator = new GoogleTranslator(s, VERSION.ONE_POINT_ZERO,
   detector.LanguageDetected.Equals("iw") ? LANGUAGE.HEBREW : LANGUAGE.ENGLISH,
   detector.LanguageDetected.Equals("iw") ? LANGUAGE.ENGLISH : LANGUAGE.HEBREW,
   key);

TextBoxTranslation.Text = gTranslator.Translation;

По сути, вам нужно создать URI и отправить его в Google, который выглядит так:

http://ajax.googleapis.com/ajax /services/language/translate?v=1.0&q=hello%20worled&langpair=en%7ciw&key=your_google_api_key_goes_here

Это сообщает API, что вы хотите перевести "hello world" с английского на иврит, на что ответ Google в формате JSON будет выглядеть как :

{"responseData": {"translatedText":"שלום העולם"}, "responseDetails": null, "responseStatus": 200}

Я решил создать базовый класс, представляющий типичный ответ Google JSON:

[Serializable]
public class JSONResponse
{
   public string responseDetails = null;
   public string responseStatus = null;
}

Затем объект перевода, который наследуется от этого класса:

[Serializable]
public class Translation: JSONResponse
{
   public TranslationResponseData responseData = 
    new TranslationResponseData();
}

Этот класс перевода имеет объект TranslationResponseData, который выглядит следующим образом:

[Serializable]
public class TranslationResponseData
{
   public string translatedText;
}

Наконец, мы можем сделать класс GoogleTranslator:

using System;
using System.Collections.Generic;
using System.Text;

using System.Web;
using System.Net;
using System.IO;
using System.Runtime.Serialization.Json;

namespace GoogleTranslationAPI
{

   public class GoogleTranslator
   {
      private string _q = "";
      private string _v = "";
      private string _key = "";
      private string _langPair = "";
      private string _requestUrl = "";
      private string _translation = "";

      public GoogleTranslator(string queryTerm, VERSION version, LANGUAGE languageFrom,
         LANGUAGE languageTo, string key)
      {
         _q = HttpUtility.UrlPathEncode(queryTerm);
         _v = HttpUtility.UrlEncode(EnumStringUtil.GetStringValue(version));
         _langPair =
            HttpUtility.UrlEncode(EnumStringUtil.GetStringValue(languageFrom) +
            "|" + EnumStringUtil.GetStringValue(languageTo));
         _key = HttpUtility.UrlEncode(key);

         string encodedRequestUrlFragment =
            string.Format("?v={0}&q={1}&langpair={2}&key={3}",
            _v, _q, _langPair, _key);

         _requestUrl = EnumStringUtil.GetStringValue(BASEURL.TRANSLATE) + encodedRequestUrlFragment;

         GetTranslation();
      }

      public string Translation
      {
         get { return _translation; }
         private set { _translation = value; }
      }

      private void GetTranslation()
      {
         try
         {
            WebRequest request = WebRequest.Create(_requestUrl);
            WebResponse response = request.GetResponse();

            StreamReader reader = new StreamReader(response.GetResponseStream());
            string json = reader.ReadLine();
            using (MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(json)))
            {
               DataContractJsonSerializer ser =
                  new DataContractJsonSerializer(typeof(Translation));
               Translation translation = ser.ReadObject(ms) as Translation;

               _translation = translation.responseData.translatedText;
            }
         }
         catch (Exception) { }
      }
   }
}
33
ответ дан 29 November 2019 в 22:32
поделиться

Если вы имеете в виду естественный (то есть человеческий) язык, это вообще сложная проблема. Какой язык «сервер» - английский или турецкий? На каком языке идет чат - на английском или французском? Какой язык является «уно» - итальянский или испанский (или латинский!)?

Не обращая внимания на контекст и не прилагая усилий к обработке естественного языка (<----- это фраза для Google для) у вас нет шанса.

Возможно, вам понравится Frengly - это красивый интерфейс службы Google Translate, который пытается угадать язык вводимого текста ...

6
ответ дан 29 November 2019 в 22:32
поделиться

Статистический подход с использованием орграфов или триграфов - очень хороший индикатор. Например, вот наиболее распространенные диграфы на английском языке по порядку: http://www.letterfrequency.org/#digraph-frequency (можно найти лучшие или более полные списки). Этот метод может иметь более высокий процент успеха, чем анализ слов для коротких фрагментов текста, потому что в тексте больше диграфов, чем целых слов.

7
ответ дан 29 November 2019 в 22:32
поделиться

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

В C # каждая строка в памяти будет иметь кодировку Unicode и не кодируется. Также в текстовых файлах кодировка не сохраняется. (Иногда только указание на 8 или 16 бит.)

Если вы хотите провести различие между двумя языками, вы можете найти несколько простых приемов. Например, если вы хотите отличить английский от голландского, строка, содержащая «y», будет в основном английской. (Ненадежно, но быстро).

6
ответ дан 29 November 2019 в 22:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: