文章图片标题

在线应用-调用百度翻译引擎

分类:企业级Java 作者:阳光倾城 评论:0 点击: 533 次 日期:2016-07-08

百度翻译引擎目前免费开放了,支持27中语言的互译,足够各领域使用了,这对于有语言处理需求的应用来说省掉了不少麻烦,可以专注于专业的方向了。话不多说,如何调用百度翻译引擎呢?下面就是为有达网机器人实现的翻译模块,纯Java实现,百度api使用RESTFUL风格,调用过程简洁。对于想搞微信应用、智能客服或网站建设的小白朋友或许有些帮助(大神忽略^_^)。

package com.tomrrow.baidu;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import org.apache.commons.codec.digest.DigestUtils;
import org.apache.http.Consts;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONObject;

/**
* 百度翻译引擎调用
*
*/
public class BaiduTranslate{
    private static final String UTF8 = "utf-8";
    //申请者开发者id,实际使用时请修改成开发者自己的appid
    private static final String appId = "20160619234234";

    //申请成功后的证书token,实际使用时请修改成开发者自己的token
    private static final String token = "rIyTCTesswefewfewf";

    private static final String url = "http://api.fanyi.baidu.com/api/trans/vip/translate";

    //随机数,用于生成md5值,开发者使用时请激活下边第四行代码
    private static final Random random = new Random();
    private static String translate(String q, String from, String to) throws Exception{
        //用于md5加密
        int salt = random.nextInt(10000);
        //本演示使用指定的随机数为1435660288
        //int salt = 1435660288;
        // 对appId+源文+随机数+token计算md5值
        StringBuilder md5String = new StringBuilder();
        md5String.append(appId).append(q).append(salt).append(token);
        String md5 = DigestUtils.md5Hex(md5String.toString());
        md5String = null;

        //使用Post方式,组装参数
        HttpPost httpost = new HttpPost(url);
        List<NameValuePair> nvps = new ArrayList<NameValuePair>(); 
        nvps.add(new BasicNameValuePair("q", q)); 
           nvps.add(new BasicNameValuePair("from", from)); 
           nvps.add(new BasicNameValuePair("to", to)); 
           nvps.add(new BasicNameValuePair("appid", appId)); 
           nvps.add(new BasicNameValuePair("salt", String.valueOf(salt))); 
           nvps.add(new BasicNameValuePair("sign", md5)); 
        httpost.setEntity(new UrlEncodedFormEntity(nvps, Consts.UTF_8)); 

        //创建httpclient链接,并执行
        CloseableHttpClient httpclient = HttpClients.createDefault();
        CloseableHttpResponse response = httpclient.execute(httpost);
        //对于返回实体进行解析
        HttpEntity entity = response.getEntity();
        InputStream returnStream = entity.getContent();
        BufferedReader reader = new BufferedReader(
                new InputStreamReader(returnStream, UTF8));
        StringBuilder result = new StringBuilder();
        String str = null;
        while ((str = reader.readLine()) != null) {
            result.append(str).append("\n");
        }
        //转化为json对象,注:Json解析的jar包可选其它
        JSONObject resultJson = new JSONObject(result.toString());

        //开发者自行处理错误,本示例失败返回为null
        String error_code = null;
        try {
            error_code = resultJson.getString("error_code");
            if (error_code != null) {
                //return null;
                throw new RuntimeException("出错代码:" + error_code + " 出错信息:" + resultJson.getString("error_msg"));
            }
        } catch (Exception e) {}
        finally{
            error_code = null;
        }
        //获取返回翻译结果
        JSONArray array = (JSONArray) resultJson.get("trans_result");
        JSONObject dst = (JSONObject) array.get(0);
        String text = dst.getString("dst");
        text = URLDecoder.decode(text, UTF8);
        dst = null;
        array = null;
        return text;
    }
    /**
     * 调用百度翻译服务(将待翻译语料从源语言语种翻译成目标语言语种)
     * @param q 待翻译语料
     * @param from 源语言语种
     * @param to 目标语言语种
     * @return
     * @throws Exception
     */
    public static String  translateToTarget(String q, String from, String to) throws RuntimeException{
        String result = null;
        try {
            result = translate(q, from, to);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return result;
    }
    /**
     * 调用百度翻译服务(将待翻译语料从源语言语种翻译成目标语言语种)
     * @param q 待翻译语料
     * @param toName 目标语言语种
     * @return
     * @throws Exception
     */
    public static String  translateToTarget(String q, String toName) throws RuntimeException{
        String result = null;
        try {
            result = translate(q, "auto", getTransTagert(toName));
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return result;
    }
    private static String getTransTagert(String toName){
        String[][] lans = {{"zh","中文","汉语","中国话","方块字","国语"},{"en","英语","英文","美语","美式英语"},{"yue","粤语","广东话"},{"wyw","文言文"},{"jp","日语","日本话","日文"},
                {"kor","韩语","韩文","韩国话"},{"fra","法语","法兰西语","法国话","法文"},{"spa","西班牙语"},{"th","泰语","泰国语"},{"ara","阿拉伯语","阿拉伯文"},{"ru","俄语","俄文","俄国话"},
                {"pt","葡萄牙语","葡萄牙文"},{"de","德语","德文"},{"it","意大利语","意大利文"},{"el","希腊语","希腊文"},{"nl","荷兰语","荷兰文"},{"pl","波兰语","波兰文"},
                {"bul","保加利亚语"},{"est","爱沙尼亚语"},{"dan","丹麦语"},{"fin","芬兰语"},{"cs","捷克语"},{"rom","罗马尼亚语"},{"slo","斯洛文尼亚语"},{"swe","瑞典语"},
                {"hu","匈牙利语"},{"cht","繁体中文","繁体汉字"}};
        String temp = "zh";
        for (int x = 0; x < lans.length; x++){
            for (int y = 0; y < lans[x].length; y++){
                if (lans[x][y].indexOf(toName) == 0){
                    temp = lans[x][0];
                    break;
                }
            }
        }
        return temp;
    }

public static void main(String[] args) throws Exception {
        String source = "学而时习之";
        String result = BaiduTranslate.translateToTarget(source, "auto", "en");
        if(result == null){
            System.out.println("翻译出错,参考百度错误代码和说明。");
            return;
        }
        System.out.println(source + ":" + result);
    }

}




声明: 除非注明,本文属( 阳光倾城 )原创,转载请保留链接: http://www.tomrrow.com/archives-7484.html