成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

手把手教你用 Python 腳本調用 DeepL API Pro 進電子書的行進行中英文自動翻譯

開發 后端
html 文件整理起來比較麻煩,一個比較方便的手段是使用 BeautifulSoup 模塊。BeautifulSoup 本來是爬蟲工具,但,它又很方便的手段可以清理 html 文件。

[[439869]]

大家好,我是我是Python進階者。

一、前言

前幾天有個叫【張茜】的粉絲找我看了一個代碼,關于電子書中英文自動翻譯的,感覺挺有意思,這里拿出來給大家分享下。

二、簡介

這個小項目是git上一個叫【xiaolai】的大佬分享的,看上去還是挺新的,發布不太久,14天前發布的。

一本書中文譯文大約 39 萬字的書,差不多用 1.5 小時就可以處理完畢(包括基本的格式編輯),這速度恐怖如斯!下面一起來看看這款神器的使用方法吧!

三、電子書格式轉換路徑

首先,需要將電子書從 Kindle 中導出來,并用 ePubor 進行 deDRM,而后將電子書轉換成 epub 文件。

我都是在 Amazon 上直接買,而后在電腦上安裝一個老版本的 Kindle App,用鼠標右鍵點擊書名,下載,并不打開該電子書,而后退出 Kindle。

ePubor Ultimate 也是個收費軟件,能把舊版 Kindle 下載的電子書的 DRM 去掉;將 awz 文件轉換成 epub 文件。(可參考這個網頁)

然后,再用免費軟件 Calibre 將 epub 轉換成 htmlz 文件(一個壓縮包)。(我嘗試過使用命令行工具包 pandoc,但,比較之后,發現 Calibre 在保留樣式方面可能更好一點……)

在 Terminal 里用 unzip 命令解開 htmlz 壓縮包。

四、選擇 html 格式作為翻譯格式的原因

可以保留書中大量的腳注、尾注及其鏈接;DeepL 有專門的 API 參數處理 xml tag,tag_handling="xml";

可以通過 css 文件隨意設置顯示樣式,比較靈活;

可以通過插入 javascript 函數指定某種特定語言的顯示(比如,只顯示中文);

可以用來作為源文件轉換成任意格式的電子書……

另外,在調用 tag_handling="xml" 之后,DeepL API 返回的譯文非常規整,能夠保留所有 html tag;并且,“返回字符串” 與 “原字符串” 相同,可以作為一個判斷依據 —— 該行有沒有被翻譯,如果沒有,在生成的譯文 html 文件中,該行沒必要重復出現……

五、清理 html

html 文件整理起來比較麻煩,一個比較方便的手段是使用 BeautifulSoup 模塊。BeautifulSoup 本來是爬蟲工具,但,它又很方便的手段可以清理 html 文件。

以下腳本主要完成以下工作:

首先將 html 文件里的所有 \n 去掉;將所有

單獨放在一行;將所有

也單獨放在一行;將

內部的所有 \n 全都去掉;并在之前加上一個空行;…… 當然,你可以在這里做更多你自己喜歡做的格式清理。為了方便起見,path 和 source_filename 以及 target_filename 都單獨指定。代碼如下:

  1. import bs4 
  2. import re 
  3.  
  4. path = "John Law/" # 文件夾名稱末尾得有 / 
  5. source_filename = "index.html" 
  6. target_filename = "index2.html" 
  7.  
  8. html = open(path+source_filename) 
  9. htmltext = html.read() 
  10.  
  11. soup = bs4.BeautifulSoup(htmltext) 
  12.  
  13. # 將所有的 \n 去掉…… 
  14. htmltext = str(bs4.BeautifulSoup(htmltext)).replace("\n"""
  15.  
  16. # <h... 之前添加空行 
  17. pttn = r'<h' 
  18. rpl = r'\n\n<h' 
  19. re.findall(pttn, htmltext) 
  20. htmltext = re.sub(pttn, rpl, htmltext) 
  21.  
  22. # <div... 之前添加空行 
  23. pttn = r'<div' 
  24. rpl = r'\n\n<div' 
  25. re.findall(pttn, htmltext) 
  26. htmltext = re.sub(pttn, rpl, htmltext) 
  27.  
  28. # </div> 之前添加空行 
  29. pttn = r'</div>' 
  30. rpl = r'\n\n</div>' 
  31. re.findall(pttn, htmltext) 
  32. htmltext = re.sub(pttn, rpl, htmltext) 
  33.  
  34. # <p... 之前添加空行 
  35. pttn = r'<p' 
  36. rpl = r'\n\n<p' 
  37. re.findall(pttn, htmltext) 
  38. htmltext = re.sub(pttn, rpl, htmltext) 
  39.  
  40. fileSave = open(path+target_filename, "w"
  41. fileSave.write(htmltext) 
  42. print(htmltext) 

六、逐行提交 DeepL API Pro 進行翻譯

將清理過的 html 交給以下腳本,逐行提交給 DeepL 翻譯,并返回。

為了方便起見,path 和 source_filename 以及 target_filename 都單獨指定。

lines 是 source_filename 的內容 new_lines 是將要放到 target_filename 中的內容 startline 是 “從哪一行開始提交 DeepL 翻譯” endline 是 “到哪一行開始結束提交 DeepL 翻譯”。代碼如下:

  1. import re 
  2. import requests 
  3.  
  4. auth_key = "<your DeepL API Pro authentication key>" # 注意,要訂閱的是 DeepL API Pro 
  5. target_language = "ZH"  ## 當然,你可以將目標語言設置成任何 DeepL 支持的語言 
  6.  
  7. path = "John Law/" # 文件夾名稱末尾得有 / 
  8. source_filename = "index2.html" # 上一步生成的文件,成為這一步的 “源文件” 
  9. target_filename = "index3.html" 
  10.  
  11. def translate(text): 
  12.     result = requests.get(  
  13.        "https://api.deepl.com/v2/translate"
  14.        params={  
  15.          "auth_key": auth_key, 
  16.          "target_lang": target_language, 
  17.          "text": text, 
  18.          "tag_handling""xml", # 這個參數確保 DeepL 正確處理 html tags 
  19.        }, 
  20.     )  
  21.     return result.json()["translations"][0]["text"
  22.  
  23. def add_language_tag_en(html): 
  24.     pttn = re.compile(r'^<(.*?) class="(.*?)">', re.M) 
  25.     rpl = r'<\1 class="\2 en">' 
  26.     re.findall(pttn, html) 
  27.     html = re.sub(pttn, rpl, html) 
  28.     return html 
  29.  
  30. def add_language_tag_cn(html): 
  31.     pttn = re.compile(r'^<(.*?) class="(.*?)">', re.M) 
  32.     rpl = r'<\1 class="\2 cn">' 
  33.     re.findall(pttn, html) 
  34.     html = re.sub(pttn, rpl, html) 
  35.     return html 
  36.  
  37. lines = open(path+source_filename, "r").readlines() 
  38.  
  39.  
  40. new_lines = [] 
  41. line_count = 0 
  42. startline = 16 
  43. endline = 4032 
  44.  
  45. for line in lines: 
  46.     line_count += 1 
  47.     if line_count < startline or line_count > endline or line.strip() == ''
  48.         new_lines.append(line) 
  49.         print(line) 
  50.         continue         
  51.      
  52.     succeeded = False 
  53.     while not succeeded: 
  54.         # 以下比較粗暴的 try... except,用來防止執行過程中出現 DeepL 連接錯誤而導致翻譯任務中斷…… 
  55.         try: 
  56.             line_translated = translate(line) 
  57.             # 以下一行確保將返回的字符串轉換成一整行,而非含有 \n 的多行文本 
  58.             line_translated = line_translated.replace("\n"""
  59.              
  60.             succeeded = True 
  61.         except
  62.             succeeded = False 
  63.      
  64.     if line.strip() == line_translated.strip():  
  65.         #返回的字符串與原字符串相同,說明 html tag 之間的內容無需翻譯 
  66.         new_lines.append(line) 
  67.         print(line) 
  68.     else
  69.         line = add_language_tag_en(line) 
  70.         line_translated = add_language_tag_cn(line_translated) 
  71.         new_lines.append(line) 
  72.         print(line) 
  73.         new_lines.append(line_translated) 
  74.         print(line_translated) 
  75.  
  76. with open(path+target_filename, 'w'as f: 
  77.     f.write("\n".join(new_lines)) 

七、結果展示

1、運行代碼之后,會自動讀取待翻譯的文件,然后進行翻譯,如下圖所示:

2、運行完程序之后,可以得到想要的結果,如下圖所示:

八、總結

大家好,我是Python進階者。這篇文章主要給大家介紹了使用Python腳本調用DeepL API Pro進電子書的行中英文自動翻譯的方法,代碼親測可行,歡迎大家積極嘗試,下次再遇到需要自動翻譯的時候,不妨調用下這個API,興許事半功倍呢!

 

責任編輯:武曉燕 來源: Python爬蟲與數據挖掘
相關推薦

2022-08-04 10:39:23

Jenkins集成CD

2021-08-09 13:31:25

PythonExcel代碼

2022-10-19 14:30:59

2021-03-02 09:05:13

Python

2021-02-02 13:31:35

Pycharm系統技巧Python

2021-12-11 20:20:19

Python算法線性

2021-05-10 06:48:11

Python騰訊招聘

2020-11-08 14:13:31

Python帕累托分析開發

2011-03-28 16:14:38

jQuery

2021-02-04 09:00:57

SQLDjango原生

2021-02-06 14:55:05

大數據pandas數據分析

2020-12-17 09:40:01

Matplotlib數據可視化命令

2009-04-22 09:17:19

LINQSQL基礎

2021-05-17 21:30:06

Python求均值中值

2021-02-10 09:34:40

Python文件的壓縮PyCharm

2021-03-23 09:05:52

PythonExcelVlookup

2012-01-11 13:40:35

移動應用云服務

2021-08-02 23:15:20

Pandas數據采集

2020-03-08 22:06:16

Python數據IP

2021-01-21 09:10:29

ECharts柱狀圖大數據
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕亚洲欧美日韩在线不卡 | 国产亚洲一区在线 | 久久久久一区二区三区四区 | 91久久综合亚洲鲁鲁五月天 | 神马影院一区二区三区 | 国产精品一区视频 | 视频二区 | 免费一二区 | 极品国产视频 | 自拍偷拍中文字幕 | 亚洲精品久久久久国产 | 国产视频综合 | 国产精品亚洲一区二区三区在线 | 国产一区二区视频在线 | 欧美激情网站 | 亚洲综合视频 | 亚洲色图综合网 | 精品国产乱码一区二区三区 | 久久久成人网 | 亚洲欧洲在线观看视频 | 日韩在线播放视频 | 一区二区av | 一区二区三区在线看 | 欧州一区二区三区 | 亚洲福利一区 | 天天操网| 亚洲一区二区三区在线 | 精品一区二区久久久久久久网站 | 亚洲精品成人在线 | 亚洲日日 | 日韩一级不卡 | 国产精品区一区二区三 | 中文字幕 国产 | 国产成人精品一区二区三区 | 国产精品免费大片 | 一级大黄| 久久久日韩精品一区二区三区 | 午夜影院视频在线观看 | 亚洲 欧美 另类 综合 偷拍 | 亚洲国产aⅴ成人精品无吗 亚洲精品久久久一区二区三区 | 在线观看亚洲专区 |