使用Python实现中文翻译为英文的三种方法小结

作者:

文章目录
  • 有道翻译API(主要推荐) 百度翻译API(需要申请key与密钥,每月100万免费字符) 谷歌翻译API(需要梯子,而且不稳定,不推荐)
  • 目录
    • 一、前言
    • 二、实现代码
      • 1、判断文本是否存在中文
      • 2、有道翻译
      • 3、百度翻译
      • 4、谷歌翻译

    有道翻译API(主要推荐)

    百度翻译API(需要申请key与密钥,每月100万免费字符)

    谷歌翻译API(需要梯子,而且不稳定,不推荐)

    def is_Chinese(content):  # 判断输入的内容是否是中文
        for ch in content:
            if 'u4e00' <= ch <= 'u9fff':
                return True
            else:
                return False
    

    import urllib.request
    import urllib.parse
    import json
    import requests  # pip intasll requests
    import execjs  # 安装指令:pip install PyExecJS
    import random
    import hashlib
    import re
    
    
    # 有道翻译方法,不支持一次翻译一大段文字
    def youdao_translate(content):
        '''实现有道翻译的接口'''
        url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&sessionFrom=https://www.baidu.com/link'
        data = {
            'from': 'AUTO',
            'to': 'AUTO',
            'smartresult': 'dict',
            'client': 'fanyideskweb',
            'salt': '1500092479607',
            'sign': 'd9f9a3aa0a7b34241b3fe30505e5d436',
            'doctype': 'json',
            'version': '2.1',
            'keyfrom': 'fanyi.web',
            'action': 'FY_BY_CL1CKBUTTON',
            'typoResult': 'true'}
        data['i'] = content.replace('n', '')
        data = urllib.parse.urlencode(data).encode('utf-8')
        wy = urllib.request.urlopen(url, data)
        html = wy.read().decode('utf-8')
        ta = json.loads(html)
        res = ta['translateResult'][0][0]['tgt']
        return res
    
    
    
    if __name__ == '__main__':
        res = youdao_translate("红色,沙发")
    

    import urllib.request
    import urllib.parse
    import json
    import requests  # pip intasll requests
    import execjs  # 安装指令:pip install PyExecJS
    import random
    import hashlib
    import re
    
    
    # 百度翻译方法
    def baidu_translate(content):
        print(content)
        if len(content) > 4891:
            return '输入请不要超过4891个字符!'
        salt = str(random.randint(0, 50))
        # 申请网站 http://api.fanyi.baidu.com/api/trans
        appid = '201912XXXXXXXXXXX'  # 这里写你自己申请的
        secretKey = 'e83BXpQXXXXXXXXXXX'  # 这里写你自己申请的
        sign = appid + content + salt + secretKey
        sign = hashlib.md5(sign.encode(encoding='UTF-8')).hexdigest()
        head = {'q': f'{content}',
                'from': 'en',
                'to': 'zh',
                'appid': f'{appid}',
                'salt': f'{salt}',
                'sign': f'{sign}'}
        j = requests.get('http://api.fanyi.baidu.com/api/trans/vip/translate', head)
        print(j.json())
        res = j.json()['trans_result'][0]['dst']
        res = re.compile('[\x00-\x08\x0b-\x0c\x0e-\x1f]').sub(' ', res)
        print(res)
        return res
    
    
    if __name__ == '__main__':
        ret = baidu_translate("红色,沙发")
        print(ret)
    

    import urllib.request
    import urllib.parse
    import json
    import requests  # pip intasll requests
    import execjs  # 安装指令:pip install PyExecJS
    import random
    import hashlib
    import re
    
    
    class Py4Js():
    
        def __init__(self):
            self.ctx = execjs.compile(""" 
            function TL(a) { 
            var k = ""; 
            var b = 406644; 
            var b1 = 3293161072; 
    
            var jd = "."; 
            var $b = "+-a^+6"; 
            var Zb = "+-3^+b+-f"; 
    
            for (var e = [], f = 0, g = 0; g < a.length; g++) { 
                var m = a.charCodeAt(g); 
                128 > m ? e[f++] = m : (2048 > m ? e[f++] = m >> 6 | 192 : (55296 == (m & 64512) && g + 1 < a.length && 56320 == (a.charCodeAt(g + 1) & 64512) ? (m = 65536 + ((m & 1023) << 10) + (a.charCodeAt(++g) & 1023), 
                e[f++] = m >> 18 | 240, 
                e[f++] = m >> 12 & 63 | 128) : e[f++] = m >> 12 | 224, 
                e[f++] = m >> 6 & 63 | 128), 
                e[f++] = m & 63 | 128) 
            } 
            a = b; 
            for (f = 0; f < e.length; f++) a += e[f], 
            a = RL(a, $b); 
            a = RL(a, Zb); 
            a ^= b1 || 0; 
            0 > a && (a = (a & 2147483647) + 2147483648); 
            a %= 1E6; 
            return a.toString() + jd + (a ^ b) 
        }; 
    
        function RL(a, b) { 
            var t = "a"; 
            var Yb = "+"; 
            for (var c = 0; c < b.length - 2; c += 3) { 
                var d = b.charAt(c + 2), 
                d = d >= t ? d.charCodeAt(0) - 87 : Number(d), 
                d = b.charAt(c + 1) == Yb ? a >>> d: a << d; 
                a = b.charAt(c) == Yb ? a + d & 4294967295 : a ^ d 
            } 
            return a 
        } 
        """)
    
        def getTk(self, text):
            return self.ctx.call("TL", text)
    
    
    # 谷歌翻译方法:需要梯子,目前有些问题,暂不考虑
    def google_translate(content):
        '''实现谷歌的翻译'''
    
        content = content.replace('n', '')
        print(content)
        js = Py4Js()
        tk = js.getTk(content)
        if len(content) > 4891:
            return '输入请不要超过4891个字符!'
        param = {'tk': tk, 'q': content}
        result = requests.get("""http://translate.google.cn/translate_a/single?client=t&sl=en 
            &tl=zh-CN&hl=zh-CN&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss 
            &dt=t&ie=UTF-8&oe=UTF-8&clearbtn=1&otf=1&pc=1&srcrom=0&ssel=0&tsel=0&kc=2""", params=param)
        # 返回的结果为Json,解析为一个嵌套列表
        trans = result.json()[0]
        res = ''
        for i in range(len(trans)):
            line = trans[i][0]
            if line != None:
                res += trans[i][0]
    
        return res
    
    
    
    if __name__ == '__main__':
        # res = google_translate("红色,沙发")
        # print(res)
    

    到此这篇关于使用Python实现中文翻译为英文的三种方法小结的文章就介绍到这了,更多相关Python中文翻译为英文内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

    您可能感兴趣的文章:

    • 使用Python实现将中文语音翻译成英语音频功能
    • python全自动脚本实现翻译英文pdf文件
    • Python使用translate库实现多语种互相翻译
    • 使用Python制作一个翻译器
    • Python办公自动化之自动化文本翻译详解
    • Python调用各大机器翻译API的实现示例

    站内搜索