Python調(diào)用各大機(jī)器翻譯API的實(shí)現(xiàn)示例
過(guò)去的二三年中,我一直關(guān)注的是機(jī)器翻譯API在自動(dòng)化翻譯過(guò)程中的應(yīng)用,包括采用CAT工具和Python編程語(yǔ)言來(lái)調(diào)用機(jī)器翻譯API,然后再進(jìn)行譯后編輯,從而達(dá)到快速翻譯的目的。
然而,我發(fā)現(xiàn)隨著人工智能的發(fā)展,很多機(jī)器翻譯也做了相應(yīng)的調(diào)整,調(diào)用機(jī)器翻譯api的樣例也發(fā)生了變化,今天我特意把主流機(jī)器翻譯api調(diào)用的Python代碼匯聚于此,總共有七種方法,供大家學(xué)習(xí)參考。
一、Python調(diào)用Google機(jī)器翻譯API
目前官方網(wǎng)站的調(diào)用代碼沒(méi)有之前的好用,所以我們依然采用以前的代碼,只用安裝requests, 而不用安裝額外的Python包,前提是只要知道Google翻譯的API密匙和翻譯的語(yǔ)對(duì)方向即可,代碼如下:
import requests def google_api(content): url = "https://translation.googleapis.com/language/translate/v2" data = { 'key': "YOUR_API_KEY", #你自己的api密鑰 'source': "zh", 'target': "en", 'q': content, 'format': 'text' } headers = {'X-HTTP-Method-Override': 'GET'} response = requests.post(url, data=data, headers=headers) res = response.json() text = res["data"]["translations"][0]["translatedText"] return text print("谷歌翻譯:"+google_api("好好學(xué)習(xí),天天向上!"))
二、Python調(diào)用百度機(jī)器翻譯API
Python調(diào)用百度機(jī)器翻譯API的代碼有些變化,但前提是需要申請(qǐng)百度的api id和key,放到以下代碼中:
import requests import random import json from hashlib import md5 # Set your own appid/appkey. appid = 'YOUR APP ID' appkey = 'YOU APP KEY' # For list of language codes, please refer to `https://api.fanyi.baidu.com/doc/21` from_lang = 'en' to_lang = 'zh' endpoint = 'http://api.fanyi.baidu.com' path = '/api/trans/vip/translate' url = endpoint + path query = 'Hello World!' # Generate salt and sign def make_md5(s, encoding='utf-8'): return md5(s.encode(encoding)).hexdigest() def baidu_api(query,from_lang,to_lang): salt = random.randint(32768, 65536) sign = make_md5(appid + query + str(salt) + appkey) # Build request headers = {'Content-Type': 'application/x-www-form-urlencoded'} payload = {'appid': appid, 'q': query, 'from': from_lang, 'to': to_lang, 'salt': salt, 'sign': sign} # Send request r = requests.post(url, params=payload, headers=headers) result = r.json() # Show response #print(json.dumps(result, indent=4, ensure_ascii=False)) return result["trans_result"][0]['dst'] print(baidu_api(query,from_lang, to_lang))
三、Python調(diào)用小牛機(jī)器翻譯API代碼
以下代碼是經(jīng)過(guò)我改進(jìn)后的代碼,效率更高一些,供大家參考。小?,F(xiàn)在提供100萬(wàn)字符/月的額度,大家可以申請(qǐng)?jiān)囉谩?/p>
import json import requests apikey="YOUR_API_KEY" def translate(sentence, src_lan, tgt_lan): url = 'http://api.niutrans.com/NiuTransServer/translation?' data = {"from": src_lan, "to": tgt_lan, "apikey": apikey, "src_text": sentence} res = requests.post(url, data = data) res_dict = json.loads(res.text) if "tgt_text" in res_dict: result = res_dict['tgt_text'] else: result = res return result if __name__ == "__main__": while True: line = input("請(qǐng)輸入要翻譯的文本:") try: trans = translate(line, 'auto', 'en') print(trans+"\n---------") except Exception as exc: print(exc)
四、Python調(diào)用同花順機(jī)器翻譯api
之前我已經(jīng)寫出采用Python調(diào)用同花順機(jī)器翻譯api來(lái)翻譯字幕的代碼,詳情如下:
import json,os,sys import requests import easygui as g # appid = '你申請(qǐng)的id' # appkey = '你申請(qǐng)的key' # 解說(shuō)打包報(bào)錯(cuò)問(wèn)題 os.environ['REQUESTS_CA_BUNDLE'] = os.path.join(os.path.dirname(sys.argv[0]), 'cacert.pem') def get_key(): """讀取本地appid.txt,獲取id和key并生成字典""" dic={} with open("appid.txt","r",encoding="utf-8") as f: lines=[line.strip() for line in f.readlines()] for line in lines: ls=line.split("=") dic[ls[0].strip()]=ls[1].strip() return dic def getToken(): "因?yàn)橛猛樀腁PI時(shí)要校驗(yàn)token,由于token只有24小時(shí)的有效期,因此每次都要調(diào)用一下,以防過(guò)期。本函數(shù)獲取最新的token" tokenUrl = 'https://b2b-api.10jqka.com.cn/gateway/service-mana/app/login-appkey' param = {} param['appId'] = appid param['appSecret'] = appkey authResult = requests.post(tokenUrl, data=param) authResult = authResult.content res = json.loads(authResult) access_token = '' if 0 == res['flag']: access_token = res['data']['access_token'] return access_token def translate(texts, token): "調(diào)用同花順機(jī)器翻譯API函數(shù),注意這里是英文翻譯成中文,如果要中文翻譯成英文要修改【param['from']】為zh,【param['to'] 】為en" ls=[] if '' == token: return param = {} param['app_id'] = appid param['from'] = "en" param['to'] = 'zh' param['domain'] = 'default' param['text'] = json.dumps(texts) headers = {"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", "open-authorization": "Bearer" + token} url = 'https://b2b-api.10jqka.com.cn/gateway/arsenal/machineTranslation/batch/get/result' response = requests.post(url, headers=headers, data=param) Ret = response.content res = json.loads(Ret) if 0 == res['status_code']: res = res['data'] for rst in res['trans_result']: ls.append(rst['dst']) return ls def read_srt(file): "讀取字幕文件,生成字幕序號(hào)、時(shí)間和字幕內(nèi)容的列表" with open(file, "r", encoding = "utf-8-sig") as f: lines=[line.strip() for line in f.readlines()] max_line=len(lines) if max_line<=600: texts=lines[2:max_line:4] times=lines[1:max_line:4] nums=lines[:max_line:4] else: g.msgbox("字幕文件超過(guò)150行!請(qǐng)更換文件。") return nums,times,texts def add_to_srt(nums,times,texts,trans): "生成新的字幕文件,把譯文也添加上。" final_list=[] for (num,time,text,tran) in zip(nums,times,texts,trans): new_line = num + "\n"+ time + "\n" + text + "\n" + tran +"\n\n" final_list.append(new_line) with open(srt.replace(".srt", "_new.srt"), "wt", encoding= "utf-8-sig") as f: f.write("".join(final_list)) print("done!") if __name__ == '__main__': d=get_key() appid=d["id"] appkey=d["key"] title='請(qǐng)打開字幕文件' srt=g.fileopenbox(default='*.srt') nums,times,texts=read_srt(srt) token = getToken() #token有效期為24小時(shí),請(qǐng)?jiān)趹?yīng)用程序中做好定時(shí)獲取操作,避免token失效 trans=translate(texts, token) add_to_srt(nums,times,texts,trans) g.msgbox("字幕文件已經(jīng)翻譯成功,請(qǐng)?jiān)谧帜凰谀夸洸榭础?)
五、Python調(diào)用彩云 小譯機(jī)器翻譯api
彩云這個(gè)小而美的機(jī)器翻譯一直很低調(diào),翻譯的速度和質(zhì)量都還不錯(cuò)。以下是相關(guān)的樣例代碼:
import requests import json url = "http://api.interpreter.caiyunai.com/v1/translator" token = "你的令牌" #這里填寫你自己的令牌 payload = { #"source" : ["Where there is a will, there is a way.", #"ColorfulClouds Weather is the best weather service."], "source" : "Where there is a will, there is a way.", "trans_type" : "en2zh", "request_id" : "demo", } headers = { 'content-type': "application/txt", 'x-authorization': "token " + token, } response = requests.request("POST", url, data=json.dumps(payload), headers=headers) #print(response.text) resp = json.loads(response.text)['target'] print(resp)
六、Python調(diào)用阿里云機(jī)器翻譯api
阿里云機(jī)器翻譯api的調(diào)用比較繁瑣,申請(qǐng)過(guò)程也較復(fù)雜,其翻譯質(zhì)量倒時(shí)一般,大家可以有選擇地使用以下代碼:
from alibabacloud_alimt20181012.client import Client as alimt20181012Client from alibabacloud_tea_openapi import models as open_api_models from alibabacloud_alimt20181012 import models as alimt_20181012_models from alibabacloud_tea_util import models as util_models ACCESS_KEY_ID = 【Access_key_id>】#這里把尖括號(hào)里的 Acess_key_id和Acess_key_secret分別修改為自己申請(qǐng)的通用翻譯api ACCESS_KEY_SECRET = 【Access_key_secret】 def create_client( access_key_id: str, access_key_secret: str, ) -> alimt20181012Client: config = open_api_models.Config( access_key_id=access_key_id, access_key_secret=access_key_secret ) config.endpoint = f'mt.cn-hangzhou.aliyuncs.com' return alimt20181012Client(config) def translate(text): client = create_client(ACCESS_KEY_ID, ACCESS_KEY_SECRET) translate_general_request = alimt_20181012_models.TranslateGeneralRequest( format_type='text', source_language='en', target_language='zh', source_text=text, scene='general' ) runtime = util_models.RuntimeOptions() resp = client.translate_general_with_options(translate_general_request, runtime) return resp.body.data.__dict__['translated'] print(translate("Rome is not built in a day."))
七、利用ChatGPT來(lái)翻譯
ChatGPT也可以用于翻譯,只要我們給它發(fā)出指令即可。代碼如下:
import openai openai.api_base = "https://api.openai.com/v1" openai.api_key = "YOUR_API_KEY" model_engine_id = "text-davinci-003" while True: prompt = input("Q:") completions = openai.Completion.create( engine=model_engine_id, prompt="Translate the following sentences into Chinese:"+prompt, max_tokens=800, ) message = completions.choices[0].text.strip() print("A:",message,end="\n")
八、學(xué)后反思
1. 本文總結(jié)了六大機(jī)器翻譯api的調(diào)用方法,供大家參考。英譯漢,個(gè)人推薦的是Google翻譯。漢譯英推薦百度翻譯、小牛翻譯等。譯文潤(rùn)色可以調(diào)用ChatGPT幫忙。
2. 下一步,我將努力整合一下更多的機(jī)器翻譯api的調(diào)用方法,添加在一起,也可以寫一個(gè)調(diào)用包,以方便大家使用。
到此這篇關(guān)于Python調(diào)用各大機(jī)器翻譯API的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)Python調(diào)用翻譯API內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python+QTimer計(jì)時(shí)器實(shí)現(xiàn)攝像頭視頻的播放和暫停
這篇文章主要為大家詳細(xì)介紹了Python如何通過(guò)QTimer計(jì)時(shí)器實(shí)現(xiàn)攝像頭視頻的播放和暫停功能,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-11-11Django城市信息查詢功能的實(shí)現(xiàn)步驟
Django中的查詢操作是數(shù)據(jù)庫(kù)操作中一個(gè)非常重要的技術(shù),下面這篇文章主要給大家介紹了關(guān)于Django城市信息查詢功能的實(shí)現(xiàn)步驟,文中通過(guò)實(shí)例代碼和圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07Python matplotlib的使用并自定義colormap的方法
今天小編就為大家分享一篇Python matplotlib的使用并自定義colormap的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12使用Python在Excel中創(chuàng)建和取消數(shù)據(jù)分組
Excel中的分組是一種通過(guò)添加層級(jí)結(jié)構(gòu)將相鄰行或列組織在一起的功能,當(dāng)分組完成后,用戶可以通過(guò)折疊或展開數(shù)據(jù)組來(lái)簡(jiǎn)化數(shù)據(jù)視圖,這篇博客將介紹如何使用Python在Excel中創(chuàng)建或取消數(shù)據(jù)分組,需要的朋友可以參考下2025-02-02langchain中的chat?models介紹和使用實(shí)例
這篇文章主要介紹了langchain中的chat?models介紹和使用實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11