C# 10分鐘完成百度翻譯(機器翻譯)——入門篇

學習中的苦與樂發表於2022-01-10

我們之前基於百度ai開發平臺實現了人臉識別 [1]、文字識別 [2]、語音識別 [3] 與合成的入門和進階,今天我們來實現百度翻譯的實現。

隨著“一帶一路”政策的開展,各種專案迎接而來,語言不通就成為了痛點。

作為開發人員,相信大家對於翻譯不陌生吧,百度翻譯,有道詞典、谷歌翻譯等等或多或少都用過(漢-英,漢-日,漢-俄等等)。

我們現在就基於百度Ai開放平臺進行機器翻譯,demo使用的是C#控制檯應用程式,後續有需要的可以嫁接到指定專案中使用。

1、註冊百度賬號api,建立自己的Api應用

註冊地址: https://login.bce.baidu.com/

註冊登入之後,在“產品服務” 選單下找到機器翻譯 ,點選進入,如下圖:

 

注意,這裡我們需要先進行 領取免費資源 ,開發完成後根據後期需求決定是否進行付費操作,如下圖所示:

 

 

 

 領取後,建立我們的Api應用,如下圖(主要是Api Key和Secret Key):

 

 

 

 

2、建立vs控制檯應用程式

建立VS控制檯應用程式,命名為TranslateProject。

.NET Framework/.NET Core的都可以,甚至於Web應用也行,因為這是Api操作。

 

3、編寫程式並除錯

post請求工具類

建立一個http請求介面幫助類(WebRequest方式API請求方式(Post/Get)),命名為 HttpTool(自定義命名),大家可以在網上找一個,或者用下面的:

 /// <summary>
        /// post請求方式
        /// </summary>
        /// <param name="url">請求路徑</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:"))
                {
                    //要呼叫https的API介面,一定要加這句
                    ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
                }

                Encoding encoding = Encoding.UTF8;  //轉譯編碼
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);//建立
                request.Method = "POST";   //post請求的一些標準引數配置
                request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
                request.ContentType = ContentType;

                //自定義頭部內容
                if (!string.IsNullOrEmpty(token))
                {
                    request.Headers.Add(HttpRequestHeader.Authorization, token);  //新增token
                }

                byte[] buffer = encoding.GetBytes(parms);  //譯編傳入的值格式化為可識別
                request.ContentLength = buffer.Length;  //post傳值引數標配
                request.GetRequestStream().Write(buffer, 0, buffer.Length);
                HttpWebResponse response = (HttpWebResponse)request.GetResponse(); //嘗試獲得要請求的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 [4]

直接看文件就可以了,我這裡把程式碼展示一下,大家拷貝一下就可以執行。

如下程式碼和展示:

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
    {
        // 百度雲中開通對應服務應用的 API Key 建議開通應用的時候多選服務(百度雲應用的AK)
        private static String clientId = "qNldYXXtIr2pKBQsv242369Y";
        // 百度雲中開通對應服務應用的 Secret Key(百度雲應用的SK)
        private static String clientSecret = "L6gemOD3pM2PmafyQUBnXpCGEemk18mR";
        static void Main(string[] args)
        {
            try
            {
                #region 文字翻譯-通用版

                //獲取Token:詳細見 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("未知錯誤:獲取Token失敗");
                        Console.ReadKey();
                        return;
                    }

                    string URL = "https://aip.baidubce.com/rpc/2.0/mt/texttrans/v1?access_token="+ TokenEntity.access_token;
                    string q = "文字翻譯是百度翻譯依託領先的自然語言處理技術推出的線上文字翻譯服務,可支援中、英、日、韓等200+語言互譯,100+語種自動檢測。";
                    string parms = "{ \"q\":\"" + q + "\",\"from\":\"zh\",\"to\":\"en\"}"; //from:翻譯源語言     to:翻譯目標語言     q:請求翻譯內容

                    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);
            }
        }

        //呼叫getAccessToken()獲取的 access_token建議根據expires_in 時間 設定快取
        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 [5]

詞典版和通用版大體相同,大家拷貝上面的更換一下請求的URL即可。

文字翻譯-圖片翻譯

圖片翻譯API文件:https://cloud.baidu.com/doc/MT/s/mki483xpu [6]

這裡就不貼程式碼了,大家點選api文件參照試試,自己做出來樂趣更高哦。

總結

看到這裡就介紹了,是不是感覺很簡單,就註冊一個百度雲平臺的賬號,建立相關的api key應用,

然後對照開發文件進行編寫測試,放在專案中很容易移植,快去試試吧。

參考文獻

[1].C# 10分鐘完成百度人臉識別——入門篇

[2].C# 10分鐘完成百度圖片提取文字(文字識別)——入門篇

[3].C# 10分鐘完成百度語音技術(語音識別與合成)——入門篇

[4].通用版Api文件

[5].詞典版Api文件

[6].圖片翻譯

 

歡迎關注訂閱微信公眾號【熊澤有話說】,更多好玩易學知識等你來取
作者:熊澤-學習中的苦與樂
公眾號:熊澤有話說

QQ群:711838388
出處: https://www.cnblogs.com/xiongze520/p/15783801.html
您可以隨意轉載、摘錄,但請在文章內註明作者和原文連結。  

 

 

相關文章