溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C#基于百度AI如何實(shí)現(xiàn)機(jī)器翻譯功能

發(fā)布時(shí)間:2022-01-12 14:10:36 來源:億速云 閱讀:216 作者:柒染 欄目:開發(fā)技術(shù)

C#基于百度AI如何實(shí)現(xiàn)機(jī)器翻譯功能,針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡(jiǎn)單易行的方法。

    隨著“一帶一路”政策的開展,各種項(xiàng)目迎接而來,語言不通就成為了痛點(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)入,如下圖:

    C#基于百度AI如何實(shí)現(xiàn)機(jī)器翻譯功能

    注意,這里我們需要先進(jìn)行 領(lǐng)取免費(fèi)資源 ,開發(fā)完成后根據(jù)后期需求決定是否進(jìn)行付費(fèi)操作,如下圖所示:

    C#基于百度AI如何實(shí)現(xiàn)機(jī)器翻譯功能

    C#基于百度AI如何實(shí)現(xiàn)機(jī)器翻譯功能

    領(lǐng)取后,創(chuàng)建我們的Api應(yīng)用,如下圖(主要是Api Key和Secret Key):

    C#基于百度AI如何實(shí)現(xiàn)機(jī)器翻譯功能

    C#基于百度AI如何實(shí)現(xiàn)機(jī)器翻譯功能

    C#基于百度AI如何實(shí)現(xiàn)機(jī)器翻譯功能

    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操作。

    C#基于百度AI如何實(shí)現(xiàn)機(jī)器翻譯功能

    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)先的自然語言處理技術(shù)推出的在線文本翻譯服務(wù),可支持中、英、日、韓等200+語言互譯,100+語種自動(dòng)檢測(cè)。";
                        string parms = "{ \"q\":\"" + q + "\",\"from\":\"zh\",\"to\":\"en\"}"; //from:翻譯源語言     to:翻譯目標(biāo)語言     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("翻譯失?。?quot; + 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; }
    
            }
        }
    }

    C#基于百度AI如何實(shí)現(xiàn)機(jī)器翻譯功能

    關(guān)于C#基于百度AI如何實(shí)現(xiàn)機(jī)器翻譯功能問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    ai
    AI