1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 调用百度翻译api实现中英文翻译

调用百度翻译api实现中英文翻译

时间:2018-06-13 21:03:34

相关推荐

调用百度翻译api实现中英文翻译

需要首先申请自己的开发者id和证书,我申请的是通用翻译,可以参考这个申请百度翻译

直接上代码

*** 百度翻译引擎java示例代码*/public class BaiduTranslateDemo{private static final String UTF8 = "utf-8";//申请者开发者id,实际使用时请修改成开发者自己的appidprivate static final String appId = "自己的appid";//申请成功后的证书token,实际使用时请修改成开发者自己的tokenprivate static final String token = "自己的token";private static final String url = "http://api./api/trans/vip/translate";//随机数,用于生成md5值,开发者使用时请激活下边第四行代码private static final Random random = new Random();public String translate(String q, String from, String to) throws Exception{//用于md5加密int salt = random.nextInt(10000);// 对appId+源文+随机数+token计算md5值StringBuilder md5String = new StringBuilder();md5String.append(appId).append(q).append(salt).append(token);String md5 = DigestUtils.md5Hex(md5String.toString());//使用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");}System.out.println(result.toString());//转化为json对象,注:Json解析的jar包可选其它JSONObject resultJson = new JSONObject(result.toString());//开发者自行处理错误,本示例失败返回为nulltry {String error_code = resultJson.getString("error_code");if (error_code != null) {System.out.println("出错代码:" + error_code);System.out.println("出错信息:" + resultJson.getString("error_msg"));return null;}} catch (Exception e) {}//获取返回翻译结果JSONArray array = (JSONArray) resultJson.get("trans_result");JSONObject dst = (JSONObject) array.get(0);String text = dst.getString("dst");text = URLDecoder.decode(text, UTF8);return text;}/*** 实际抛出异常由开发者自己处理 中文翻译英文* @param q* @return* @throws Exception*/public String translateZhToEn(String q) throws Exception{String result = null;try {result = translate(q, "zh", "en");} catch (Exception e) {e.printStackTrace();}return result;}/*** 实际抛出异常由开发者自己处理 英文翻译中文* @param q* @return* @throws Exception*/public String translateEnToZh(String q) throws Exception{String result = null;try {result = this.translate(q, "en", "zh");} catch (Exception e) {e.printStackTrace();}return result;}public static void main(String[] args) {BaiduTranslateDemo baiduTranslateDemo = new BaiduTranslateDemo();String result="";long start=System.currentTimeMillis();try {result=baiduTranslateDemo.translateZhToEn("开放地摊经济,本来初衷是为了帮助一些小型个体户和店家。但是不料这几天网络的发酵,让摆地摊成为一种全民的狂欢,最近有网友在街上,看到很多上市公司的CEO,都出来摆地摊卖自家的产品了。");} catch (Exception e) {e.printStackTrace();}long end=System.currentTimeMillis();System.out.println("耗时:"+(end-start)/1000+"秒");System.out.println("翻译结果:"+result);}}

package guojihua;import java.io.*;/*** 直接运行main方法即可输出翻译结果*/public class Main {public static void main(String[] args) throws Exception {BaiduTranslateDemo baiduTranslateDemo = new BaiduTranslateDemo();// translateZhToEn(baiduTranslateDemo);// translateEnToZh(baiduTranslateDemo);translateTxtInfo(baiduTranslateDemo);}/*** 中文翻译为英文*/public static void translateZhToEn(BaiduTranslateDemo baiduTranslateDemo) {String source = "今天天气真不错";String result;try {result = baiduTranslateDemo.translateZhToEn(source);if (result == null) {System.out.println("翻译出错");return;}System.out.println(source + ":" + result);} catch (Exception e) {e.printStackTrace();}}/*** 英文翻译为中文*/public static void translateEnToZh(BaiduTranslateDemo baiduTranslateDemo) {String source = "it's a nice day today";String result;try {result = baiduTranslateDemo.translateEnToZh(source);if (result == null) {System.out.println("翻译出错。");return;}System.out.println(source + ":" + result);} catch (Exception e) {e.printStackTrace();}}/*** 读取txt文件内容翻译为中文*/public static void translateTxtInfo(BaiduTranslateDemo baiduTranslateDemo) {String sorceFilePath = "C:\\Users\\Administrator\\Desktop\\中文1.txt";//输出结果文件String resultFilePath = "C:\\Users\\Administrator\\Desktop\\英文.txt";// 构建指定文件File resultFile = new File(resultFilePath);FileReader fr = null;FileWriter fw = null;BufferedWriter bw = null;BufferedReader br = null;OutputStream out = null;String result;String line = "";try {// 根据文件创建文件的输入流fr = new FileReader(sorceFilePath);br = new BufferedReader(new InputStreamReader(new FileInputStream(new File(sorceFilePath)),"UTF-8"));fw = new FileWriter(new File(resultFilePath));// 写入中文字符时会出现乱码bw = new BufferedWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(resultFilePath)), "UTF-8")));// 根据文件创建文件的输出流out = new FileOutputStream(resultFile);// 创建字节数组byte[] data = new byte[1024];StringBuffer resultBuffer=new StringBuffer();// 读取内容,放到字节数组里面while ((line = br.readLine()) != null) {String message = line.trim();System.out.println(message);// 英文翻译为中文if(message.trim()!=null&& !message.trim().equals("")) {if(message.trim().indexOf("Answer")>-1) {resultBuffer.append(message+"\t\n");}else {result = baiduTranslateDemo.translateZhToEn(message.trim());System.out.println(result);resultBuffer.append(message+"("+result+")"+"\t\n");}}}// 把内容转换成字节数组byte[] resultdata = resultBuffer.toString().getBytes();// 向文件写入内容out.write(resultdata);} catch (Exception e) {e.printStackTrace();} finally {try {// 关闭输入流br.close();fr.close();} catch (Exception e) {e.printStackTrace();}}}}

普通版的话,读取速率很慢,多行翻译很大概率会报错,但是没有字数限制;

如果翻译文件的话,还是申请高级版的,一天200万字数限制,超过会收费。

通用翻译API接入文档

https://fanyi-/doc/21

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。