检测字符串语言的最佳方法是什么?
如果您的代码上下文可以访问互联网,则可以尝试使用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#,因此请阅读本文,了解如何从c#调用API。
更新:该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; }
然后,从该类继承的Translation对象:
[Serializable] public class Translation: JSONResponse { public TranslationResponseData responseData = new TranslationResponseData(); }
这个Translation类具有一个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) { } } } }