大佬教程收集整理的这篇文章主要介绍了Azure AI 服务之文本翻译,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
有相关的技术栈。微软在 AI 领域自然也是投入了重注,并且以 Azure 认知服务的方式投入了市场:
title="Azure AI 服务之文本翻译" alt="Azure AI 服务之文本翻译" src="https://cn.js-code.com/res/2019/02-09/09/720a341692c86ffa14a15f7938223ccd.png" >
在程序中实现 AI 的功能了!
介绍 Azure 认识服务中 Language 分类中的文本翻译服务(Translator Text API title="Azure AI 服务之文本翻译" alt="Azure AI 服务之文本翻译" src="https://cn.js-code.com/res/2019/02-09/09/2157081cadcab846f9be38a3918c5c2f.png" >)。
title="Azure AI 服务之文本翻译" alt="Azure AI 服务之文本翻译" src="https://cn.js-code.com/res/2019/02-09/09/82845e914179ca92e7bb1c43df1e986f.png" >
。
。
0580@的语言列表:
</span><span style="color: #008000">//</span><span style="color: #008000"> 把返回的 xml 信息抽取到数组中</span>
response =<span style="color: #000000"> Webrequest.GetResponse();
</span><span style="color: #0000ff">using</span> (Stream stream =<span style="color: #000000"> response.GetResponseStream())
{
DataContractserializer dcs </span>= <span style="color: #0000ff">new</span> DataContractserializer(<span style="color: #0000ff">typeof</span>(List<<span style="color: #0000ff">String</span>><span style="color: #000000">));
List</span><<span style="color: #0000ff">String</span>> languagesForTranslate = (List<<span style="color: #0000ff">String</span>><span style="color: #000000">)dcs.ReadObject(stream);
languageCodes </span>=<span style="color: #000000"> languagesForTranslate.ToArray();
}
}
title="Azure AI 服务之文本翻译" alt="Azure AI 服务之文本翻译" src="https://cn.js-code.com/res/2019/02-09/09/0751918562b79f578e5a7bcc7c522ac4.png" >
虽然取到了可以翻译的语言列表,但是像图中的内容是无法显示给用户的,还需要把它们转换成对用户友好的名称,因此我们定义 GetLanguagenames 函数完成这个功能:
</span><span style="color: #008000">//</span><span style="color: #008000"> 把返回的 xml 信息抽取到数组中</span>
<span style="color: #0000ff">var</span> response =<span style="color: #000000"> request.GetResponse();
</span><span style="color: #0000ff">String</span><span style="color: #000000">[] languagenames;
</span><span style="color: #0000ff">using</span> (Stream stream =<span style="color: #000000"> response.GetResponseStream())
{
languagenames </span>= (<span style="color: #0000ff">String</span><span style="color: #000000">[])dcs.ReadObject(stream);
}
</span><span style="color: #008000">//</span><span style="color: #008000"> 把支持的语言列表及其友好名称保存到字典数据结构中,
</span><span style="color: #008000">//</span><span style="color: #008000"> 随后会把它们绑定给 combo box 控件进行显示</span>
<span style="color: #0000ff">for</span> (<span style="color: #0000ff">int</span> i = <span style="color: #800080">0</span>; i < languagenames.Length; i++<span style="color: #000000">)
{
languageCodesAndtitles.Add(languagenames[i],languageCodes[i]);
}
}
title="Azure AI 服务之文本翻译" alt="Azure AI 服务之文本翻译" src="https://cn.js-code.com/res/2019/02-09/09/b86419d76c52fa8e2a3608e76b1872cc.png" >
</span><span style="color: #008000">//</span><span style="color: #008000"> 设置默认的源语言和目标语言</span>
FromLanguageComboBox.SELEctedItem = <span style="color: #800000">"</span><span style="color: #800000">英语</span><span style="color: #800000">"</span><span style="color: #000000">;
ToLanguageComboBox.SELEctedItem </span>= <span style="color: #800000">"</span><span style="color: #800000">简体中文</span><span style="color: #800000">"</span><span style="color: #000000">;
}
title="Azure AI 服务之文本翻译" alt="Azure AI 服务之文本翻译" src="https://cn.js-code.com/res/2019/02-09/09/16e6dd7096eda7484761593716fdb16c.png" >
</span><span style="color: #008000">//</span><span style="color: #008000"> 如果要翻译的文本是英语,还可以进行拼写检查</span>
<span style="color: #0000ff">if</span> (fromLanguageCode == <span style="color: #800000">"</span><span style="color: #800000">en</span><span style="color: #800000">"</span><span style="color: #000000">)
{
textToTranslate </span>=<span style="color: #000000"> CorrectSpelling(textToTranslatE);
</span><span style="color: #008000">//</span><span style="color: #008000"> 把更新后的文本保存到 UI 控件上</span>
TextToTranslate.Text =<span style="color: #000000"> textToTranslate;
}
</span><span style="color: #008000">//</span><span style="color: #008000"> 处理文本为空和不需要翻译的情况</span>
<span style="color: #0000ff">if</span> (textToTranslate == <span style="color: #800000">""</span> || fromLanguageCode ==<span style="color: #000000"> toLanguageCodE)
{
TranslatedText.Text </span>=<span style="color: #000000"> textToTranslate;
</span><span style="color: #0000ff">return</span><span style="color: #000000">;
}
</span><span style="color: #008000">//</span><span style="color: #008000"> 通过 http 请求执行翻译任务</span>
<span style="color: #0000ff">String</span> uri = <span style="color: #0000ff">String</span>.Format(TEXT_TRANSLATION_API_ENDPOINT + <span style="color: #800000">"</span><span style="color: #800000">Translate?text=</span><span style="color: #800000">"</span> +<span style="color: #000000">
System.Web.httpUtility.UrlEncode(textToTranslatE) </span>+ <span style="color: #800000">"</span><span style="color: #800000">&from={0}&to={1}</span><span style="color: #800000">"</span><span style="color: #000000">,fromLanguageCode,toLanguageCodE);
</span><span style="color: #0000ff">var</span> translationWebrequest =<span style="color: #000000"> httpWebrequest.Create(uri);
translationWebrequest.Headers.Add(</span><span style="color: #800000">"</span><span style="color: #800000">Ocp-Apim-Subscription-Key</span><span style="color: #800000">"</span><span style="color: #000000">,TEXT_TRANSLATION_API_SUBSCRIPTION_KEY);
WebResponse response </span>= <span style="color: #0000ff">null</span><span style="color: #000000">;
response </span>=<span style="color: #000000"> translationWebrequest.GetResponse();
</span><span style="color: #008000">//</span><span style="color: #008000"> 把返回的翻译结果抽取到 UI 控件中</span>
Stream stream =<span style="color: #000000"> response.GetResponseStream();
StreamReader translatedStream </span>= <span style="color: #0000ff">new</span> StreamReader(stream,Encoding.GetEncoding(<span style="color: #800000">"</span><span style="color: #800000">utf-8</span><span style="color: #800000">"</span><span style="color: #000000">));
System.Xml.XmlDocument xmlResponse </span>= <span style="color: #0000ff">new</span><span style="color: #000000"> System.Xml.XmlDocument();
xmlResponse.LoadXml(translatedStream.ReadToEnd());
TranslatedText.Text </span>=<span style="color: #000000"> xmlResponse.InnerText;
}
check 服务进行翻译前的拼写检查。比如 TranslateButton_Click 函数中的:
</span><span style="color: #008000">//</span><span style="color: #008000"> 把文本内容放在请求的 body 中</span>
<span style="color: #0000ff">String</span> body = <span style="color: #800000">"</span><span style="color: #800000">text=</span><span style="color: #800000">"</span> +<span style="color: #000000"> System.Web.httpUtility.UrlEncode(text);
</span><span style="color: #0000ff">byte</span>[] data =<span style="color: #000000"> Encoding.UTF8.GetBytes(body);
spellcheckWebrequest.ContentLength </span>=<span style="color: #000000"> data.Length;
</span><span style="color: #0000ff">using</span> (<span style="color: #0000ff">var</span> requestStream =<span style="color: #000000"> spellcheckWebrequest.GetrequestStream())
requestStream.Write(data,</span><span style="color: #800080">0</span><span style="color: #000000">,data.Length);
httpWebResponse response </span>=<span style="color: #000000"> (httpWebResponsE)spellcheckWebrequest.GetResponse();
</span><span style="color: #008000">//</span><span style="color: #008000"> 从返回中取出 json 格式的拼写检查结果</span>
<span style="color: #0000ff">var</span> serializer = <span style="color: #0000ff">new</span><span style="color: #000000"> System.Web.Script.serialization.JavaScriptserializer();
</span><span style="color: #0000ff">var</span> responseStream =<span style="color: #000000"> response.GetResponseStream();
</span><span style="color: #0000ff">var</span> jsonString = <span style="color: #0000ff">new</span> StreamReader(responseStream,Encoding.GetEncoding(<span style="color: #800000">"</span><span style="color: #800000">utf-8</span><span style="color: #800000">"</span><span style="color: #000000">)).ReadToEnd();
</span><span style="color: #0000ff">dynamic</span> jsonResponse =<span style="color: #000000"> serializer.DeserializeObject(jsonString);
</span><span style="color: #0000ff">var</span> flaggedTokens = jsonResponse[<span style="color: #800000">"</span><span style="color: #800000">flaggedTokens</span><span style="color: #800000">"</span><span style="color: #000000">];
</span><span style="color: #008000">//</span><span style="color: #008000"> 我们定义一个规则来应用拼写检查的结果,
</span><span style="color: #008000">//</span><span style="color: #008000"> 比如:当拼写检查的权值大于 0.7 时就用建议的值替换掉文本中的值。</span>
<span style="color: #0000ff">var</span> corrections = <span style="color: #0000ff">new</span> SortedDictionary<<span style="color: #0000ff">int</span>,<span style="color: #0000ff">String</span>[]>(Comparer<<span style="color: #0000ff">int</span>>.Create((a,b) =><span style="color: #000000"> b.CompareTo(a)));
</span><span style="color: #0000ff">for</span> (<span style="color: #0000ff">int</span> i = <span style="color: #800080">0</span>; i < flaggedTokens.Length; i++<span style="color: #000000">)
{
</span><span style="color: #0000ff">var</span> correction =<span style="color: #000000"> flaggedTokens[i];
</span><span style="color: #0000ff">var</span> suggestion = correction[<span style="color: #800000">"</span><span style="color: #800000">suggestions</span><span style="color: #800000">"</span>][<span style="color: #800080">0</span><span style="color: #000000">];
</span><span style="color: #0000ff">if</span> (suggestion[<span style="color: #800000">"</span><span style="color: #800000">score</span><span style="color: #800000">"</span>] > (<span style="color: #0000ff">decimal</span>)<span style="color: #800080">0.7</span><span style="color: #000000">)
corrections[(</span><span style="color: #0000ff">int</span>)correction[<span style="color: #800000">"</span><span style="color: #800000">offset</span><span style="color: #800000">"</span>]] = <span style="color: #0000ff">new</span> <span style="color: #0000ff">String</span><span style="color: #000000">[]
{ correction[</span><span style="color: #800000">"</span><span style="color: #800000">token</span><span style="color: #800000">"</span>],suggestion[<span style="color: #800000">"</span><span style="color: #800000">suggestion</span><span style="color: #800000">"</span><span style="color: #000000">] };
}
</span><span style="color: #0000ff">foreach</span> (<span style="color: #0000ff">int</span> i <span style="color: #0000ff">in</span><span style="color: #000000"> corrections.Keys)
{
</span><span style="color: #0000ff">var</span> oldtext = corrections[i][<span style="color: #800080">0</span><span style="color: #000000">];
</span><span style="color: #0000ff">var</span> newtext = corrections[i][<span style="color: #800080">1</span><span style="color: #000000">];
</span><span style="color: #0000ff">if</span> (text.SubString(i,oldtext.Length).All(<span style="color: #0000ff">char</span>.IsUpper)) newtext =<span style="color: #000000"> newtext.ToUpper();
</span><span style="color: #0000ff">else</span> <span style="color: #0000ff">if</span> (<span style="color: #0000ff">char</span>.IsUpper(text[i])) newtext = newtext[<span style="color: #800080">0</span>].ToString().ToUpper() + newtext.SubString(<span style="color: #800080">1</span><span style="color: #000000">);
text </span>= text.SubString(<span style="color: #800080">0</span>,i) + newtext + text.SubString(i +<span style="color: #000000"> oldtext.Length);
}
</span><span style="color: #0000ff">return</span><span style="color: #000000"> text;
}
可以看出,拼写检查只是给出一些建议,具体怎么做还是由用户决定的。比如上面的代码中当拼写检查的权值大于 0.7 时就用建议的值替换掉文本中的值。下面我们来测试一下拼写检查的逻辑,运行程序,并输入 "Helo world!" 进行翻译:
title="Azure AI 服务之文本翻译" alt="Azure AI 服务之文本翻译" src="https://cn.js-code.com/res/2019/02-09/09/182e32fa511adffeb2a23eb57f3b2c6b.png" >
title="Azure AI 服务之文本翻译" alt="Azure AI 服务之文本翻译" src="https://cn.js-code.com/res/2019/02-09/09/8e4eb4b31084513338b0085f0f4799ee.png" >
title="Azure AI 服务之文本翻译" alt="Azure AI 服务之文本翻译" src="https://cn.js-code.com/res/2019/02-09/09/6032c6def46957e532111c421f71eedf.png" >
考:https://docs.microsoft.com/en-us/azure/cognitive-services/translator/tutorial-wpf-translation-csharp" target="_blank">Microsoft Translator WPF application in C#
以上是大佬教程为你收集整理的Azure AI 服务之文本翻译全部内容,希望文章能够帮你解决Azure AI 服务之文本翻译所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。