首页 > 编程语言 >基于python的小翻译工具

基于python的小翻译工具

时间:2023-02-03 16:22:05浏览次数:54  
标签:lang 翻译 en get python res 基于 appid

这里的翻译接口是基于百度翻译的API

这里的方案是利用百度翻译开放平台实现的

会稍微麻烦点,但是更加方便个性化翻译

也可以通过爬虫的形式,直接操作百度翻译网页来实现


前期准备,需要注册百度开发者账户,然后开通通用文本翻译功能
到达这个界面找到appid以及密钥

这里就不说明注册开通过程了

开发者文档

python代码部分

import random
import requests
from hashlib import md5


def fanyi(q, from_lang="auto", to_lang="en"):
    if q.strip() == "":
        return "未输入"
    url = "https://fanyi-api.baidu.com/api/trans/vip/translate"
    appid = "XXXXXX" #换成自己的appid
    salt = random.randint(32768, 65536)
    key = "XXXXXXX"  #换成自己的密钥

    def make_sign(s):
        return md5(bytes(s, "utf-8")).hexdigest()

    sign = make_sign(appid + q + str(salt) + key)

    params = {
        "q": q.encode("utf-8"),
        "from": from_lang,
        "to": to_lang,
        "appid": appid,
        "salt": salt,
        "sign": sign
    }
    with requests.post(url=url, headers={"Content-Type": "application/x-www-form-urlencoded"}, params=params) as res:
        if res.status_code != 200:
            raise ("翻译出错!")
        return res.json()


# appid+q+salt+密钥
lang = """名称          代码
自动检测      auto	
中文          zh	
英语          en
粤语          yue	
文言文        wyw	
繁体中文    cht
日语          jp
韩语          kor	
法语          fra	
西班牙语      spa
泰语          th	
阿拉伯语      ara	
俄语          ru"""
map_lang = {
    "zh": "中文",
    "en": "英语",
    "yue": "粤语",
    "wyw": "文言文",
    "cht": "繁体中文",
    "jp": "日语",
    "kor": "韩语",
    "fra": "法语",
    "spa": "西班牙语",
    "th": "泰语",
    "ara": "阿拉伯语",
    "ru": "俄语",
    "pt": "葡萄牙语",
    "de": "德语",
    "it": "意大利语",
    "el": "希腊语",
    "nl": "荷兰语",
    "pl": "波兰语",
    "bul": "保加利亚语",
    "est": "爱沙尼亚语",
    "dan": "丹麦语",
    "fin": "芬兰语",
    "cs": "捷克语",
    "rom": "罗马尼亚语",
    "slo": "斯洛文尼亚语",
    "swe": "瑞典语",
    "hu": "匈牙利语",
    "vie": "越南语"
}


def run():
    while True:
        en = input("翻译为何种语言(默认英文,h查看帮助,q退出): ").strip()
        if en == "q":
            break
        elif en == "h":
            print(lang)
            continue
        else:
            if en !=""and map_lang.get(en) is None:
                print("输入有误")
                continue
            else:
                from_lang = 'auto'
                to_lang = 'en'
                if en != "":
                    to_lang = en
                while True:
                    s = input("请输入待翻译文本(lang选择语言,q退出): ").strip()
                    if s == "lang":
                        break
                    elif s == "q":
                        exit()
                    elif s == "":
                        continue
                    else:
                        res = fanyi(q=s, from_lang=from_lang, to_lang=to_lang)
                        print("{}=====>{}".format(map_lang.get(res.get("from"),"未能自动解析"), map_lang.get(res.get("to"))))
                        print("翻译结果为:",res.get("trans_result")[0].get("dst"))


if __name__ == '__main__':
    run()

注意事项

  • 待翻译文本(q)需为 UTF-8 编码;
  • 在生成签名后,发送 HTTP 请求时,如果将 query 拼接在URL上,需要对 query 做 URL encode。
  • 请求方式: 可使用 GET 或 POST 方式,如使用 POST 方式,Content-Type 请指定为:application/x-www-form-urlencoded
  • 字符编码:统一采用 UTF-8 编码格式
  • query 长度:为保证翻译质量,请将单次请求长度控制在 6000 bytes以内(汉字约为输入参数 2000 个)

其他语言的demo

返回数据的样式
query=apple,语言方向为英到中
未接入资源时,返回结果为:

{
    "from": "en", 
    "to": "zh", 
    "trans_result": [
        {
            "src": "apple", 
            "dst": "苹果"
        }
    ]
}

接入词典、语音合成资源后,返回结果为:

{
  "from": "en",
  "to": "zh",
  "trans_result": [
    {
      "src": "apple",
      "dst": "苹果",
      "src_tts": "https:\/\/fanyiapp.cdn.bcebos.com\/api\/tts\/95e906875b87d342d7325a36a4e1ab42.mp3",
      "dst_tts": "https:\/\/fanyiapp.cdn.bcebos.com\/api\/tts\/62f4ff87617655bc1f65e24cf4ed4963.mp3",
      "dict": "{\"lang\":\"1\",\"word_result\":{\"simple_means\":{\"word_name\":\"apple\",\"from\":\"original\",\"word_means\":[\"苹果\"],\"exchange\":{\"word_pl\":[\"apples\"]},\"tags\":{\"core\":[\"高考\",\"考研\"],\"other\":[\"\"]},\"symbols\":[{\"ph_en\":\"ˈæpl\",\"ph_am\":\"ˈæpl\",\"parts\":[{\"part\":\"n.\",\"means\":[\"苹果\"]}],\"ph_other\":\"\"}]}}}"
    }
  ]
}

标签:lang,翻译,en,get,python,res,基于,appid
From: https://www.cnblogs.com/guangdelw/p/17089678.html

相关文章

  • [oeasy]python0072_修改字体前景颜色_foreground_color_font
    修改颜色回忆上次内容m可以改变字体样式0-9之间设置的都是字体效果0重置为默认1变亮2变暗3斜体4下划线5慢闪6快闪7前景背景互换8隐藏9中划......
  • python Counter
    fromcollectionsimportCounterL1='iuasdhfiuhaefi'L2=[1,2,3,4,5,6,6,6,7,7,8,8,8,11,2,1]L3={1:2,3:4,5:6}L4={1,2,23,4,5,6,76,7}print(Counter(L1))......
  • 反序列化类校验部分源码解析、断言、drf之请求、drf之响应、视图组件介绍及两个视图基
    目录1反序列化类校验部分源码解析2断言3drf之请求3.1Request能够解析的前端传入的编码格式3.2Request类有哪些属性和方法(学过)4drf之响应4.1Response能够响应的编......
  • 【工具】-Misc-Python-dsstore
    介绍这是一个.DS_Store解析工具。什么是.DS_Store.DS_Store是DesktopServicesStore的缩写,是macOS操作系统上的一个不可见文件,只要您使用“Finder”查看文件夹,它......
  • 基于IdentityServer的系统对接微信公众号
    业务需求公司有两个业务系统,A和B,AB用户之间属于多对一的关系,数据库里面也就是两张表,A表有个外键指向B。现在需要实现以下几个功能。A用户扫描B的二维码,填写相关的注册......
  • #Python 文本包含pandas的 Series.str.contains函数
    一:基础的函数组成’’‘Series.str.contains(pat,case=True,flags=0,na=nan,regex=True)’’'测试pattern或regex是否包含在Series或Index的字符串中。返回布尔值系列......
  • Python算术运算符
    Python算术运算符以下假设变量: a=10,b=20:运算符描述实例+加-两个对象相加a+b输出结果30-减-得到负数或是一个数减去另一个数a-b输出结果-10*乘-两个数相乘或......
  • Python中有几种数据类型?
    变量用来存储数据,那么大家有没有想过,我们应该让变量占用多大空间,保存什么样的数据呢?问:说说Python中有几种数据类型?答:Python中主要有8种数据类型:number(数字)、string(字......
  • go 基于http库撸一个简易架子
    http库实现一个最简单的httpserver需要几行代码?对于python可能只需一行,对于node可能也要不了几行,那对于golang要几行?同样也要不了几行,这几乎是所有现代化高级语言......
  • FMC子卡设计资料:FMC177-基于AD9361的双收双发射频FMC子卡
    FMC177-基于AD9361的双收双发射频FMC子卡     一、板卡介绍       FMC177射频模块分别包含两个接收通道与发射通道,其频率可覆盖达到70MHz......