龙空技术网

基于Python的文字翻译功能的实现

AI教研与科普 354

前言:

目前各位老铁们对“百度翻译api开放平台”大概比较着重,咱们都需要分析一些“百度翻译api开放平台”的相关文章。那么小编同时在网上收集了一些有关“百度翻译api开放平台””的相关资讯,希望你们能喜欢,姐妹们一起来学习一下吧!

导读

本文主要介绍使用python和requests库实现翻译文字功能。

项目介绍

本文将创建一个程序用于自动识别语言并翻译。对于该程序,需要如下几个包:random、hashlib、urllib、requests、tkinter、pyautogui, 其中后三个包需要单独安装,前三个为python自带。 了解过python的人多少都听说过 requests和tkinter库。requests是一个爬虫相关的库,用于访问网页并抓取网页标签,文本,头部文件等, tkinter是用于开发图形交互界面的一个标准库,可以很好的在Windows和Mac系统下运行, pyautogui是一个GUI自动化库, 常用功能有获取窗口大小,自动执行鼠标,键盘事件等。 这是对项目和库的简短介绍,下面将详细介绍准备工作和实现步骤。

准备工作

01寻找合适的API

从网上寻找到了4个免费API,分别是:

(1)谷歌 API ,需要调用GitHub项目 ,毕竟是国外网站 ,使用起来较为不便 ,还要搭配专门的库pygoogletranslation, 并且该库存在部分问题, 需要修改库的相关源码, 开发难度较大。

(2)DeepL API, 官网看上去很高级, 但不支持中国地区订阅。

(3)百度 API, 调用简单, 官方文档简洁明了。

(4)有道 API, 简洁, 第一次使用赠送虚拟货币用于体验有道云服务, 但翻译API每月都会进行收费, 如果只是用来练手或短期使用可以选择有道。

本篇文章采用百度API进行讲解。

02安装相关库

#安装requests

pip install requests

#安装 tkinter

pip install tkinter

#安装pyautogui

pip install pyautogui

项目介绍

01注册百度翻译开放平台

(1)点击网页()右上角的登录按钮,并按流程完成注册。

(2)注册登陆后在首页点击 “开发者信息”。

(3)开发者类型选择 “个人开发者”,然后按照要求填好个人信息。

(4)随后进入管理控制台, 在“总览”中点击“立即开通”。

(5)紧接着先择 “通用文本翻译”。

(6)按流程选择“标准版”, 也可以选择“高级版”,但需要实名认证。

(7)随后只需填写应用名称即可提交申请。

(8)申请成功后点击“开发者信息”查看 “APP ID”和“密钥”,记住这两段文本,随后会用到。

注册完毕,接下来进入代码部分。

02导入所需要的库

import randomimport hashlibimport urllibimport requestsfrom tkinter import *from tkinter import ttkimport pyautogui

03对照API接口文档调用翻译服务, 获取关键信息

API接口口文档:

(1) API调用地址

(2) 获取头部请求参数

(3) 生成签名规则

(4) 查看可翻译语言

(5)最后根据以上规则编写代码,代码如下:

# 可用翻译语言,仅为展示,未全部列出LangList = {   "自动检测":"auto",   "中文":"zh",   "英语":"en",   "粤语":"yue",   "文言文":"wyw",   "日语":"jp",   "韩语":"kor",   "法语":"fra",   "西班牙语":"spa",   "泰语":"th",   "阿拉伯语":"ara",   "俄语":"ru",   "葡萄牙语":"pt",   "德语":"de",   "意大利语":"it"}# 翻译函数def tranlate(q, fromLang="auto", toLang="zh"):   q:   ---------       #需要被翻译的词句\n      fromLang:   ----------       #被翻译词句语言,默认为自动\n     toLang:   ----------       #需要被翻译成的语言,默认为zh(中文)\n   appid = '你自己的appid'  # appid   secretKey = '你自己的应用密钥'  # 密钥   salt = random.randint(32768, 65536)  # 随机数,API需要   sign = hashlib.md5((appid + q + str(salt) + secretKey).encode()).hexdigest()  # md5标签   # 完整访问地址,其中urllib.parse.quote函数将q转为ASCII码   myurl = 'appid=' + appid + '&q=' + urllib.parse.quote(q) + '&from=' + fromLang + '&to=' + toLang + '&salt=' + str(salt) + '&sign=' + sign   res = requests.request("get",';, params=myurl)  # 通过GET请求访问地址   # 返回页面内容   return res.json()

此时可以调用以构建好的函数,查看程序是否能运行

print(tranlate("你好",toLang="en"))# 运行结果:# PS E:\program> &E:/python/python.exe "e:/program/python/36/d. 百度翻译/Baidu.py"# {'from': 'zh', 'to': 'en', 'trans_result': [{'dst': 'hello', 'src': '你好'}]}

得到的结果是可以运行,并且得到了一串json文本

由此可知: “from”为被翻译文本的语言, “to”为目标语言, “trans_result”为翻译结果, “dst”为原文本内容, “src”为翻译内容。

04优化输出结果,编写图形化界面

# 获取信息并进行翻译def get_massage(fromLangList, toLangList, inputBox, outputBox):   res = tranlate(inputBox.get("1.0","5.40").strip(), LangList[fromLangList.get()], LangList[toLangList.get()])  # 翻译   outputBox.configure(state='normal')  # 恢复输出框读写功能   outputBox.delete("1.0","5.40")  # 清空输入框   outputBox.insert(END, res["trans_result"][0]["dst"])  # 将翻译结果写入   outputBox.configure(state='disabled')  # 关闭输出框读写功能# 创建视图def GUI():   tk = Tk()  # 创建窗口   tk.resizable(width=False, height=False)  # 禁止更改窗口大小   tk.title("百度翻译API")  # 窗口名称   x,y = pyautogui.size()  # 获取屏幕分辨率   tk.geometry("1200x500+{}+{}".format(x//2-600, y//2-250))  # 设置窗口大小和显示位置      # 创建下拉框 (输入语言)   Label(tk, text="输入语言:", width=15, font=('楷体', 20)).grid(row=1,column=1)  # 引导内容   fromLangList = ttk.Combobox(tk,width=20, font=('楷体', 20))  # 创建下拉框对象   fromLangList["value"] =tuple(tuple(LangList.keys()))  # 设置下拉框数值   fromLangList["state"] ='readonly'  # 设置下拉框状态为只读   fromLangList.current(0)  # 设置下拉框默认值   fromLangList.grid(row=1,column=2)  # 设置布局      # 创建下拉框 (输出语言)   Label(tk, text="输出语言:", width=15, font=('楷体', 20)).grid(row=2,column=1)  # 引导内容   toLangList = ttk.Combobox(tk,width=20, font=('楷体', 20))  # 创建下拉框对象   toLangList["value"] =tuple(tuple(LangList.keys())[1::])  # 设置下拉框数值   toLangList["state"] ='readonly'  # 设置下拉框状态为只读   toLangList.current(0)  # 设置下拉框默认值   toLangList.grid(row=2,column=2)  # 设置布局      # 创建输入框   Label(tk, text="输入框:", font=('楷体', 20)).grid(row=3, column=1)  # 引导内容   inputBox = Text(tk, width=40, height=4, font=('楷体', 20))  # 设置多行文本框   inputBox.grid(row=3, column=2)  # 设置布局      # 创建输出框   Label(tk, text="输出框:", font=('楷体', 20)).grid(row=4, column=1)  # 引导内容   outputBox = Text(tk, width=40, height=4, font=('楷体', 20))  # 设置多行文本框   outputBox.grid(row=4, column=2)  # 设置布局   outputBox.configure(state='disabled') # 翻译按钮   f_b = Button(tk, text="翻译", bg="grey", font=('楷体', 20), command=lambda:get_massage(fromLangList, toLangList, inputBox, outputBox))  # 设置按钮   f_b.grid(row=5, column=2, sticky="n") # 设置布局   tk.mainloop()  # 保持窗口开启GUI()

05完整代码和使用效果展示

import randomimport hashlibimport urllibimport requestsfrom tkinter import *from tkinter import ttkimport pyautogui# 可用翻译语言,仅为展示未全部列出LangList = {   "自动检测":"auto",   "中文":"zh",   "英语":"en",   "粤语":"yue",   "文言文":"wyw",   "日语":"jp",   "韩语":"kor",   "法语":"fra",   "西班牙语":"spa",   "泰语":"th",   "阿拉伯语":"ara",   "俄语":"ru",   "葡萄牙语":"pt",   "德语":"de",   "意大利语":"it"}# 翻译def tranlate(q, fromLang="auto", toLang="zh"):   """   q:   ---------       需要被翻译的词句\n      fromLang:   ---------       被翻译词句语言,默认为自动\n     toLang:   ---------       需要被翻译成的语言,默认为zh(中文)\n   """   appid = '你自己的appid'  # appid   secretKey = '你自己的应用密钥'# 密钥   myurl = '/api/trans/vip/translate'  #API地址   salt = random.randint(32768, 65536)  # 随机数,API需要   sign = hashlib.md5((appid + q + str(salt) + secretKey).encode()).hexdigest()  # md5标签   # 完整访问地址,其中urllib.parse.quote函数将q转为ASCII码   myurl = 'appid=' + appid + '&q=' + urllib.parse.quote(q) + '&from=' + fromLang + '&to=' + toLang + '&salt='+ str(salt) + '&sign=' + sign   res = requests.request("get",';, params=myurl)  # 通过GET请求访问地址   # 返回页面内容return res.json()# 获取信息并进行翻译def get_massage(fromLangList, toLangList, inputBox, outputBox):   res = tranlate(inputBox.get("1.0","5.40").strip(), LangList[fromLangList.get()], LangList[toLangList.get()])  # 翻译   outputBox.configure(state='normal')  # 恢复输出框读写功能   outputBox.delete("1.0","5.40")  # 清空输入框   outputBox.insert(END, res["trans_result"][0]["dst"])  # 将翻译结果写入   outputBox.configure(state='disabled')  # 关闭输出框读写功能# 创建视图def GUI():   tk = Tk()  # 创建窗口   tk.resizable(width=False, height=False)  # 禁止更改窗口大小   tk.title("百度翻译API")  # 窗口名称   x,y = pyautogui.size()  # 获取屏幕分辨率   tk.geometry("1200x500+{}+{}".format(x//2-600, y//2-250))  # 设置窗口大小和显示位置      # 创建下拉框 (输入语言)   Label(tk, text="输入语言:", width=15, font=('楷体', 20)).grid(row=1,column=1)  # 引导内容   fromLangList = ttk.Combobox(tk,width=20, font=('楷体', 20))  # 创建下拉框对象   fromLangList["value"] =tuple(tuple(LangList.keys()))  # 设置下拉框数值   fromLangList["state"] ='readonly'  # 设置下拉框状态为只读   fromLangList.current(0)  # 设置下拉框默认值   fromLangList.grid(row=1,column=2)  # 设置布局      # 创建下拉框 (输出语言)   Label(tk, text="输出语言:", width=15, font=('楷体', 20)).grid(row=2,column=1)  # 引导内容   toLangList = ttk.Combobox(tk,width=20, font=('楷体', 20))  # 创建下拉框对象   toLangList["value"] =tuple(tuple(LangList.keys())[1::])  # 设置下拉框数值   toLangList["state"] ='readonly'  # 设置下拉框状态为只读   toLangList.current(0)  # 设置下拉框默认值   toLangList.grid(row=2,column=2)  # 设置布局      # 创建输入框   Label(tk, text="输入框:", font=('楷体', 20)).grid(row=3, column=1)  # 引导内容   inputBox = Text(tk, width=40, height=4, font=('楷体', 20))  # 设置多行文本框   inputBox.grid(row=3, column=2)  # 设置布局      # 创建输出框   Label(tk, text="输出框:", font=('楷体', 20)).grid(row=4, column=1)  # 引导内容   outputBox = Text(tk, width=40, height=4, font=('楷体', 20))  # 设置多行文本框   outputBox.grid(row=4, column=2)  # 设置布局   outputBox.configure(state='disabled') # 翻译按钮   f_b = Button(tk, text="翻译", bg="grey", font=('楷体', 20), command=lambda:get_massage(fromLangList, toLangList, inputBox, outputBox))  # 设置按钮   f_b.grid(row=5, column=2, sticky="n") # 设置布局   tk.mainloop()  # 保持窗口开启GUI()

标签: #百度翻译api开放平台 #python设置中文字体