最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

教你如何利用Python批量翻譯英文Word文檔并保留格式

 更新時(shí)間:2021年05月17日 14:20:44   作者:程序員啟航  
本文將給大家分享一個(gè)實(shí)用的Python辦公自動(dòng)化腳本 利用Python批量翻譯英文Word文檔并保留格式,最終效果甚至比部分收費(fèi)的軟件還要好!文中有非常詳細(xì)的代碼示例.需要的朋友可以參考下

一、需求描述

手上有大量外文文檔(本案例以5份為例,分別命名為 test1.docx test2.docx 以此類推),其中一份如下:

Image

基本需求「批量將這些文檔的內(nèi)容全部翻譯成中文,并轉(zhuǎn)存到新的文件中」,效果如下:

Image

高級(jí)需求:基本需求滿足的同時(shí),要求 「保留原文檔的格式」,效果如下:

Image

二、邏輯梳理

2.1 翻譯 API

本需求的核心是翻譯,策略是利用網(wǎng)絡(luò)的翻譯 API,這里推薦百度翻譯開放平臺(tái),不考慮并發(fā)數(shù)的話可以用標(biāo)準(zhǔn)版,免費(fèi)使用不限字符量!

百度翻譯開放平臺(tái):http://api.fanyi.baidu.com/api/trans/product/index

在使用百度的通用翻譯 API 之前需要完成以下工作:

1.使用百度賬號(hào)登錄百度翻譯開放平臺(tái)(http://api.fanyi.baidu.com);

2.注冊(cè)成為開發(fā)者,獲得APPID;

3.進(jìn)行開發(fā)者認(rèn)證(如僅需標(biāo)準(zhǔn)版可跳過);

4.開通通用翻譯API服務(wù):開通鏈接

5.參考技術(shù)文檔和Demo編寫代碼

Image

完成后在個(gè)人頁(yè)面在即可看到 ID 和密鑰,這個(gè)很重要!下面給出整理好的通用翻譯 API 的 demo,已經(jīng)對(duì)輸出做簡(jiǎn)單修改,代碼拿走就能用!

ImageImage

可以看到,測(cè)試內(nèi)容準(zhǔn)確的被翻譯出來,注意如果需要多次訪問 API,免費(fèi)版有并發(fā)數(shù)和時(shí)間限制,可以用 time 模塊睡眠一秒

2.2 格式修改

高級(jí)需求的難點(diǎn)就是保留格式,簡(jiǎn)單來說原文檔的頁(yè)面格式和段落格式是什么,翻譯后對(duì)應(yīng)的部分就是什么。

基于上述的邏輯關(guān)系,只需要獲取原文檔的對(duì)應(yīng)內(nèi)容再賦值給新翻譯的文檔即可。(暫時(shí)只能滿足頁(yè)面設(shè)置和段落設(shè)置的統(tǒng)一,針對(duì)一段中特定詞語(yǔ)的格式修改,保證精確性需要基于自然語(yǔ)言處理NLP,本文暫不涉及)

2.2.1 頁(yè)面樣式

頁(yè)面樣式只要包括邊距、方向、高度、寬度等等,從原文檔中可以看到,采取的是窄邊距。但我們無需知道窄邊距四個(gè)方向應(yīng)該如何設(shè)置,只需要在代碼中呈現(xiàn)新舊文檔的變量傳遞即可,具體如下

Image

2.2.2 段落樣式

段落樣式包括對(duì)齊、縮進(jìn)、間距等等,原文檔中采取了段后縮進(jìn),標(biāo)題是居中對(duì)齊。這些設(shè)置在變量傳遞中能夠很好完成。如果原文檔中沒有設(shè)置的變量值為 None

Image

2.2.3 文字塊樣式修改

對(duì)于字號(hào)、加粗、斜體、顏色等樣式調(diào)整,采取的策略是建立空列表,遍歷原文檔每一段每一個(gè)文字塊,獲取相應(yīng)屬性并放到各自的列表中,對(duì)同一段而言,其包含的文字塊屬性最多的選項(xiàng)賦值給翻譯后文檔的對(duì)應(yīng)段落(如同一段全部或大部分的文字是加粗,則翻譯后對(duì)應(yīng)段落所有文字塊均設(shè)置為加粗) 對(duì)NLP感興趣的讀者可自行嘗試如何高度還原英文文檔中某些特定詞語(yǔ)的樣式修改,并在翻譯后的文檔中體現(xiàn)出來

Image

上面的代碼不包含對(duì)字體的設(shè)置,因?yàn)闆]必要把英文的字體傳遞給中文文檔。對(duì)中文字體的設(shè)置之前的文章有提到過,比較復(fù)雜,直接見代碼:

from docx.oxml.ns import qn
 
run.font.name = '微軟雅黑'
r = run._element.rPr.rFonts
r.set(qn('w:eastAsia'), '微軟雅黑')

2.3 整體實(shí)現(xiàn)步驟

現(xiàn)在每個(gè)部分操作均以完成,考慮到本例中有多個(gè)文檔均需要翻譯,故全部邏輯如下:

1.利用 glob 模塊批處理框架可獲取某個(gè)文件的絕對(duì)路徑

2.由 python-docx 完成 Word 文件實(shí)例化后對(duì)段落進(jìn)行解析

3.解析出的段落文本交給百度通用翻譯 API,解析返回的 Json 格式結(jié)果(上面的修改 demo 中已經(jīng)完成了這一步)并重新寫入新的文件

4.同個(gè)文件全部解析、翻譯并寫入新文件后保存文件

三、代碼實(shí)現(xiàn)

導(dǎo)入需要的模塊,除翻譯 demo 中需要的庫(kù)外還需要 glob 庫(kù)批量獲取文件、python-docx 讀取文件、time 模塊控制訪問并發(fā)。為什么要 os 模塊見下文:

import requests
import random
import json
from hashlib import md5
import time
from docx import Document
import glob
import os

對(duì)原 demo 的部分內(nèi)容進(jìn)行保留,涉及到 query 參數(shù)的代碼需要移動(dòng)到后面的循環(huán)中。保留的部分:

Image

效果如下

Image

獲取到段落文本后,可以將段落文本賦值給 query 參數(shù),調(diào)用 API demo 的后續(xù)代碼。輸出結(jié)果的同時(shí)用 add_paragraph 將結(jié)果寫入新文檔

Image

最后保存成新文件,期望命名為 原文件名_translated 的形式,可用 os.path.basename 方法獲取并經(jīng)字符串拼接達(dá)到目的:

wordfile_new.save(path + r'\\' + os.path.basename(file)[:-5] + '_translated.docx')

Image

單個(gè)文件操作完成后將讀取和創(chuàng)建文件的代碼塊放到批處理框架內(nèi):

Image

完成了上面的內(nèi)容后,基本需求就完成了。根據(jù)我們梳理的對(duì)樣式的修改知識(shí),再把樣式調(diào)整的代碼加進(jìn)來就行了,最終完整代碼如下:

Image

代碼運(yùn)行完畢后得到五個(gè)新的翻譯后文件

Image

翻譯效果如下,可以看到英文被翻譯成中文,并且樣式大部分保留!

Image

至此,所有文檔都被成功翻譯,當(dāng)然這是機(jī)器翻譯的,具體應(yīng)用時(shí)還需要對(duì)關(guān)鍵部分進(jìn)一步人工調(diào)整,不過整體來說還是一次成功的Python辦公自動(dòng)化嘗試!

相關(guān)文章

  • Python帶你從淺入深探究Tuple(基礎(chǔ)篇)

    Python帶你從淺入深探究Tuple(基礎(chǔ)篇)

    大家都知道Python中的元組容器序列(tuple)與列表容器序列(list)有很多相同之處,他們雖然都可以存儲(chǔ)任意類型的數(shù)據(jù),但是一個(gè)元組定義好之后就不能夠再進(jìn)行修改,對(duì)Python Tuple相關(guān)知識(shí)感興趣的朋友一起看看吧
    2021-05-05
  • Python使用MD5加密字符串示例

    Python使用MD5加密字符串示例

    這篇文章主要介紹了Python使用MD5加密字符串示例,對(duì)一些可能出現(xiàn)的錯(cuò)誤點(diǎn)上本文也給出提醒,需要的朋友可以參考下
    2014-08-08
  • Matplotlib繪圖基礎(chǔ)之圖例詳解

    Matplotlib繪圖基礎(chǔ)之圖例詳解

    Matplotlib?中的圖例是幫助觀察者理解圖像數(shù)據(jù)的重要工具,通常包含在圖像中,用于解釋不同的顏色、形狀、標(biāo)簽和其他元素,下面我們就來看看在繪圖時(shí)如何靈活運(yùn)用圖例吧
    2023-08-08
  • python異常處理和日志處理方式

    python異常處理和日志處理方式

    今天小編就為大家分享一篇python異常處理和日志處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • NumPy矩陣乘法的實(shí)現(xiàn)

    NumPy矩陣乘法的實(shí)現(xiàn)

    本文主要介紹了NumPy矩陣乘法的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • python基礎(chǔ)編程小實(shí)例之計(jì)算圓的面積

    python基礎(chǔ)編程小實(shí)例之計(jì)算圓的面積

    Python是最常用的編程語(yǔ)言,這種語(yǔ)言就是一種可以快速開發(fā)應(yīng)用的解釋型語(yǔ)言,有些用戶不知道該怎么在Python編程里計(jì)算圓的面積,現(xiàn)在就給大家具體解釋一下,下面這篇文章主要給大家介紹了關(guān)于python基礎(chǔ)編程小實(shí)例之計(jì)算圓的面積的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • 基于Python開發(fā)PDF轉(zhuǎn)Doc格式小程序

    基于Python開發(fā)PDF轉(zhuǎn)Doc格式小程序

    這篇文章主要為大家詳細(xì)介紹了如何基于Python開發(fā)PDF轉(zhuǎn)Doc格式小程序,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-03-03
  • 使用Python腳本和ADB命令實(shí)現(xiàn)卸載App

    使用Python腳本和ADB命令實(shí)現(xiàn)卸載App

    這篇文章主要介紹了使用Python腳本和ADB命令實(shí)現(xiàn)卸載App的實(shí)現(xiàn)方法,文中給出了完整的示例代碼,相信對(duì)大家具有一定的參考價(jià)值,有需要的朋友們下面來一起看看吧。
    2017-02-02
  • Django使用Channels實(shí)現(xiàn)WebSocket的方法

    Django使用Channels實(shí)現(xiàn)WebSocket的方法

    WebSocket是一種在單個(gè)TCP連接上進(jìn)行全雙工通訊的協(xié)議。WebSocket允許服務(wù)端主動(dòng)向客戶端推送數(shù)據(jù)。這篇文章主要介紹了Django使用Channels實(shí)現(xiàn)WebSocket,需要的朋友可以參考下
    2019-07-07
  • python打包exe文件并隱藏執(zhí)行CMD命令窗口問題

    python打包exe文件并隱藏執(zhí)行CMD命令窗口問題

    這篇文章主要介紹了python打包exe文件并隱藏執(zhí)行CMD命令窗口問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01

最新評(píng)論

江油市| 姜堰市| 陇南市| 青海省| 商南县| 甘德县| 尼玛县| 大名县| 永和县| 鱼台县| 哈密市| 夏河县| 泽普县| 南雄市| 乌拉特前旗| 肇州县| 南岸区| 枝江市| 荣昌县| 临沭县| 宜城市| 慈溪市| 彰化县| 同心县| 湘潭市| 台前县| 嘉兴市| 绍兴市| 论坛| 平陆县| 扎鲁特旗| 安阳县| 屯留县| 革吉县| 泸定县| 南宁市| 临沂市| 锡林浩特市| 安新县| 巴南区| 迁西县|