1. 程式人生 > >OSMeteorTranslationAPI(百度,有道)對比

OSMeteorTranslationAPI(百度,有道)對比

今天做翻譯的時候分別用百度和有道的api做了對比

首先宣告一下,百度和有道的APIKEY需要自己去申請

介面:

image

程式碼:

private void btn_translation_Click(object sender, EventArgs e)
        {
            //string baiduKey = "aMkc5Tcs2sGoTM56XGL1FlQc";
            //string bnaiduSecretKey = "Uu8669USMPROf5YsNVGW3logz19hNrV9";
            // string rs = BaiduTans_Get(baiduKey, this.richTxt_src.Text, "zh", "en");
if(!NetworkIsCoon()) { this.label2.Text="Not connection NetWork!!"; return; } if (this.checkBox_isbilingual.Checked) { this.richTextBox1.Text = baiduTransSrcAndDet("zh", "en"); }
else{ this.richTextBox1.Text = baiduTrans("zh","en"); } } private void btn_translation_en_zh_Click(object sender, EventArgs e) { if (!NetworkIsCoon()) { this.label2.Text = "Not connection NetWork!!";
return; } if (this.checkBox_isbilingual.Checked) { this.richTextBox1.Text = baiduTransSrcAndDet("en", "zh"); }else this.richTextBox1.Text = baiduTrans("en", "zh"); } public string baiduTrans(string Srcstr, string Tostr) { string baiduKey = "百度KEY"; string bnaiduSecretKey = "百度KEY"; string rs = BaiduTans_Get(baiduKey, this.richTxt_src.Text, Srcstr, Tostr); return gebaidutrs(rs); } public string baiduTransSrcAndDet(string Srcstr, string Tostr) { string baiduKey = "百度KEY"; string bnaiduSecretKey = "百度KEY"; string rs = BaiduTans_Get(baiduKey, this.richTxt_src.Text, Srcstr, Tostr); return gebaidutrsSrcAndDet(rs); } private string BaiduTans_Get(string client_id, string q, string from, string to) { string ApiUrl = @"http://openapi.baidu.com/public/2.0/bmt/translate?client_id={0}&q={1}&from={2}&to={3}"; string url = string.Format(ApiUrl, client_id, q, from, to); WebClient wc = new WebClient(); wc.Encoding = System.Text.Encoding.UTF8;//定義物件語言 //return UnicodeConvert.ConvertUnicodeStringToChinese(wc.DownloadString(url)); return wc.DownloadString(url); } public string gebaidutrs(string strjson) { int langth = strjson.Length; int index3 = 38; string jsonText = strjson.Substring(index3, langth - index3 - 1); JavaScriptSerializer jser = new JavaScriptSerializer(); List<baiduJson> persons = jser.Deserialize<List<baiduJson>>(jsonText); string rs = ""; foreach (baiduJson item in persons) { rs += item.dst + "\n"; } return rs; } public string gebaidutrsSrcAndDet(string strjson) { int langth = strjson.Length; int index3 = 38; string jsonText = strjson.Substring(index3, langth - index3 - 1); JavaScriptSerializer jser = new JavaScriptSerializer(); List<baiduJson> persons = jser.Deserialize<List<baiduJson>>(jsonText); string rs = ""; foreach (baiduJson item in persons) { rs += item.dst + " [" + item.src + "] " + "\n"; //rs += item.src + "\n"; } return rs; } public class baiduJson { public string src { get; set; } public string dst { get; set; } } private void btn_youdao_Click(object sender, EventArgs e) { if (!NetworkIsCoon()) { this.label2.Text = "Not connection NetWork!!"; return; } string youdaoApiKey = "有道KEY"; string keyfrom = "O有道KEY"; string srcTxt = this.richTxt_src.Text; string rs= youdaoTans_Get(keyfrom, youdaoApiKey, srcTxt); this.richTextBox1.Text = getyoudaoStrs(rs); } private string youdaoTans_Get(string keyfrom, string youdaoApiKey, string srcTxt) { string ApiUrlxml = @"http://fanyi.youdao.com/openapi.do?keyfrom=" + keyfrom + "&key=" + youdaoApiKey + "&type=data&doctype=xml&version=1.1&q=" + srcTxt + ""; string ApiUrljson = @"http://fanyi.youdao.com/openapi.do?keyfrom="+keyfrom+"&key="+youdaoApiKey+"&type=data&doctype=json&version=1.1&q="+srcTxt+""; string ApiUrljsonp=@"http://fanyi.youdao.com/openapi.do?keyfrom=OSMeteor&key=1102266192&type=data&doctype=jsonp&callback=show&version=1.1&q=API"; WebClient wc = new WebClient(); wc.Encoding = System.Text.Encoding.UTF8;//定義物件語言 string rs = wc.DownloadString(ApiUrljson); //Byte[] pageData = wc.DownloadData(ApiUrljson) // rs=System.Text.Encoding.UTF8.GetBytes(pageData) //wc.DownloadStringAsync(ApiUrljson); //return UnicodeConvert.ConvertUnicodeStringToChinese(wc.DownloadString(ApiUrlxml)); return rs; //return wc.DownloadString(ApiUrljson); } public string gebaidutrs2(string strjson) { int index = strjson.IndexOf("\",\"dst\":\""); string srcTxt = this.richTxt_src.Text; int index2 = 47 + srcTxt.Length + 9; int langth = strjson.Length; //string rs = strjson.Substring(index2, langth - index2-4); string rs = strjson.Substring(index2, langth - index2-4); return rs; //return strjson; } public string getyoudaoStrs(string strjson){ string srcTxt = this.richTxt_src.Text; int index2 = 17; int langth = strjson.Length - srcTxt.Length - 27; string str=",\"query\":\""; int detlength = strjson.IndexOf(str)-3; //未處理失敗的狀況 //string rs = strjson.Substring(index2, langth - index2 - 1); string rs = strjson.Substring(index2, detlength-17); ////string rs2= rs.Replace("\",\"", "\078"); //string strrs3 = ""; //string[] strlist = Regex.Split(rs, "\",\"", RegexOptions.IgnoreCase); //foreach (string item in strlist) //{ // strrs3 += item+"\n"; //} ////StringBuilder rss = new StringBuilder(); //// rs.Replace //return strrs3; return rs; //return strjson; } public class youdaoJson { public string translation { get; set; } public string query { get; set; } public string errorCode { get; set; } }

結論:

在使用百度API的時候最好不要使用自動 ,比如百度APi:在英文翻譯成中文的時候自動翻譯的時候會這樣

image

所以還是別偷懶:儘量別用aoto。

但是對有道API處理的時候:這個理對中文翻譯成英文的是換行沒有出來很好,

image

我們在看看有道怎麼處理換行的 ,這裡是有道返回的結果

image

但是我用有道線上翻譯的時候又是正常的,可能我不瞭解內部轉換演算法吧

image

希望有這方面研究的同學看到之後能給予指點。。。

也希望百度和有道提供更好的翻譯API。。。