python调用有道智云API实现文件批量翻译

最近工作过程中,需要对一批文件进行汉译英的翻译,对单个文档手工复制、粘贴的翻译方式过于繁琐,考虑到工作的重复性和本人追求提高效率、少动手(懒),想通过调用已有的接口的方法,自己实现一个批量翻译工具,一劳永逸。在网上找了几款翻译API,通过对比翻译的结果和学习成本,选择了有道智云的服务,自己开发了一个批量翻译的小软件。详细记录一下使用和开发过程,后面的小伙伴们有相关需求,可以参考。

批量文档翻译工具的使用

我这里开发批量文档翻译工具使用python作为开发工具,功能如下:

     1)通过文件夹选择多个文档;

     2)可以将多个文档的翻译结果存到目标文件夹下。

话不多说,看图↓↓↓↓↓

部分翻译结果展示(涉及工作内容的保密性,这里用荷塘月色作为样例):

开发过程

下面开始详细介绍调用有道智云API接口的步骤和软件开发的过程:

1、个人开发者账号注册

首先,需要注册个人的开发者账号。

在官网点击注册,然后填写个人资料。即可完成注册,官网地址:http://ai.youdao.com/gw.s#/

2、 创建应用和实例

注册成功并登录后个人中心页面如下图,有道智云提供了自然语言翻译、文字识别、语音合成、语音测评等服务接口。 这些服务接口都是通过以实例的方式运行的,通过应用进行管理的。需要分别创建实例、创建应用,通过应用获取应用ID和应用密钥等信息。

我这里用到的是自然语言翻译服务,首先,需要分别创建一个应用、创建一个自然语音翻译的实例;其次,需要将实例绑定到应用上。最后,就可以通过应用的应用ID、应用密钥调用自然语音翻译api接口了。有道平台会对不同的实例、应用的使用情况进行记录、分析、收费。刚刚注册的体验者会有免费体验字数和50元的体验金哦(加客服貌似还会有额外的50元的)。

创建实例的步骤:

根据使用需求,选择对应服务(“自然语言翻译”/“文字识别OCR”/“语音合成TTS”/“语音识别ASR”/“智能语音评测”/“多平台编辑器”)->“创建实例”,按步骤完成实例创建。

创建应用并绑定实例(应用接口分为三种:API、安卓、ios接口):

点击“应用管理”->“我的应用”->“创建应用”,填写应用名称等相关信息,选择接入方式,并绑定我们所创建的实例,完成应用创建。我们这里用到的是API方式接入,安卓、ios接口需要根据提示填写相应的信息,详见官网新手指南

应用创建成功后,可获取应用ID(appKey)和应用密钥等信息,这些信息是调用API接口必不可少的参数。

3、接口调用及代码实现

1)API接口介绍

下面介绍API接口的调用方法

文本翻译API HTTPS地址:https://openapi.youdao.com/api

调用规则:在调用集成文本翻译API时,需遵循以下规则。

规则 描述
传输方式 HTTPS
请求方式 GET/POST
字符编码 统一使用UTF-8 编码
请求格式 表单
响应格式 JSON

调用传参:调用API需要向接口发送以下字段来访问服务。

字段名 类型 含义 必填 备注
q text 待翻译文本 True 必须是UTF-8编码
from text 源语言 True 参考下方 支持语言 (可设置为auto)
to text 目标语言 True 参考下方 支持语言 (可设置为auto)
appKey text 应用ID True 可在 应用管理 查看
salt text UUID True UUID
sign text 签名 True sha256(应用ID+input+salt+curtime+应用密钥)
signType text 签名类型 True v3
curtime text 当前UTC时间戳(秒) true TimeStamp
ext text 翻译结果音频格式,支持mp3 false mp3
voice text 翻译结果发音选择 false 0为女声,1为男声。默认为女声
strict text 是否严格按照指定from和to进行翻译:true/false false 如果为false,则会自动中译英,英译中。默认为false

签名生成方法如下:
signType=v3;
sign=sha256(应用ID+input+salt+curtime+应用密钥);
其中,input的计算方式为:input=q前10个字符 + q长度 + q后10个字符(当q长度大于20)或 input=q字符串(当q长度小于等于20);

返回结果格式:返回的结果是json格式,具体说明如下:

字段名 类型 含义 备注
errorCode text 错误返回码 一定存在
query text 源语言 查询正确时,一定存在
translation Array 翻译结果 查询正确时,一定存在
basic text 词义 基本词典,查词时才有
web Array 词义 网络释义,该结果不一定存在
l text 源语言和目标语言 一定存在
dict text 词典deeplink 查询语种为支持语言时,存在
webdict text webdeeplink 查询语种为支持语言时,存在
tSpeakUrl text 翻译结果发音地址 翻译成功一定存在,需要应用绑定语音合成实例才能正常播放 否则返回110错误码
speakUrl text 源语言发音地址 翻译成功一定存在,需要应用绑定语音合成实例才能正常播放 否则返回110错误码
returnPhrase Array 单词校验后的结果 主要校验字母大小写、单词前含符号、中文简繁体

当返回的结果errorCode为 0 时说明调用成功,不为0时,则会出现不同含义的错误码。详细含义可查阅官方开发文档

2)批量文档翻译开发

批量翻译demo使用python3实现,为了方便测试,我用tkinter做了简单的界面,用来读取待翻译文档,指定结果存储路径,为了最大化简化开发过程,降低测试的时间成本,目前只实现了读取.txt类型文件的方法。

整个demo分为三个文件,mainwindow.py,translate.py和translatetool.py,mainwindow为UI部分的代码,translate中实现了批量读取文档并翻译保存的逻辑,translatetool为根据示例代码改造后的翻译方法,需调用其他平台API时,亦可封装相应方法,增加了项目的扩展性。

mainwindow的元素如下:

root=tk.Tk()
root.title("netease youdao translation test")
frm = tk.Frame(root)
frm.grid(padx='50', pady='50')
btn_get_file = tk.Button(frm, text='选择待翻译文件', command=get_files)
btn_get_file.grid(row=0, column=0, ipadx='3', ipady='3', padx='10', pady='20')
text1 = tk.Text(frm, width='40', height='10')
text1.grid(row=0, column=1)
btn_get_result_path=tk.Button(frm,text='选择翻译结果路径',command=set_result_path)
btn_get_result_path.grid(row=1,column=0)
text2=tk.Text(frm,width='40', height='2')
text2.grid(row=1,column=1)
btn_sure=tk.Button(frm,text="翻译",command=translate_files)
btn_sure.grid(row=2,column=1)

其中translate_files()方法最终调用了translate类的translate_files()方法:

def translate_files():
  if translate.file_paths:
    translate.translate_files()
    tk.messagebox.showinfo("提示","搞定")
  else :
    tk.messagebox.showinfo("提示","无文件")

类translate定义如下:

import os
from translatetool import connect

class Translate():
  def __init__(self,name,file_paths,result_root_path,trans_type):
    self.name=name
    self.file_paths=file_paths							# 待翻译文件路径
    self.result_root_path=result_root_path				# 翻译结果存储路径
    self.trans_type=trans_type

  # 翻译过程:读取文件-掉用有道api-解析返回信息-保存
  def translate_files(self):
    for file_path in self.file_paths:
      file_name=os.path.basename(file_path)
      file_content=open(file_path,encoding='utf-8').read()
      trans_reult=self.translate_use_netease(file_content)
      resul_file=open(self.result_root_path+'/result_'+file_name,'w').write(trans_reult)
  def translate_use_netease(self,file_content):
    result=','.join(connect(file_content,'zh-CH','EN'))	 # 翻译API返回结果为一个数组
    return result

调用有道API主要方法为connect(),根据API的签名信息等要求组成data并发送请求,解析返回的json:

# input输入待翻译字段,fromlanguage待翻译的语言,tolanguage翻译成的目标语言
# 返回翻译的字段
def connect(inputtext,fromlanguage,tolanguage):
  q=inputtext
  data = {}
  data['from'] = fromlang
  data['to'] = tolang
  data['signType'] = 'v3'
  curtime = str(int(time.time()))
  data['curtime'] = curtime
  salt = str(uuid.uuid1())
  signStr = APP_KEY + truncate(q) + salt + curtime + APP_SECRET
  sign = encrypt(signStr)
  data['appKey'] = APP_KEY
  data['q'] = q
  data['salt'] = salt
  data['sign'] = sign
  print(data)
  response = do_request(data)
  print(response.content)
  j = json.loads(str(response.content, encoding="utf-8"))["translation"]
  return j

完整demo代码地址:https://github.com/LemonQH/BatchFileTraslationProgram/tree/master

得益于API的学习成本之低,接口调用部分的开发过程十分顺利,仅有一个小插曲,最开始调用API总是返回错误码206(即时间戳错误),最后发现是我的系统时间比标准时间慢了十分钟 - - #

总结

对于我此次的需要翻译的文档需求来说,有道智云赠送的字数和账户额度,已经够用了,但是如果想长期的使用下去,还是要付费的。最后发现,有道智云在个人主页中还提供了按小时统计当日实例调用次数和查询字符数和按天统计历史天数内实例的调用次数和字符数,对有需求的小伙伴,还可以记录查看自己接口的翻译量、实时调用量等状态。

如上是我整个demo的开发过程。整体来说从注册到调用有道智云API的过程还是比较顺利的,而且每一步都有官方的详细文档可以参照。以至于主要开发时间都分配给了tkinter排版(顺便吐槽下tkinter的“好用” :p)。

以上就是python调用有道智云API实现文件批量翻译的详细内容,更多关于python 文件批量翻译的资料请关注我们其它相关文章!

(0)

相关推荐

  • Python 调用有道翻译接口实现翻译

    最近为了熟悉一下 js 用有道翻译练了一下手,写一篇博客记录一下,也希望能对大家有所启迪,不过这些网站更新太快,可能大家尝试的时候会有所不同. 首先来看一下网页 post 过去的数据 大家不难发现,我们翻译的内容是放在 post 的 data 中的,这些参数,除了 salt 和 sign 要么就是不会变化,要么就是一眼能看出来意义的:那么这个 salt 和 sign 是什么呢?salt 根据 ta 数据的特征,我们应该会想到,这应该是一个时间戳,而 sign 又是什么呢?我们一起来看一下 找到这

  • python 调用有道api接口的方法

    初学python ,研究了几天,写了一个python 调用 有道api接口程序 效果看下图: 申明:代码仅供和我一样的初学者学习交流 有道api申请地址http://fanyi.youdao.com/openapi?path=data-mode 申请很简单的 ps:审核不用花时间的,请勿滥用!! #-*- coding: UTF-8 -*- import urllib import urllib2 import requests import json import sys reload(sys

  • Python3.6实现带有简单界面的有道翻译小程序

    本人使用的是Python3.6(32bit),在win10上运行的 代码如下: from tkinter import * import urllib.request import urllib.parse import json #实现翻译功能的函数 def translate(content): url='http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&ses

  • Python 20行简单实现有道在线翻译的详解

    简介 主要是尝试简单的使用pyhton的爬虫功能,于是使用有道进行尝试,并没有进行深入的诸如相关api的调用. 以下是需要的POST数据 代码 以下是相关部分的代码: import urllib.request import urllib.parse import json content=input('需要翻译的内容:') #翻译内容 url='http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&sess

  • 用python3 urllib破解有道翻译反爬虫机制详解

    前言 最近在学习python 爬虫方面的知识,网上有一博客专栏专门写爬虫方面的,看到用urllib请求有道翻译接口获取翻译结果.发现接口变化很大,用md5加了密,于是自己开始破解.加上网上的其他文章找源码方式并不是通用的,所有重新写一篇记录下. 爬取条件 要实现爬取的目标,首先要知道它的地址,请求参数,请求头,响应结果. 进行抓包分析 打开有道翻译的链接:http://fanyi.youdao.com/.然后在按f12 点击Network项.这时候就来到了网络监听窗口,在这个页面中发送的所有网络

  • 网易有道2017内推编程题 洗牌(python)

    本文实例为大家分享了网易有道2017内推编程题:洗牌,供大家参考,具体内容如下 ''' [编程题] 洗牌 时间限制:1秒 空间限制:32768K 洗牌在生活中十分常见,现在需要写一个程序模拟洗牌的过程. 现在需要洗2n张牌, 从上到下依次是第1张,第2张,第3张一直到第2n张.首先,我们把这2n张牌分成两堆, 左手拿着第1张到第n张(上半堆),右手拿着第n+1张到第2n张(下半堆). 接着就开始洗牌的过程,先放下右手的最后一张牌,再放下左手的最后一张牌, 接着放下右手的倒数第二张牌,再放下左手的

  • 详解Python3网络爬虫(二):利用urllib.urlopen向有道翻译发送数据获得翻译结果

    上一篇内容,已经学会了使用简单的语句对网页进行抓取.接下来,详细看下urlopen的两个重要参数url和data,学习如何发送数据data 一.urlopen的url参数 Agent url不仅可以是一个字符串,例如:http://www.baidu.com.url也可以是一个Request对象,这就需要我们先定义一个Request对象,然后将这个Request对象作为urlopen的参数使用,方法如下: # -*- coding: UTF-8 -*- from urllib import re

  • 如何基于Python制作有道翻译小工具

    这篇文章主要介绍了如何基于Python制作有道翻译小工具,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 该工具主要是利用了爬虫,爬取web有道翻译的内容. 然后利用简易GUI来可视化结果. 首先我们进入有道词典的首页,并点击翻译结果的审查元素 之后request响应网页,并分析网页,定位到翻译结果. 使用tkinter来制作一个建议的GUI 期间遇到的一个问题则是如何刷新翻译的结果,否则的话会在text里一直累加翻译结果. 于是,在mainlo

  • 基于python爬取有道翻译过程图解

    1.准备工作 先来到有道在线翻译的界面http://fanyi.youdao.com/ F12 审查元素 ->选Network一栏,然后F5刷新 (如果看不到Method一栏,右键Name栏,选中Method) 输入文字自动翻译后发现Method一栏有GET还有POST:GET是指从服务器请求和获得数据,POST是向指定服务器提交被处理的数据. 随便打开一个POST,找到preview可以看到我们输入的"我爱你一生一世"数据,可以证明post的提交数据的 下面分析一下Header

  • python调用有道智云API实现文件批量翻译

    最近工作过程中,需要对一批文件进行汉译英的翻译,对单个文档手工复制.粘贴的翻译方式过于繁琐,考虑到工作的重复性和本人追求提高效率.少动手(懒),想通过调用已有的接口的方法,自己实现一个批量翻译工具,一劳永逸.在网上找了几款翻译API,通过对比翻译的结果和学习成本,选择了有道智云的服务,自己开发了一个批量翻译的小软件.详细记录一下使用和开发过程,后面的小伙伴们有相关需求,可以参考. 批量文档翻译工具的使用 我这里开发批量文档翻译工具使用python作为开发工具,功能如下:      1)通过文件夹

  • python调用百度语音REST API

    本文实例为大家分享了python调用百度语音REST API的具体代码,供大家参考,具体内容如下 (百度的rest接口的部分网址发生了一定的变化,相关代码已更新) 百度通过 REST API 的方式给开发者提供一个通用的 HTTP 接口,基于该接口,开发者可以轻松的获得语音合成与语音识别能力.SDK中只提供了PHP.C和JAVA的相关样例,使用python也可以灵活的对端口进行调用,本文描述了简单使用Python调用百度语音识别服务 REST API 的简单样例. 1.语音识别与语音合成的调用

  • Python调用腾讯云短信服务发送手机短信

    目录 1.准备工作 2.代码实现 3.拓展 4.闲聊 1.准备工作 pip install qcloudsms_py 1.注册腾讯云账号 2.在产品列表内找到短信,在短信内添加应用 3.获取对应的SDK AppID 和 App Key 4.配置短信内容 注:需先申请“短信签名”和“短信正文”,按照要求填写申请即可,腾讯云的审核效率还是很快的,一般在1-2个小时内就会有结果 注:腾讯云的短信服务现在好像也不免费了,之前每个月还会赠送100条免费短信额度.总结:准备工作准备内容:SDK AppID.

  • Python调用scp向服务器上传文件示例

    最近做的项目中有一个小功能:在python中调用scp命令 使用ssh登录,然后将指定目录中的图片上传到服务器指定目录 网上搜了很多方法都没用,最后终于碰到一个可以成功上传的,特此记录 import paramiko # 用于调用scp命令 from scp import SCPClient # 将指定目录的图片文件上传到服务器指定目录 # remote_path远程服务器目录 # file_path本地文件夹路径 # img_name是file_path本地文件夹路径下面的文件名称 def u

  • Python调用ffmpeg开源视频处理库,批量处理视频

    代码示例 # coding=utf-8 import os import subprocess import datetime import json, pprint import re, time import threading import random import shutil class FFmpeg: def __init__(self, editvdo, addlogo=None, addmusic=None, addvdohead=None, addvdotail=None):

  • python调用腾讯云实名认证接口辨别身份证真假

    今天给大家分享腾讯云的实名认证接口的调用 点击免费获取产品 from __future__ import print_function import ssl, hmac, base64, hashlib from datetime import datetime as pydatetime try: from urllib import urlencode from urllib2 import Request, urlopen except ImportError: from urllib.p

  • python调用百度语音识别实现大音频文件语音识别功能

    本文为大家分享了python实现大音频文件语音识别功能的具体代码,供大家参考,具体内容如下 实现思路:先用ffmpeg将其他非wav格式的音频转换为wav格式,并转换音频的声道(百度支持声道为1),采样率(值为8000),格式转换完成后,再用ffmpeg将音频切成百度. 支持的时长(30秒和60秒2种,本程序用的是30秒). # coding: utf-8 import json import time import base64 from inc import rtysdb import ur

  • 使用ajax跨域调用springboot框架的api传输文件

    在新项目中使用的是springboot编写的api,涉及到ajax跨域请求和传输文件的问题,在这里记录一下 首先是前台页面的代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>test_api</title> <script type="text/javascript" src="jquery-1.7.2.

  • python调用百度REST API实现语音识别

    目前,语音识别,即将语音内容转换为文字的技术已经比较成熟,遥想当时锤子发布会上展示的讯飞输入法语音识别,着实让讯飞火了一把.由于此类语音识别需要采集大量的样本,才能达到一定的准确度,个人很难从零开始搭建.但是,许多拥有语音识别技术的公司,或多或少会提供一些API或者SDK供开发者使用,这样就把语音识别的门槛降到了一个很低的程度,只需几行代码即可实现.下面我介绍以下如何使用Python调用百度的REST API实现一个简单的语音识别. 注册账号,并成为开发者 打开 http://yuyin.bai

  • Python调用腾讯API实现人脸身份证比对功能

    目录 1.作者介绍 2.调用腾讯人脸身份证比对的知识介绍 2.1 应用场景 3.调用腾讯云API步骤 3.1微信扫码登录 3.2鼠标选择云产品,并找到人脸核身 3.3进入人脸核身界面 3.4编辑参数 3.5查看自己的api 4.完整代码展示与结果 4.1完整代码 4.2实验结果 1.作者介绍 钱文浩,男,西安工程大学电子信息学院,2021级研究生研究方向:机器视觉与人工智能电子邮件:2414712362@qq.com 刘帅波,男,西安工程大学电子信息学院,2021级研究生,张宏伟人工智能课题组研

随机推荐