文章目錄
- 一、需求分析
- 二、已做好的批量檔案翻譯工具的使用
- 三、開發程序
- (一)個人開發者賬號注冊
- (二) 創建應用和實體
- (三)介面呼叫及代碼實作
- 1、API介面介紹
- 3、批量檔案翻譯開發
- 四、總結
一、需求分析
需求:
最近有個任務,需要對一批檔案進行漢譯英的翻譯
剛開始想著挺簡單的呀,那就直接復制到翻譯軟體中,在復制出來唄,
有很多辦法可以實作翻譯:
可以使用谷歌翻譯,這個完全免費的,但是不好的地方就是需要一個檔案一個檔案的進行匯入,我幾百個檔案的話,估計手就要廢掉了,

也可以使用網易有道詞典:

對單個檔案手工復制、粘貼的翻譯方式過于繁瑣,考慮到作業的重復性和本人追求提高效率、少動手(懶),

做為計算機行業的一份子,應該充分的利用好,不然技術不就白學了,我就利用的很充分,

我在網上找了幾款翻譯api,通過對比翻譯的結果和學習成本,選擇了**有道智云的服務**,自己開發了一個批量翻譯的小軟體,詳細記錄一下使用和開發程序,后面的小伙伴們有相關需求,可以參考,
使用Python呼叫已有的介面的方法,自己實作一個批量翻譯工具,一勞永逸,
我計劃著連續更新一個月左右,把詳細的整個程序都記錄下來,也方便粉絲們使用,
二、已做好的批量檔案翻譯工具的使用
我這里開發批量檔案翻譯工具使用python作為開發工具,功能如下:
?????1)通過檔案夾選擇多個檔案;
?????2)可以將多個檔案的翻譯結果存到目標檔案夾下,
話不多說,看圖↓↓↓↓↓

部分翻譯結果展示(涉及作業內容的保密性,這里用荷塘月色作為樣例):

可以先嘗試一下,我上傳到了百度網盤里:

可以關注我公眾號:回復:20200910即可拿到資源哦,同時也會同步到GitHub中,鏈接在文章末尾,

三、開發程序
下面開始詳細介紹呼叫有道智云API介面的步驟和軟體開發的程序:
(一)個人開發者賬號注冊
首先,需要注冊個人的開發者賬號,
在官網點擊注冊,然后填寫個人資料,即可完成注冊,官網地址:http://ai.youdao.com/gw.s


?
(二) 創建應用和實體
注冊成功并登錄后個人中心頁面如下圖,有道智云提供了自然語言翻譯、文字識別、語音合成、語音測評等服務介面, 這些服務介面都是通過以實體的方式運行的,通過應用進行管理的,需要分別創建實體、創建應用,通過應用獲取應用ID和應用密鑰等資訊,

我這里用到的是自然語言翻譯服務,首先,需要分別創建一個應用、創建一個自然語音翻譯的實體;其次,需要將實體系結到應用上,最后,就可以通過應用的應用ID、應用密鑰呼叫自然語音翻譯api介面了,有道平臺會對不同的實體、應用的使用情況進行記錄、分析、收費,剛剛注冊的體驗者會有免費體驗字數和50元的體驗金哦(加客服貌似還會有額外的50元的),
創建實體的步驟:
根據使用需求,選擇對應服務(“自然語言翻譯”/“文字識別OCR”/“語音合成TTS”/“語音識別ASR”/“智能語音評測”/“多平臺編輯器”)->“創建實體”,按步驟完成實體創建,

創建應用并系結實體(應用介面分為三種:API、安卓、ios介面):
點擊“應用管理”->“我的應用”->“創建應用”,填寫應用名稱等相關資訊,選擇接入方式,并系結我們所創建的實體,完成應用創建,我們這里用到的是API方式接入,安卓、ios介面需要根據提示填寫相應的資訊,詳見官網新手指南,

應用創建成功后,可獲取應用ID(appKey)和應用密鑰等資訊,這些資訊是呼叫API介面必不可少的引數,
(三)介面呼叫及代碼實作
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時,則會出現不同含義的錯誤碼,詳細含義可查閱官方開發檔案,
3、批量檔案翻譯開發
批量翻譯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),
關注我,期待下次更新此系列吧,

CSDN認證博客專家
Linux
分布式
Java
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/18637.html
標籤:AI
上一篇:局域網lan和wlan
