Azure AI 服务之文本翻译

介绍 Azure 认识服务中 Language 分类中的文本翻译服务(Translator Text API

TEXT_TRANSLATION_API_ENDPOINT = BING_SPELL_CHECK_API_ENDPOINT = ;

WebRequest.Headers.Add(,);

TEXT_TRANSLATION_API_SUBSCRIPTION_KEY = BING_SPELL_CHECK_API_SUBSCRIPTION_KEY = ;

uri = TEXT_TRANSLATION_API_ENDPOINT + ;

uri = TEXT_TRANSLATION_API_ENDPOINT + = WebRequest.Headers.Add(= </span><span style="color: #008000"&gt;//</span><span style="color: #008000"&gt; 把返回的 xml 信息抽取到数组中</span> response =<span style="color: #000000"&gt; WebRequest.GetResponse(); </span><span style="color: #0000ff"&gt;using</span> (Stream stream =<span style="color: #000000"&gt; response.GetResponseStream()) { DataContractSerializer dcs </span>= <span style="color: #0000ff"&gt;new</span> DataContractSerializer(<span style="color: #0000ff"&gt;typeof</span>(List<<span style="color: #0000ff"&gt;string</span>><span style="color: #000000"&gt;)); List</span><<span style="color: #0000ff"&gt;string</span>> languagesForTranslate = (List<<span style="color: #0000ff"&gt;string</span>><span style="color: #000000"&gt;)dcs.ReadObject(stream); languageCodes </span>=<span style="color: #000000"&gt; languagesForTranslate.ToArray(); }

}

SortedDictionary<,> languageCodesAndTitles = SortedDictionary<,>(Comparer<>.Create((a,b) => .Compare(a,b, uri = TEXT_TRANSLATION_API_ENDPOINT + == = = DataContractSerializer(Type.GetType( (Stream stream =</span><span style="color: #008000"&gt;//</span><span style="color: #008000"&gt; 把返回的 xml 信息抽取到数组中</span> <span style="color: #0000ff"&gt;var</span> response =<span style="color: #000000"&gt; request.GetResponse(); </span><span style="color: #0000ff"&gt;string</span><span style="color: #000000"&gt;[] languageNames; </span><span style="color: #0000ff"&gt;using</span> (Stream stream =<span style="color: #000000"&gt; response.GetResponseStream()) { languageNames </span>= (<span style="color: #0000ff"&gt;string</span><span style="color: #000000"&gt;[])dcs.ReadObject(stream); } </span><span style="color: #008000"&gt;//</span><span style="color: #008000"&gt; 把支持的语言列表及其友好名称保存到字典数据结构中, </span><span style="color: #008000"&gt;//</span><span style="color: #008000"&gt; 随后会把它们绑定给 combo box 控件进行显示</span> <span style="color: #0000ff"&gt;for</span> (<span style="color: #0000ff"&gt;int</span> i = <span style="color: #800080"&gt;0</span>; i < languageNames.Length; i++<span style="color: #000000"&gt;) { languageCodesAndTitles.Add(languageNames[i],languageCodes[i]); }

}

count = ( menuItem </span><span style="color: #008000"&gt;//</span><span style="color: #008000"&gt; 设置默认的源语言和目标语言</span> FromLanguageComboBox.SelectedItem = <span style="color: #800000"&gt;"</span><span style="color: #800000"&gt;英语</span><span style="color: #800000"&gt;"</span><span style="color: #000000"&gt;; ToLanguageComboBox.SelectedItem </span>= <span style="color: #800000"&gt;"</span><span style="color: #800000"&gt;简体中文</span><span style="color: #800000"&gt;"</span><span style="color: #000000"&gt;;

}

TEXT_TRANSLATION_API_ENDPOINT + + 待翻译文本 + + 源语言 + + 目标语言

TranslateButton_Click( textToTranslate = fromLanguage = fromLanguageCode = toLanguageCode =</span><span style="color: #008000"&gt;//</span><span style="color: #008000"&gt; 如果要翻译的文本是英语,还可以进行拼写检查</span> <span style="color: #0000ff"&gt;if</span> (fromLanguageCode == <span style="color: #800000"&gt;"</span><span style="color: #800000"&gt;en</span><span style="color: #800000"&gt;"</span><span style="color: #000000"&gt;) { textToTranslate </span>=<span style="color: #000000"&gt; CorrectSpelling(textToTranslate); </span><span style="color: #008000"&gt;//</span><span style="color: #008000"&gt; 把更新后的文本保存到 UI 控件上</span> TextToTranslate.Text =<span style="color: #000000"&gt; textToTranslate; } </span><span style="color: #008000"&gt;//</span><span style="color: #008000"&gt; 处理文本为空和不需要翻译的情况</span> <span style="color: #0000ff"&gt;if</span> (textToTranslate == <span style="color: #800000"&gt;""</span> || fromLanguageCode ==<span style="color: #000000"&gt; toLanguageCode) { TranslatedText.Text </span>=<span style="color: #000000"&gt; textToTranslate; </span><span style="color: #0000ff"&gt;return</span><span style="color: #000000"&gt;; } </span><span style="color: #008000"&gt;//</span><span style="color: #008000"&gt; 通过 http 请求执行翻译任务</span> <span style="color: #0000ff"&gt;string</span> uri = <span style="color: #0000ff"&gt;string</span>.Format(TEXT_TRANSLATION_API_ENDPOINT + <span style="color: #800000"&gt;"</span><span style="color: #800000"&gt;Translate?text=</span><span style="color: #800000"&gt;"</span> +<span style="color: #000000"&gt; System.Web.HttpUtility.UrlEncode(textToTranslate) </span>+ <span style="color: #800000"&gt;"</span><span style="color: #800000"&gt;&amp;from={0}&amp;to={1}</span><span style="color: #800000"&gt;"</span><span style="color: #000000"&gt;,fromLanguageCode,toLanguageCode); </span><span style="color: #0000ff"&gt;var</span> translationWebRequest =<span style="color: #000000"&gt; HttpWebRequest.Create(uri); translationWebRequest.Headers.Add(</span><span style="color: #800000"&gt;"</span><span style="color: #800000"&gt;Ocp-Apim-Subscription-Key</span><span style="color: #800000"&gt;"</span><span style="color: #000000"&gt;,TEXT_TRANSLATION_API_SUBSCRIPTION_KEY); WebResponse response </span>= <span style="color: #0000ff"&gt;null</span><span style="color: #000000"&gt;; response </span>=<span style="color: #000000"&gt; translationWebRequest.GetResponse(); </span><span style="color: #008000"&gt;//</span><span style="color: #008000"&gt; 把返回的翻译结果抽取到 UI 控件中</span> Stream stream =<span style="color: #000000"&gt; response.GetResponseStream(); StreamReader translatedStream </span>= <span style="color: #0000ff"&gt;new</span> StreamReader(stream,Encoding.GetEncoding(<span style="color: #800000"&gt;"</span><span style="color: #800000"&gt;utf-8</span><span style="color: #800000"&gt;"</span><span style="color: #000000"&gt;)); System.Xml.XmlDocument xmlResponse </span>= <span style="color: #0000ff"&gt;new</span><span style="color: #000000"&gt; System.Xml.XmlDocument(); xmlResponse.LoadXml(translatedStream.ReadToEnd()); TranslatedText.Text </span>=<span style="color: #000000"&gt; xmlResponse.InnerText;

}

uri = .Format(TEXT_TRANSLATION_API_ENDPOINT + ++ ,toLanguageCode);

(fromLanguageCode == = TextToTranslate.Text =

CorrectSpelling( uri = BING_SPELL_CHECK_API_ENDPOINT + HttpWebRequest spellCheckWebRequest == = ; </span><span style="color: #008000"&gt;//</span><span style="color: #008000"&gt; 把文本内容放在请求的 body 中</span> <span style="color: #0000ff"&gt;string</span> body = <span style="color: #800000"&gt;"</span><span style="color: #800000"&gt;text=</span><span style="color: #800000"&gt;"</span> +<span style="color: #000000"&gt; System.Web.HttpUtility.UrlEncode(text); </span><span style="color: #0000ff"&gt;byte</span>[] data =<span style="color: #000000"&gt; Encoding.UTF8.GetBytes(body); spellCheckWebRequest.ContentLength </span>=<span style="color: #000000"&gt; data.Length; </span><span style="color: #0000ff"&gt;using</span> (<span style="color: #0000ff"&gt;var</span> requestStream =<span style="color: #000000"&gt; spellCheckWebRequest.GetRequestStream()) requestStream.Write(data,</span><span style="color: #800080"&gt;0</span><span style="color: #000000"&gt;,data.Length); HttpWebResponse response </span>=<span style="color: #000000"&gt; (HttpWebResponse)spellCheckWebRequest.GetResponse(); </span><span style="color: #008000"&gt;//</span><span style="color: #008000"&gt; 从返回中取出 json 格式的拼写检查结果</span> <span style="color: #0000ff"&gt;var</span> serializer = <span style="color: #0000ff"&gt;new</span><span style="color: #000000"&gt; System.Web.Script.Serialization.JavaScriptSerializer(); </span><span style="color: #0000ff"&gt;var</span> responseStream =<span style="color: #000000"&gt; response.GetResponseStream(); </span><span style="color: #0000ff"&gt;var</span> jsonString = <span style="color: #0000ff"&gt;new</span> StreamReader(responseStream,Encoding.GetEncoding(<span style="color: #800000"&gt;"</span><span style="color: #800000"&gt;utf-8</span><span style="color: #800000"&gt;"</span><span style="color: #000000"&gt;)).ReadToEnd(); </span><span style="color: #0000ff"&gt;dynamic</span> jsonResponse =<span style="color: #000000"&gt; serializer.DeserializeObject(jsonString); </span><span style="color: #0000ff"&gt;var</span> flaggedTokens = jsonResponse[<span style="color: #800000"&gt;"</span><span style="color: #800000"&gt;flaggedTokens</span><span style="color: #800000"&gt;"</span><span style="color: #000000"&gt;]; </span><span style="color: #008000"&gt;//</span><span style="color: #008000"&gt; 我们定义一个规则来应用拼写检查的结果, </span><span style="color: #008000"&gt;//</span><span style="color: #008000"&gt; 比如:当拼写检查的权值大于 0.7 时就用建议的值替换掉文本中的值。</span> <span style="color: #0000ff"&gt;var</span> corrections = <span style="color: #0000ff"&gt;new</span> SortedDictionary<<span style="color: #0000ff"&gt;int</span>,<span style="color: #0000ff"&gt;string</span>[]>(Comparer<<span style="color: #0000ff"&gt;int</span>>.Create((a,b) =><span style="color: #000000"&gt; b.CompareTo(a))); </span><span style="color: #0000ff"&gt;for</span> (<span style="color: #0000ff"&gt;int</span> i = <span style="color: #800080"&gt;0</span>; i < flaggedTokens.Length; i++<span style="color: #000000"&gt;) { </span><span style="color: #0000ff"&gt;var</span> correction =<span style="color: #000000"&gt; flaggedTokens[i]; </span><span style="color: #0000ff"&gt;var</span> suggestion = correction[<span style="color: #800000"&gt;"</span><span style="color: #800000"&gt;suggestions</span><span style="color: #800000"&gt;"</span>][<span style="color: #800080"&gt;0</span><span style="color: #000000"&gt;]; </span><span style="color: #0000ff"&gt;if</span> (suggestion[<span style="color: #800000"&gt;"</span><span style="color: #800000"&gt;score</span><span style="color: #800000"&gt;"</span>] > (<span style="color: #0000ff"&gt;decimal</span>)<span style="color: #800080"&gt;0.7</span><span style="color: #000000"&gt;) corrections[(</span><span style="color: #0000ff"&gt;int</span>)correction[<span style="color: #800000"&gt;"</span><span style="color: #800000"&gt;offset</span><span style="color: #800000"&gt;"</span>]] = <span style="color: #0000ff"&gt;new</span> <span style="color: #0000ff"&gt;string</span><span style="color: #000000"&gt;[] { correction[</span><span style="color: #800000"&gt;"</span><span style="color: #800000"&gt;token</span><span style="color: #800000"&gt;"</span>],suggestion[<span style="color: #800000"&gt;"</span><span style="color: #800000"&gt;suggestion</span><span style="color: #800000"&gt;"</span><span style="color: #000000"&gt;] }; } </span><span style="color: #0000ff"&gt;foreach</span> (<span style="color: #0000ff"&gt;int</span> i <span style="color: #0000ff"&gt;in</span><span style="color: #000000"&gt; corrections.Keys) { </span><span style="color: #0000ff"&gt;var</span> oldtext = corrections[i][<span style="color: #800080"&gt;0</span><span style="color: #000000"&gt;]; </span><span style="color: #0000ff"&gt;var</span> newtext = corrections[i][<span style="color: #800080"&gt;1</span><span style="color: #000000"&gt;]; </span><span style="color: #0000ff"&gt;if</span> (text.Substring(i,oldtext.Length).All(<span style="color: #0000ff"&gt;char</span>.IsUpper)) newtext =<span style="color: #000000"&gt; newtext.ToUpper(); </span><span style="color: #0000ff"&gt;else</span> <span style="color: #0000ff"&gt;if</span> (<span style="color: #0000ff"&gt;char</span>.IsUpper(text[i])) newtext = newtext[<span style="color: #800080"&gt;0</span>].ToString().ToUpper() + newtext.Substring(<span style="color: #800080"&gt;1</span><span style="color: #000000"&gt;); text </span>= text.Substring(<span style="color: #800080"&gt;0</span>,i) + newtext + text.Substring(i +<span style="color: #000000"&gt; oldtext.Length); } </span><span style="color: #0000ff"&gt;return</span><span style="color: #000000"&gt; text;

}

相关文章

Microsoft云包括了Azure、PowerPlatform、Microsoft365、Git...
《WindowsAzurePlatform系列文章目录》 我们在使用AzureAPI...
微软免费使用一年的Azure虚拟机,默认提供了一个64G的磁盘,...
上篇请访问这里做一个能对标阿里云的前端APM工具(上)样本多...
一年一度的MicrosoftBuild终于来了,带来了非常非常多的新技...