C#基于百度AI實(shí)現(xiàn)機(jī)器翻譯功能
隨著“一帶一路”政策的開展,各種項(xiàng)目迎接而來,語(yǔ)言不通就成為了痛點(diǎn)。
作為開發(fā)人員,相信大家對(duì)于翻譯不陌生吧,百度翻譯,有道詞典、谷歌翻譯等等或多或少都用過(漢-英,漢-日,漢-俄等等)。
我們現(xiàn)在就基于百度Ai開放平臺(tái)進(jìn)行機(jī)器翻譯,demo使用的是C#控制臺(tái)應(yīng)用程序,后續(xù)有需要的可以嫁接到指定項(xiàng)目中使用。
1、注冊(cè)百度賬號(hào)api,創(chuàng)建自己的Api應(yīng)用
注冊(cè)地址: https://login.bce.baidu.com/
注冊(cè)登錄之后,在“產(chǎn)品服務(wù)” 菜單下找到機(jī)器翻譯 ,點(diǎn)擊進(jìn)入,如下圖:
注意,這里我們需要先進(jìn)行 領(lǐng)取免費(fèi)資源 ,開發(fā)完成后根據(jù)后期需求決定是否進(jìn)行付費(fèi)操作,如下圖所示:
領(lǐng)取后,創(chuàng)建我們的Api應(yīng)用,如下圖(主要是Api Key和Secret Key):
2、創(chuàng)建vs控制臺(tái)應(yīng)用程序
創(chuàng)建VS控制臺(tái)應(yīng)用程序,命名為TranslateProject。
.NET Framework/.NET Core的都可以,甚至于Web應(yīng)用也行,因?yàn)檫@是Api操作。
3、編寫程序并調(diào)試
post請(qǐng)求工具類
創(chuàng)建一個(gè)http請(qǐng)求接口幫助類(WebRequest方式API請(qǐng)求方式(Post/Get)),命名為 HttpTool(自定義命名),大家可以在網(wǎng)上找一個(gè),或者用下面的:
/// <summary> /// post請(qǐng)求方式 /// </summary> /// <param name="url">請(qǐng)求路徑</param> /// <param name="parms">傳入的值,格式為:{city:"上海",city2:"重慶"}</param> /// <param name="token"></param> /// <param name="ContentType"></param> /// <returns></returns> public string HttpPost(string url, string parms, string token,string ContentType= "application/json") { string result = string.Empty; try { if (url.StartsWith("https:")) { //要調(diào)用https的API接口,一定要加這句 ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072; } Encoding encoding = Encoding.UTF8; //轉(zhuǎn)譯編碼 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);//創(chuàng)建 request.Method = "POST"; //post請(qǐng)求的一些標(biāo)準(zhǔn)參數(shù)配置 request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"; request.ContentType = ContentType; //自定義頭部?jī)?nèi)容 if (!string.IsNullOrEmpty(token)) { request.Headers.Add(HttpRequestHeader.Authorization, token); //添加token } byte[] buffer = encoding.GetBytes(parms); //譯編傳入的值格式化為可識(shí)別 request.ContentLength = buffer.Length; //post傳值參數(shù)標(biāo)配 request.GetRequestStream().Write(buffer, 0, buffer.Length); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); //嘗試獲得要請(qǐng)求的URL的返回消息 using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8)) { result = reader.ReadToEnd(); } } catch (Exception ex) { result = ""; } return result; }
文本翻譯-通用版
通用版API文檔:https://cloud.baidu.com/doc/MT/s/4kqryjku9
直接看文檔就可以了,我這里把代碼展示一下,大家拷貝一下就可以執(zhí)行。
如下代碼和展示:
using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Text; using System.Threading.Tasks; namespace TranslateProject { class Program { // 百度云中開通對(duì)應(yīng)服務(wù)應(yīng)用的 API Key 建議開通應(yīng)用的時(shí)候多選服務(wù)(百度云應(yīng)用的AK) private static String clientId = "qNldYXXtIr2pKBQsv242369Y"; // 百度云中開通對(duì)應(yīng)服務(wù)應(yīng)用的 Secret Key(百度云應(yīng)用的SK) private static String clientSecret = "L6gemOD3pM2PmafyQUBnXpCGEemk18mR"; static void Main(string[] args) { try { #region 文本翻譯-通用版 //獲取Token:詳細(xì)見 https://ai.baidu.com/ai-doc/REFERENCE/Ck3dwjhhu string TokenJson = getAccessToken(); if (!string.IsNullOrEmpty(TokenJson)) { AccessToken TokenEntity = JsonConvert.DeserializeObject<AccessToken>(TokenJson); if (!string.IsNullOrEmpty(TokenEntity.error)) { if (TokenEntity.error == "invalid_client" && TokenEntity.error_description == "unknown client id") Console.WriteLine("API Key不正確"); else if (TokenEntity.error == "invalid_client" && TokenEntity.error_description == "Client authentication failed") Console.WriteLine("Secret Key不正確"); else Console.WriteLine("未知錯(cuò)誤:獲取Token失敗"); Console.ReadKey(); return; } string URL = "https://aip.baidubce.com/rpc/2.0/mt/texttrans/v1?access_token="+ TokenEntity.access_token; string q = "文本翻譯是百度翻譯依托領(lǐng)先的自然語(yǔ)言處理技術(shù)推出的在線文本翻譯服務(wù),可支持中、英、日、韓等200+語(yǔ)言互譯,100+語(yǔ)種自動(dòng)檢測(cè)。"; string parms = "{ \"q\":\"" + q + "\",\"from\":\"zh\",\"to\":\"en\"}"; //from:翻譯源語(yǔ)言 to:翻譯目標(biāo)語(yǔ)言 q:請(qǐng)求翻譯內(nèi)容 HttpTool httppost = new HttpTool(); var strJson = httppost.HttpPost(URL, parms, "", "application/json;charset=utf-8"); Console.WriteLine(strJson); Console.ReadKey(); } #endregion } catch (Exception ex) { Console.WriteLine("翻譯失?。? + ex.Message); } } //調(diào)用getAccessToken()獲取的 access_token建議根據(jù)expires_in 時(shí)間 設(shè)置緩存 public static String getAccessToken() { try { String authHost = "https://aip.baidubce.com/oauth/2.0/token"; HttpClient client = new HttpClient(); List<KeyValuePair<String, String>> paraList = new List<KeyValuePair<string, string>>(); paraList.Add(new KeyValuePair<string, string>("grant_type", "client_credentials")); paraList.Add(new KeyValuePair<string, string>("client_id", clientId)); paraList.Add(new KeyValuePair<string, string>("client_secret", clientSecret)); HttpResponseMessage response = client.PostAsync(authHost, new FormUrlEncodedContent(paraList)).Result; String result = response.Content.ReadAsStringAsync().Result; return result; } catch (Exception ex) { return ""; } } public class AccessToken { public string refresh_token { get; set; } public int expires_in { get; set; } public string scope { get; set; } public string session_key { get; set; } public string access_token { get; set; } public string session_secret { get; set; } public string error { get; set; } public string error_description { get; set; } } } }
文本翻譯-詞典版
詞典版API文檔:https://cloud.baidu.com/doc/MT/s/nkqrzmbpc
詞典版和通用版大體相同,大家拷貝上面的更換一下請(qǐng)求的URL即可。
文本翻譯-圖片翻譯
圖片翻譯API文檔:https://cloud.baidu.com/doc/MT/s/mki483xpu
這里就不貼代碼了,大家點(diǎn)擊api文檔參照試試,自己做出來樂趣更高哦。
總結(jié)
看到這里就介紹了,是不是感覺很簡(jiǎn)單,就注冊(cè)一個(gè)百度云平臺(tái)的賬號(hào),創(chuàng)建相關(guān)的api key應(yīng)用,
然后對(duì)照開發(fā)文檔進(jìn)行編寫測(cè)試,放在項(xiàng)目中很容易移植,快去試試吧。
以上就是C#基于百度AI實(shí)現(xiàn)機(jī)器翻譯功能的詳細(xì)內(nèi)容,更多關(guān)于C#機(jī)器翻譯的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C# 中的 IReadOnlyDictionary 和 IReadOnlyLis
C# 中的IReadOnlyDictionary和IReadOnlyList是接口,用于表示只讀的字典和只讀的列表,這些接口提供了對(duì)集合的只讀訪問權(quán)限,即不允許對(duì)集合進(jìn)行修改操作,這篇文章主要介紹了C# 中的 IReadOnlyDictionary 和 IReadOnlyList實(shí)例詳解,需要的朋友可以參考下2024-03-03C#實(shí)現(xiàn)根據(jù)銀行卡卡號(hào)判斷銀行名
這篇文章主要介紹了C#實(shí)現(xiàn)根據(jù)銀行卡卡號(hào)判斷銀行名,是從其他網(wǎng)友的java程序改編而來,有需要的小伙伴可以參考下。2015-07-07WinForm實(shí)現(xiàn)讀取Resource中文件的方法
這篇文章主要介紹了WinForm實(shí)現(xiàn)讀取Resource中文件的方法,很實(shí)用的一個(gè)功能,需要的朋友可以參考下2014-08-08