Java调用百度翻译API和调用有道翻译API进行翻译

news2024/11/22 10:06:30

目录

界面编写

调用百度API

调用有道API

源代码


界面编写

我们首先需要设计出这个翻译程序的GUI界面,我们写一个类继承自JFrame类,用来展示程序的主窗口,设置好窗口的名称和大小,设置在关闭窗口时终止程序,为了界面的美观,我们将布局设置为流式布局,居中对齐。

接下来准备使用四个panel作为容器让整个界面分为四行。

首先第一行显示中文原文的label和输入框,以及一个翻译按钮。

第二行显示百度翻译label和一行用于显示百度翻译后的译文的文本显示框。

类似的,第三行显示有道翻译label和文本显示框。

最后一行显示相同部分的label和文本显示框。

最后在主函数上,在Swing事件调度线程上执行窗口的显示,这里为了方便,使用了一个lambda匿名函数。

运行程序看看显示的效果,可见美观性还是具有的,因为其实我们是经过多次测试确定下来窗口的大小和组件的长度,使得整个页面看起来比较整齐。

调用百度API

接下来我们需要调用翻译API实现功能。

首先使用百度账号登录百度翻译开发平台,百度翻译开放平台 (baidu.com),注册成为开发者。

然后在百度翻译开放平台 (baidu.com)开通通用翻译API服务。

选择开通标准版就行。

稍微写一下申请表格。

然后在管理控制台就可以看到调用API所需要的APP ID和密钥。

根据官方文档通用翻译API接入文档的教程,我们需要拼接出请求参数加密,这里可以借助百度写好的DEMO,下载Java版本的demo。

解压后将包com放到我们的项目源码目录下。

然后在项目中导入这个包。

然后通过传入APP ID和密钥调用API将中文翻译成英文。

我们给点击按钮添加一个监听事件,当按钮被点击时执行这个lambda匿名函数,在函数中将百度翻译的文本显示在文本框上。

运行程序测试一下百度翻译,这个返回的结果貌似不是我们想要的理想结果。

通过查阅官方文档知道返回的结果是一个JSON对象。

Java中并没有内置JSON的解析,如果要处理JSON必须要借助第三方库,我们这里可以简单的使用正则表达式来提取翻译结果。

再次运行程序,这个可以输出我们想要的翻译结果了。

调用有道API

同理,需要调用有道翻译API,我们需要进行类似的流程操作。

在有道智云 (youdao.com)注册成为开发者。

然后创建应用。

创建完应用后就可以查看到应用ID和应用密钥了。

同样下载有道写好的Java版本demo下来。

我们把有道的软件包放到项目中,和百度的软件包放在一起。

然后把pom.xml也放到项目目录下,点击加载maven项目,将软件包里面的TranslateDemo.java拉出来放到项目源代码目录下,重命名为YouDaoAPI.java,我们将修改这个程序。

首先添加YouDaoAPI的构造函数,为应用ID和应用密钥赋值。

然后将创建请求参数的函数修改为通过传入参数设置请求参数。

最后把主函数修改为对外的翻译接口,通过传入的原文和原语言与目标翻译语言调用创建请求参数函数,返回请求相应。

然后通过传入APP ID和密钥调用API将中文翻译成英文。

同样的,我们通过正则表达式来提取翻译结果。

运行程序,可见翻译成功。

源代码

TranslationDemo.java

import javax.swing.*;
import java.awt.*;
import java.io.UnsupportedEncodingException;
import java.security.NoSuchAlgorithmException;
import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import com.baidu.translate.demo.TransApi;

public class TranslationDemo extends JFrame {
    private JLabel inputLabel, baiduLabel, youdaoLabel, commonLabel;
    private JTextField inputText, baiduTranslation, youdaoTranslation, commonTextArea;
    private JButton translateButton;

    public TranslationDemo() {
        setTitle("中译英 Demo");
        setSize(500, 200);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new FlowLayout(1));
        inputLabel = new JLabel("中文原文:");
        inputText = new JTextField(33);
        translateButton = new JButton("翻译");
        JPanel panel1 = new JPanel();
        panel1.add(inputLabel);
        panel1.add(inputText);
        panel1.add(translateButton);
        add(panel1);
        baiduLabel = new JLabel("百度翻译:");
        baiduTranslation = new JTextField(40);
        baiduTranslation.setEditable(false);
        JPanel panel2 = new JPanel();
        panel2.add(baiduLabel);
        panel2.add(baiduTranslation);
        add(panel2);
        youdaoLabel = new JLabel("有道翻译:");
        youdaoTranslation = new JTextField(40);
        youdaoTranslation.setEditable(false);
        JPanel panel3 = new JPanel();
        panel3.add(youdaoLabel);
        panel3.add(youdaoTranslation);
        add(panel3);
        commonLabel = new JLabel("相同部分:");
        commonTextArea = new JTextField(40);
        commonTextArea.setEditable(false);
        JPanel panel4 = new JPanel();
        panel4.add(commonLabel);
        panel4.add(commonTextArea);
        add(panel4);
        translateButton.addActionListener(e -> {
            String inputText = this.inputText.getText();
            String outputBaidu, outputYouDao, same;
            try {
                outputBaidu = translateUsingBaidu(inputText);
                outputYouDao = translateUsingYoudao(inputText);
            } catch (UnsupportedEncodingException | NoSuchAlgorithmException ex) {
                throw new RuntimeException(ex);
            }
            Pattern pattern = Pattern.compile("\"dst\":\"(.*?)\"");
            Matcher matcher = pattern.matcher(outputBaidu);
            if (matcher.find())
                outputBaidu = matcher.group(1);
            baiduTranslation.setText(outputBaidu);
            pattern = Pattern.compile( "\"translation\":\\[\"(.*?)\"\\]");
            matcher = pattern.matcher(outputYouDao);
            if (matcher.find())
                outputYouDao = matcher.group(1);
            youdaoTranslation.setText(outputYouDao);
            commonTextArea.setText(findCommonPart(outputBaidu, outputYouDao));
        });
    }

    private String translateUsingBaidu(String text) throws UnsupportedEncodingException {    // 调用百度翻译API进行翻译
        TransApi api = new TransApi("", "");
        return api.getTransResult(text, "zh", "en");
    }


    private String translateUsingYoudao(String text) throws NoSuchAlgorithmException {    // 调用有道翻译API进行翻译
        YouDaoAPI api = new YouDaoAPI("", "");
        return api.getTransResult(text, "zh", "en");
    }

    private String findCommonPart(String text1, String text2) {    // 比较两个翻译结果,找出相同部分
        String[] baidu = text1.split("[ ,.]");
        String[] youdao = text2.split("[ ,.]");
        StringBuilder common = new StringBuilder();
        for (String a : baidu) {
            for (String b : youdao) {
                if (Objects.equals(a, b)) {
                    common.append(a).append(" ");
                }
            }
        }
        return common.toString();
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            TranslationDemo demo = new TranslationDemo();
            demo.setVisible(true);
        });
    }
}

YouDaoAPI.java

import com.youdao.aicloud.translate.utils.AuthV3Util;
import com.youdao.aicloud.translate.utils.HttpUtil;

import java.nio.charset.StandardCharsets;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Map;

/**
 * 网易有道智云翻译服务api调用demo
 * api接口: https://openapi.youdao.com/api
 */
public class YouDaoAPI {

    private static String APP_KEY = "";     // 您的应用ID
    private static String APP_SECRET = "";  // 您的应用密钥

    public YouDaoAPI(String appid, String securityKey) {
        APP_KEY = appid;
        APP_SECRET = securityKey;
    }

    public String getTransResult(String query, String from, String to) throws NoSuchAlgorithmException {
        // 添加请求参数
        Map<String, String[]> params = createRequestParams(query, from, to);
        // 添加鉴权相关参数
        AuthV3Util.addAuthParams(APP_KEY, APP_SECRET, params);
        // 请求api服务
        byte[] result = HttpUtil.doPost("https://openapi.youdao.com/api", null, params, "application/json");
        return new String(result, StandardCharsets.UTF_8);
    }

    private static Map<String, String[]> createRequestParams(String query, String from, String to) {
        return new HashMap<String, String[]>() {{
            put("q", new String[]{query});
            put("from", new String[]{from});
            put("to", new String[]{to});
        }};
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1306488.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【UE】在蓝图中修改材质实例的参数的两种方式

目录 方式一、通过“在材质上设置标量/向量参数值”节点实现 方式二、通过“设置标量/向量参数值”节点实现 方式一、通过“在材质上设置标量/向量参数值”节点实现 1. 在材质中设置了两个参数 2. 创建材质实例 3. 创建一个蓝图&#xff0c;对静态网格体赋予材质实例 在事件…

C++ Qt开发:RadioButton单选框分组组件

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍QRadioButton单选框组件以及与之交互的QButto…

数字人直播软件源码大比拼:哪种才更适合无人直播需求?

随着现代技术的不断发展&#xff0c;数字人直播软件源码越来越受到商家和短视频用户的关注。数字人直播软件通过虚拟形象和人工智能技术&#xff0c;让商家可以用数字人主播与消费者进行互动和沟通做到无人直播带货的方式&#xff0c;给人们带来了全新的娱乐体验。很多创业者也…

GeoTrust OV证书

当谈到网站安全性和可信度时&#xff0c;GeoTrust OV证书是一个备受推崇的选择。作为一家备受尊敬的数字证书颁发机构&#xff0c;GeoTrust以其卓越的品牌声誉和高质量的产品而闻名于世。GeoTrust OV证书提供了一系列的安全功能&#xff0c;同时还具有出色的性价比&#xff0c;…

数据中心到底是如何工作的?

数字时代的数据中心&#xff0c;就如同网络世界的心脏&#xff0c;它的鼓动关系到整个网络生态的运转。但这个复杂而庞大的数据枢纽背后隐藏着怎样的精密机制&#xff0c;是许多人颇感好奇的谜。 数字时代的数据中心&#xff0c;就如同网络世界的心脏&#xff0c;它的鼓动关系…

『C++成长记』拷贝构造函数

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;C &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、拷贝构造函数 &#x1f4d2;1.1拷贝构造函数的概念 &#x1f4d2;1.2拷贝构造…

SAP 散装物料简介

散装物料(Bulk Material),也叫做间接物料(Indirect Material),是一般企业在库存管理时常见的一种物料形式。散装物料专指那些价值小、消耗量大、消耗率高的物料件。这些物料组件同样服务于企业的生产活动,并且在企业的工作中心中被生产活动直接消耗(如螺丝钉、润滑油、…

使用飞书自定义机器人发送消息

使用飞书机器人可以很方便的获取自动化任务的反馈&#xff1a; 在群里创建一个机器人&#xff1a; 记住下面的 webhook地址&#xff0c;这个是标识机器人的唯一ID&#xff0c;比如它的webhook地址是&#xff1a;"https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxx-a…

方案分享:如何做好云中的DDoS防御?

所有企业都会有遭受DDoS攻击的风险。由于目前DDoS即服务&#xff08;DaaS&#xff09;的售价低廉&#xff0c;因此对于恶意攻击者来说&#xff0c;发起攻击比以往任何时候都更加容易&#xff0c;技术门槛也更低。分析公司IDC一项关于DDoS防御的调查显示&#xff0c;超过50%的IT…

python自动化测试实战 —— 自动化测试框架的实例

软件测试专栏 感兴趣可看&#xff1a;软件测试专栏 自动化测试学习部分源码 python自动化测试相关知识&#xff1a; 【如何学习Python自动化测试】—— 自动化测试环境搭建 【如何学习python自动化测试】—— 浏览器驱动的安装 以及 如何更…

混频原理与频谱搬移

文章目录 混频器频谱搬移何为镜像频率信号的复混频参考 混频器 混频器是一个三端器件&#xff0c;两个输入一个输出&#xff0c;输出信号等于输入信号的乘积。所以混频器可以将两个不同频率的信号通过相乘的方式&#xff0c;从而产生原本两个频率和与差的新信号。 数学推导举…

vue文件下载请求blob文件流token失效的问题

页面停留很久token失效没有刷新页面&#xff0c;这时候点击下载依然可以导出文件&#xff0c;但是文件打不开且接口实际上返回的是401&#xff0c;这是因为文件下载的方式通过window创建a标签的形式打开的&#xff0c;并没有判断token失效问题 const res await this.$axios.…

Unity | Shader基础知识(第一集:unity中最简单的shader)

一、unity的shader unity写的shader并不是真正意义上的shader。 简单解释&#xff1a;真正的shader语言写起来还是麻烦的&#xff0c;unity希望大家写起来简单一点&#xff0c;于是在原来的基础上&#xff0c;给大家优化了一个语言&#xff0c;叫shaderLab&#xff0c;所以我…

PyTorch深度学习实战(25)——自编码器

PyTorch深度学习实战&#xff08;25&#xff09;——自编码器 0. 前言1. 自编码器2. 使用 PyTorch 实现自编码器小结系列链接 0. 前言 自编码器 (Autoencoder) 是一种无监督学习的神经网络模型&#xff0c;用于数据的特征提取和降维&#xff0c;它由一个编码器 (Encoder) 和一…

智慧燃气让城市能源系统高效运行

关键词&#xff1a;智慧燃气、燃气数字化、智慧燃气平台、智慧燃气解决方案、智慧燃气系统 随着我国城镇燃气行业的发展&#xff0c;燃气行业管理及服务从简单的手工运作阶段迈入数字燃气阶段&#xff0c;大量采用信息化手段管理燃气业务&#xff0c;智慧燃气应运而生。它既是…

互动时代的新趋势

数字人直播是指通过数字化技术将虚拟人物以真实的方式呈现在观众面前&#xff0c;并实现与观众的实时互动的一种新型娱乐形式。近年来&#xff0c;随着科技的发展和社交媒体的兴起&#xff0c;数字人直播越来越受到人们的关注&#xff0c;并成为当今互动时代的新趋势。 首先&a…

centos7x 安装支持gpu驱动的docker

1、卸载以前版本的驱动 sudo /usr/bin/nvidia-uninstall2、先安装基础项 yum install kernel kernel-devel gcc make -yyum install kernel kernel-devel gcc gcc-c make -y 3、禁用驱动源 nouveau echo "blacklist nouveau " >>/etc/modp…

移动CRM:智能化助力,销售更高效

商机稍纵即逝&#xff0c;及时把握机会才能促成更多交易。想要在出差途中也能掌握公司运营情况&#xff1f;得益于移动互联网的快速发展&#xff0c;现在您可以利用移动CRM客户管理系统&#xff0c;实时管理线索&#xff0c;查看销售数据。本文将向您介绍&#xff0c;移动CRM能…

热分析和报告软件 :FLIR Thermal Studio Pro Crack

FLIR 热工作室套件。FLIR Thermal Studio Pro FLIR Thermal Studio Suite 可帮助用户简化检查、组织数据并管理数千张热图像和视频——无论他们使用的是手持式热像仪、无人机系统 (UAS)、声学成像相机还是光学气体成像&#xff08;OGI&#xff09;相机。该订阅软件提供了关键组…

Qt提升绘制效率,绘制加速。

在我们绘制一些复杂逻辑且数据量巨大的图形时&#xff0c;经常会出现流畅性问题&#xff0c;本文就是来进行讲解如何提升绘制效率的。 实现思路&#xff1a; 场景1&#xff1a;我们绘制多个静态图形和绘制一张图片哪个更快。很明显绘制多个图形的时候要慢很多。所以我们将多个图…