简 介: 测试了一些在线翻译工具的效果,利用有道翻译 可以方便对常见到的生词进行确认。对于 TEASOFT软件PYTHON功能进行改建,给出了 ?>的翻译模式功能。

关键词 在线翻译中英文翻译

中英文翻译 目 录
Contents
有道翻译 百度翻译 谷歌在线翻译 有道在线翻译 翻译助手 修改方法 使用效果 测试总结

 

§01 英文翻译


  平时工作中经常会应用到中英文翻译。利用很多基于互联网的英语词典软件(比如 YouDao) 虽然可用,但有时还是希望能够机制在TEASOFT软件环境中完成单词的翻译,或者很多单词的批量翻译。下面测试一些基于PYTHON环境的中英文翻译的软件。

  下面的方法是来自于 CSDN 博文 PYTHON 实现中英文自动翻译 中整理的方案,下面进行初步测试一下。

1.1 有道翻译

参考链接:https://segmentfault/a/1190000015643320

1.1.1 代码实现

from headm import *                 # =

import json
import requests

def translate(word):
    url = 'http://fanyi.youdao/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null'
    key = {
        'type': "AUTO",
        'i': word,
        "doctype": "json",
        "version": "2.1",
        "keyfrom": "fanyi.web",
        "ue": "UTF-8",
        "action": "FY_BY_CLICKBUTTON",
        "typoResult": "true"
    }
    response = requests.post(url, data=key)
    if response.status_code == 200:
        return response.text
    else:
        print("有道词典调用失败")
        return None

def get_reuslt(repsonse):
    result = json.loads(repsonse)
    printf ("输入的词为:%s" % result['translateResult'][0][0]['src'])
    printf ("翻译结果为:%s" % result['translateResult'][0][0]['tgt'])

def main():
    word = 'distortion'
    list_trans = translate(word)
    get_reuslt(list_trans)

if __name__ == '__main__':
    main()

1.1.2 测试结果

  测试输出结果:

输入的词为:distortion
翻译结果为:失真

1.1.3 使用限制

  每小时1000次访问限制,超过就会被禁封!!!!

1.1.4 封装为函数

"""有道翻译API的调用函数(封装为一个函数使用)"""
import json
import requests
import re

def translator(str):
    """
    input : str 需要翻译的字符串
    output:translation 翻译后的字符串
    """
    # API
    url = 'http://fanyi.youdao/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null'
    # 传输的参数, i为要翻译的内容
    key = {
        'type': "AUTO",
        'i': str,
        "doctype": "json",
        "version": "2.1",
        "keyfrom": "fanyi.web",
        "ue": "UTF-8",
        "action": "FY_BY_CLICKBUTTON",
        "typoResult": "true"
    }
    # key 这个字典为发送给有道词典服务器的内容
    response = requests.post(url, data=key)
    # 判断服务器是否相应成功
    if response.status_code == 200:
        # 通过 json.loads 把返回的结果加载成 json 格式
        result = json.loads(response.text)
#         print ("输入的词为:%s" % result['translateResult'][0][0]['src'])
#         print ("翻译结果为:%s" % result['translateResult'][0][0]['tgt'])
        translation = result['translateResult'][0][0]['tgt']
        return translation
    else:
        print("有道词典调用失败")
        # 相应失败就返回空
        return None

"""有道翻译函数  DONE!"""

1.2 百度翻译

参考文献:https://blog.csdn/baidu_33718858/article/details/83306851

  最新百度翻译API收费标准:最近流水记录若当月翻译字符数≤2百万,当月免费;若超过2百万字符,按照49元/百万字符支付当月超出部分费用。

1.2.1 测试代码

"""官方Python接入百度翻译API测试Demo(有所改动,官方DEMO有些过时,Python包有些变化)"""
import httplib2
import urllib
import random
import json
from hashlib import md5

appid = '*********' #你的appid
secretKey = '********' #你的密钥

httpClient = None
myurl = 'http://api.fanyi.baidu/api/trans/vip/translate'
q = 'apple'  # 要翻译的词
fromLang = 'en' # 翻译源语言
toLang = 'zh'  # 译文语言
salt = random.randint(32768, 65536)

# 签名
sign = appid+q+str(salt)+secretKey
m1 = md5()
m1.update(sign.encode(encoding = 'utf-8'))
sign = m1.hexdigest()
# myurl = myurl+'?appid='+appid+'&q='+urllib.parse.quote(q)+'&from='+fromLang+'&to='+toLang+'&salt='+str(salt)+'&sign='+sign
myurl = myurl+'?q='+urllib.parse.quote(q)+'&from='+fromLang+'&to='+toLang+'&appid='+appid+'&salt='+str(salt)+'&sign='+sign
try:
    h = httplib2.Http('.cache')
    response, content = h.request(myurl)
    if response.status == 200:
        print(content.decode('utf-8'))
        print(type(content))
        response = json.loads(content.decode('utf-8'))  # loads将json数据加载为dict格式
        print(type(response))
        print(response["trans_result"][0]['dst'])
except httplib2.ServerNotFoundError:
    print("Site is Down!")

1.2.2 测试结果

  运行之后,始终出现如下错误:

{"error_code":"52003","error_msg":"UNAUTHORIZED USER"}
<class 'bytes'>
<class 'dict'>
Traceback (most recent call last):
  File "D:\Temp\TEMP0001\test2.PY", line 45, in <module>
    print(response["trans_result"][0]['dst'])
KeyError: 'trans_result'

  这里唯一的疑问:就是其中的 appidsecretkey 究竟需要填写什么? 是需要进行申请相应的应用账号吗? 我使用自己百度的账号,测试还是不行。

1.3 谷歌在线翻译

Reference: https://github/terryyin/translate-python

  每天有1000个单词的翻译限制,不适合大量单词翻译

1.3.1 测试代码

from translate import Translator
translator= Translator(to_lang="zh")
translation = translator.translate("Steelmaking")
print(translation)

1.3.2 运行结果

炼钢

1.3.3 存在问题

  这个翻译过程虽然比较简洁,但是在从汉语翻译成英语的时候,出错的概率很大。

from translate import Translator
translator= Translator(to_lang="english")
translation = translator.translate("数据")
print(translation)

  输出的结果还是“数据”

1.4 有道在线翻译

Reference: https://pypi/project/pytranslator/

1.4.1 安装软件包

  首先需要安装相应的软件包: pytranslator

pythom -m pip install pytranslator

▲ 图1.4.1 pytranslator

1.4.2 测试代码

import pytranslator
youdao = pytranslator.youdao('YOUR_KEY','YOU_KEY_FROM')
youdao.trans('help')

  但是,运行出现错误:

Traceback (most recent call last):
  File "D:\Temp\TEMP0001\test4.PY", line 12, in <module>
    youdao = pytranslator.youdao('YOUR_KEY','YOU_KEY_FROM')
AttributeError: module 'pytranslator' has no attribute 'youdao'

1.4.3 使用说明

  项目名称 :

&emsp;&emsp;pytranslator

  示例 :

&emsp;&emsp;import pytranslator

&emsp;&emsp;youdao = pytranslator.youdao("YOUR_KEY","YOU_KEY_FROM")
&emsp;&emsp;youdao.trans("Help")

  更新日志 :

&emsp;&emsp;==============
&emsp;&emsp;时间 : 2017/02/20
&emsp;&emsp;作者 : 王一航
&emsp;&emsp;描述 : 开源到 pypi
&emsp;&emsp;版本 : 1.3.6
&emsp;&emsp;==============

  原理说明 :

&emsp;&emsp;利用有道翻译开放API进行中英互译
&emsp;&emsp;将有道服务器返回的 JSON 数据解析后包装成函数以供调用

  环境要求 :

&emsp;&emsp;python 2.x
&emsp;&emsp;requests

  下载安装 :
  1. install with pip

&emsp;&emsp;sudo pip install pytranslator

  2. install with source code

&emsp;&emsp;git clone https://git.coding,net/yihangwang/PyTranslator.git
&emsp;&emsp;cd ./PyTranslator
&emsp;&emsp;sudo python setup.py install

  使用方法 :

&emsp;&emsp;1. [申请有道翻译Key](http://fanyi.youdao/openapi?path=data-mode)
&emsp;&emsp;需要填写一下邮箱和应用名称 , 然后邮箱中会收到 KEY 和 KEY_FROM
&emsp;&emsp;2. 引入包 pytranslator
&emsp;&emsp;3. 根据第 1 步邮件中收到的 KEY 和 KEY_FROM 调用 youdao 类的构造函数
&emsp;&emsp;4. 调用成功后 , 就可以调 youdao 类的函数 trans 来进行返回
&emsp;&emsp;入口参数为需要被翻译的字符串 , 会自动识别中英文

  TODO :

&emsp;&emsp;1. 开放更多的接口(更加接近有道API提供的各种功能)
&emsp;&emsp;2. 将结果保存在本地 , 当用户多次查找的时候减轻服务器的压力
&emsp;&emsp;3. 汉译英功能
&emsp;&emsp;4. 自动补全功能
&emsp;&emsp;5. 短语查询功能
&emsp;&emsp;6. 整句翻译功能

1.4.4 申请KEY

  可以看到,前面使用过程中,所填写的KEY,KEY_FROM没有进行申请。需要通过 申请有道翻译Key 获得对应的KEY,KEY_FROM。

  不过在后面的网页登录以及申请账号的过程中适中遇到麻烦。暂时先放弃。

▲ 图1.4.2 有道翻译对应的API说明界面

 

§02 译助手


  过前面的测试,可以看到使用有道翻译的效果还是不错的。下面对于cdtm 进行改造,形成翻译快捷助手。

2.1 修改方法

2.1.1 使用语法

利用:

?>word1 单词2

  完成对word1、单词2的查询。

2.1.2 实现方式

(1)命令解析部分
    elif sys.argv[1][0] == '>' or sys.argv[1][0] == '》':
        strall = sys.argv[1:]
        strall[0] = strall[0][1:]

        for word in strall:
            list_trans = translate(word)
            get_reuslt(list_trans)
        exit()
(2)增加相应函数
import json
import requests

def translate(word):
    url = 'http://fanyi.youdao/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null'
    key = {
        'type': "AUTO",
        'i': word,
        "doctype": "json",
        "version": "2.1",
        "keyfrom": "fanyi.web",
        "ue": "UTF-8",
        "action": "FY_BY_CLICKBUTTON",
        "typoResult": "true"
    }
    response = requests.post(url, data=key)
    if response.status_code == 200:
        return response.text
    else:
        return None

def get_reuslt(repsonse):
    result = json.loads(repsonse)
    printf ("%s --> %s" %(result['translateResult'][0][0]['src'], result['translateResult'][0][0]['tgt']))

2.2 使用效果

?可能性 中国

可能性 --> possibility
中国 --> China



python --> python
beauty --> 美
command --> 命令
数据接口 --> Data interface

 

试总结 ※


  试了一些在线翻译工具的效果,利用有道翻译 可以方便对常见到的生词进行确认。对于 TEASOFT软件PYTHON功能进行改建,给出了 ?>的翻译模式功能。


■ 相关文献链接:

  • PYTHON 实现中英文自动翻译

● 相关图表链接:

  • 图1.4.1 pytranslator
  • 图1.4.2 有道翻译对应的API说明界面