李海亭 張靜
(陜西科技大學 陜西省西安市 710021)
在當代人工智能背景下,人與機器分工合作完成各種工作已經司空見慣。在這種人機分工合作工作模式中,許多以前通過手動或者人工借助機器而完成的工作都可以通過編寫代碼而由機器自動完成。這種人機分工合作的工作模式也同樣體在現代翻譯工作之中。當前各種翻譯技術已經在翻譯領域中得到應用(王華樹、李智,2019:67-72),并且在一定程度上改變了現代翻譯生態環境(徐彬、楊珍,2019:123-130),其中很多工作都通過編程開發的各種軟件和程序完成。其實,翻譯工作人員也完全可以通過學習一些基本的編程知識,掌握一些編程技能而將自己日常工作中遇到的各種翻譯操作通過編寫程序而自動完成,從而將大量時間精力用于翻譯中一些創造性的勞動。
翻譯中的許多操作可以通過編程而實現自動完成,但是因為任務小或者使用不廣泛不大而缺乏商業開發價值。但這一類編程對于譯者個人或者翻譯公司來說卻仍然有一定的價值。文章介紹了用Office VBA 所編寫的翻譯小程序在翻譯中的具體應用,旨在說明VBA 編程在翻譯自動化操作中有著非常廣闊的應用前景。
翻譯實踐中要處理的絕大多數文件都以辦公軟件,特別是微軟Word 文件的格式呈現。譯前和譯后編輯的許多過程也都可以在Office 軟件中完成。利用微軟Office 軟件附帶的VBA 編程語言,可以實現許多辦公操作的自動化(Mansfield,2010:viii)。在翻譯中,許多譯前和譯后編輯操作也都可以通過VBA 編程而自動化,因此Office VBA 編程應該在翻譯中,特別是譯前和譯后以及術語管理等其它方面有重要的作用,應該引起翻譯技術界的重視和研究。然而,作者同時以“VBA”和“翻譯”為關鍵詞在知網上搜索(搜索時間為2020 年1 月28 日),只得到了5 篇期刊文獻,而且都發表計算機或者其它工科類雜志上。說明VBA 編程在翻譯方面的應用還沒有引起翻譯界足夠的重視,特別是翻譯學術界還沒有專門的論文探討這個話題。當然,這并不能說明VBA 編程與在翻譯技術中可有可無,實際上無論在翻譯技術發展中還是從翻譯技術文獻中都能看到VBA 編程的重要作用。具體表現在以下兩個方面。
計算機輔助翻譯(CAT)是現代翻譯技術中非常重要的組成部分。計算機輔助翻譯軟件可以分為兩類:與文字處理軟件相結合的寄生系統和具有獨立界面的系統,而有些寄生系統就是利用了文字編輯軟件中的宏程序(徐彬、郭紅梅、國曉立,2007: 79-86)。由此可見,VBA 編程(宏程序是VBA 編程的大眾化名稱)實際上早就是翻譯技術的一個重要部分,不過因為翻譯界只關注翻譯技術的應用而并不關心翻譯技術的本質和技術實現手段,所以才不理解VBA 編程在翻譯中的重要作用。
雖然在知網上幾乎查不到翻譯界探討VBA 編程在翻譯中重要作用的文獻,但閱讀國內近些年探討翻譯技術的論文,可以發現已經有學者探討過VBA 編程在翻譯中的應用,不過他們所使用的術語都叫宏或者錄制宏。其實宏只不過是VBA 程序的常用叫法,而錄制宏也是VBA 編程最基礎和最初級的部分,其專業名稱就是VBA 編程(英文稱為VBA Programming)。錄制宏可以讓沒有學過編程的用戶將用戶反復使用的操作過程轉換為VBA 代碼,從而實現相同操作的自動化。通過錄制宏而產生的VBA 代碼都要通過編輯而刪除冗余代碼。例如,翻譯技術界有人多次提到了錄制宏在處理譯文標點符號(徐彬、郭紅梅、國曉立,2007: 79-86),術語收集整理(徐彬,2010: 45-49; 徐彬、郭紅梅,2017: 96-101),隱藏奇數段落以獲得原文與譯文逐段對照的格式中的作用(徐彬、郭紅梅,2017: 96-101),以及在翻譯中其他方面的應用(徐彬,2014: 107-111)。王華樹也在自己主編的翻譯技術教材中將“宏編程基礎與文本處理”作為翻譯技術課程體系構建中計算機基礎部分的一個內容(王華樹,2017:23-28)。從這些文獻可以看出VBA 編程應該成為翻譯技術的一個重要部分。翻譯界應該重視這一方面的研究和應用,使譯者在掌握VBA 編程的基礎上根據自己的需要而將許多翻譯操作自動化,從而節省時間精力,提高工作效率。
以下就對一些VBA 小程序的具體應用進行介紹。
根據運行方法的不同,以下介紹的翻譯小程序可以分為兩類:加載為Word 命令按鈕的小程序和啟用宏的Word 文檔小程序 。這兩種小程序從本質上沒有任何區別,只是代碼長短不同,完成的操作任務不同和應用場景不同。以下從兩類不同程序的特點,各自所包含的程序以及所完成的操作任務進行詳細說明。
3.1.1 此類小程序的特點
這類小程序比第二類使用更為頻繁,每次只能完成某一個操作,如刪除英文中的多余空格。一般來說,這一類小程序代碼比第二類小程序代碼更短,有些只有兩個語句。這類小程序更適合對已打開的文檔進行多次操作。而且操作失誤時可以及時用常用工具欄中的撤銷按鈕撤銷操作。因為使用頻繁,為了使用方便,可以將這些小程序添加到Word 命令欄中,每個小程序成為命令欄中的一個按鈕,并且給每個命令按鈕設置一個圖標和文字,可以像點擊Word 工具欄中的命令按鈕一樣使用。由于操作簡單,而且添加到了工具欄中,基本上直接看名稱就知道小程序所完成的操作任務,所以不必要有詳細的操作說明和幫助文件。

圖1:添加為Word 命令按鈕的VBA 翻譯小程序

圖2:術語校對界面
此類小程序不便之處在于對于對Office VBA 編程不熟悉的使用者來說,不知道如何將相應的文件添加到Word 模板中,然后再講小程序添加到工具欄中成為命令按鈕,并且為每個命令按鈕添加圖標和名稱。添加到工具欄的小程序效果如圖 1 所示。圖中最右側的11 個圖標就是添加了圖標和名稱的小程序命令按鈕。
3.1.2 小程序使用說明
此類小程序共有11 個。具體名稱如下:1.顯示隱藏字體;2.不顯示隱藏字體;3.隱藏字體轉非隱藏字體;4.刪除隱藏字體;5.序號轉文本;6.域轉為靜態文本;7.刪除所有書簽;8.刪除可選連字符;9.刪除空白段落;10.手動換行符轉段落標記;11.不間斷空格轉空格。
以上小程序中,第1 到第4 之間有非常密切的聯系,所以一并進行說明。這四個小程序都涉及到隱藏字體操作,而且都與譯后編輯校對相關。此外,這四個小程序第二類中的第3 個小程序有非常密切的關聯。
在翻譯實踐中,經常有客戶要求最終提交的譯文為原文和譯文段落對照的格式。對于后者,可以將原文按照段落進行復制,并且將奇數段落設置為隱藏文字。這樣在導入CAT 輔助軟件翻譯完成后導出來的譯文自然就是原文和譯文段落對照的格式(徐彬 & 郭紅梅, 2017)。其實在對譯文進行校對時也可以采用這種原文和譯文段落對照,并且原文段落設置為隱藏文字的格式。如果需要參看原文,就運行第1 個小程序,將原文顯示出來,以便于對照原文看譯文內容是否與原文內容意義相一致。如果原文和譯文內容意思一致,而需要對譯文進行潤色,就可以運行第2 個小程序。此時不顯示原文,只顯示譯文,審校者就可以專注于對譯文流暢性和可讀性的修改。在保證譯文內容沒有任何問題的情況下,如果客戶要提交原文和譯文段落對照的格式,可以運行第3 個小程序,將隱藏字體自動轉換文非隱藏字體。這樣就會避免因客戶Word 設置時,沒有勾選“顯示隱藏字體”而出現隱藏字體不顯示的問題。如果譯文沒有問題而客戶不要求提供原文和譯文段落對照的格式,可以運行第4 個小程序,自動將隱藏字體刪除(其實就是刪除原文段落),這樣就可以直接提交譯文。隨著機器翻譯質量的提高,機器翻譯+譯后編輯已經成為現代翻譯的主要模式(崔啟亮,2014:68-73;馮全功、崔啟亮,2016: 67-74+89+94;徐彬、郭紅梅,2015:71-76)。這四個小程序和第二類中的第3 個小程序可以為譯者在Word 中進行譯后編輯以及翻譯校對帶來極大方便。
各種計算機輔助翻譯軟件已經成為現代翻譯行業中的常用工具,使用CAT 工具翻譯時,為了在翻譯過程中減少各種格式標簽,最好采用靜態文本的格式,而在譯后編輯過程中,再按照客戶不同要求重新進行排版。這種方式在以出版為目的的翻譯中特別重要。因此在譯前可以將原文中或者從PDF 轉換來的Word 文件中的序號轉成靜態文本的數字,也可以將各種域轉換成為靜態文本。小程序中的5 用于將Word 文檔中的各種自動序號轉換為靜態文本,而小程序6 用于將各種不同域自動轉換為靜態文本。
為了使用現代CAT 工具或者機器翻譯,經常需要將紙質掃描成PDF 文檔或者圖片,再通過ABBYY FineReader 等OCR 軟件轉換為Word 文檔,最后導入CAT 工具進行翻譯(徐彬、郭紅梅、國曉立,2007:79-86)。在利用FineReader 將PDF 文檔轉換為Word 的過程中,作者發現最終的Word 文檔中會出現許多多余的書簽。這種書簽并不能通過FineReader 的轉換設置自動清除。它們不僅沒有任何信息而且還會在導入CAT 軟件后產生大量標簽,給翻譯工作帶來干擾。此外,這種書簽并不能通過Word 中的查找替換功能一次全部刪除,只能通過替換中的定位功能一個一個刪除。這樣會給譯前編輯工作造成了很大不便。因此,作者編寫了第7 個小程序,可以一次性刪除轉換成Word 文檔后的所有書簽,從為譯者譯前編輯節省大量時間和精力。
在利用FineReader 將PDF 文檔轉換為Word 文檔中,同樣會出現大量的可選連字符。一般情況下可選連字符在文檔中出現在行尾,但是從PDF 轉換成Word 文檔中的可選連字符因為轉換前后每行字數不同而并不出現在行尾。這種可選連字符不僅在格式上不符合排版要求,而且在使用CAT 術語庫時也會因為可選連字符破壞了詞匯的整體性而給使用術語帶來不良影響,所以應該全部刪除。熟悉Word 通配符功能的譯者可以使用Word 的查找和替換功能一次性刪除所有的可選連字符。然而,由于絕大多數Word 用戶并不熟悉通配符功能,所以并不知道如何一次性刪除所有的可選連字符。即使熟悉這種功能的用戶,也通過點擊加載到工具欄中相應的命令按鈕,運行使用小程序8,達到一鍵刪除所有的可選連字符。這種小程序不僅使用方面而且為譯者節省了大量的時間,讓譯者有更多的時間用于提高譯文質量。
小程序9 用于自動刪除當前文檔中的空白段落。這個小程序既可以用于譯前編輯,也可以用于譯后編輯,也可以用于翻譯以外的其它操作。在譯前編輯中主要可以刪除通過OCR 軟件轉換來的Word 文檔中的空白段落。在譯后編輯中也可以用于刪除沒有用的各種空白段落,包括只包含非打印字符的空白段落。
小程序10 和11 主要用于處理網頁上復制或者下載的文檔。眾所周知,網頁上的文字排版格式和日常所見到的文本格式并不相同。一般文檔中的段落末尾用的是段落標記而網頁上用的是手動換行符;一般文檔中英文單詞之間用的是空格,而網頁上的用的是不間斷空格。這給譯者利用現代網絡上的各種翻譯資源帶來了一定的不便。現代互聯網上有不少可以免費的資源可以在加工后供翻譯使用。例如,可以從網上下載免費的原文和譯文段落對照的文檔,然后利用各種對齊工具將這些文檔制作成為記憶庫,供翻譯時參考,或者制作成雙語平行語料庫用于翻譯研究。但從網絡上復制或者下載的文檔,通常會保留網絡上的段落格式和空格格式,因此需要將這些格式轉換為一般文檔格式,通過這兩個小程序可以前面的其他程序一樣實現一鍵完成操作任務,從而為翻譯人員帶來方便。
3.2.1 此類小程序特點
與第一類小程序不同,這類小程序保存為啟用宏的Word 文檔(后綴名為docm)或者為啟用宏的Excel 工作簿(后綴名為xlsm),也就是說小程序本身就是一個Word 文檔或者Excel 工作簿,不過與一般文檔或工作簿不同的是,這些文檔和工作簿中包含有一個或者多個小程序。為了方便程序運行,在文檔或者工作簿中加載了命令按鈕,用戶可以直接點擊命令按鈕運行小程序。同時,在Word 文檔或者Excel 工作簿中添加了小程序的使用說明。這樣就將運行命令按鈕和說明文件整合在了一起。為了防止使用者操作時失誤,利用Office 文檔的限制編輯功能對文件設置了限制編輯。也就是說使用者只能查看使用說明,并且運行程序而不能對文件做任何改動。
與第一類小程序不同,這類小程序在使用前不需要進行任何前期處理,所以運行起來更加方便。只要計算機上的Office 軟件中安裝了相應的VBA 組件并且設置好了宏安全性,完全可以像一個小軟件使用。這種小程序也更容易分享給其他人使用,因此傳播也更加容易。
此外,這一類小程序處理的任務也比第一類要更復雜一些,程序代碼也更長一些。每次運行后都需要根據目的打開所要處理的工作簿或者文檔。由于這種小程序處理文檔時不需要先打開所要處理文檔,因此文檔處理結果不能點擊通過Word 工具欄中的撤銷按鈕一鍵恢復操作。不過大多數處理過的文檔都另存為其它文檔,原來的文檔并不會被破壞。因此,如果操作失誤,只需刪除處理后產生的新文檔,而不會破壞原來的文檔。
3.2.2 小程序使用說明
這類小程序共有7 個,分別是:1.術語校對工具;2.術語自動插入原文工具;3.復制原文及隱藏奇數段落;4.原文譯文排版為段落對照;5.原譯文段落對照格式提取為原文和譯文;6.統計同一文件夾下文檔字數;7.Cat 導出對照格式轉為雙語平行語料文本。
以上7 個小程序中,第1 個用Excel VBA 編寫,第2 個在Excel VBA 中引用Word VBA 編寫,第6 個在Word VBA 中引用Excel VBA 編寫,其余全部用Word VBA 編寫。前兩個小程序都與翻譯術語有關,相關的編程技術問題已經做過介紹和探討(李海亭,2019:230-232)。
第1 小程序是一個術語校對工具。編寫這個術語校對工具是為了改變現在絕大多數術語校對工具中存在的問題?,F代各種術語校對工具中最大的問題就是術語校對工具界面都是表格形式。這種表格形式如果長時間校對,會令人眼花繚亂,而且容易錯行。此外,如果術語表中包含術語較多,一次無法完成校對任務,下次接著校對或者另外一人繼續校對時會忘記,或者不知道應該從哪條術語繼續校對。因此,本程序主要是解決術語校對中的界面問題和兩次校對時的遺忘問題。本程序在存儲翻譯術語的Excel 表格中添加一個運行命令按鈕和一個退出程序命令按鈕,點擊運行按鈕后存儲翻譯術語的表格和Excel 程序自動隱藏,只顯示一個術語校對界面。如圖2 所示,界面上有兩個文本框,“上一個”、“下一個”和“退出”三個命令按鈕。兩個文本框分別顯示原文術語和對應的譯文術語。如果術語存在問題可以在文本框中直接修改,修改結果自動保存到術語表中原來的位置。點擊“上一個”或者“下一個”,分別回到上一條術語和下一條術語。點擊“退出”后,界面退出,保存對術語表所做的修改,同時記住本次校對所到達的位置,然后返回到術語表界面。點擊術語表中的“退出程序”命令按鈕,直接退出Excel 程序。三個命令按鈕按照Windows 常規命令按鈕進行設計,也就是按鍵盤上的Tab 鍵可以跳轉到下一個命令按鈕,按Enter 鍵直接保存每一條術語校對結果并顯示下一條術語。因此,用戶可以直接用鍵盤操作而不必每次都點擊界面上的命令按鈕。下次校對或者另外一位校對者下次運行程序時會自動接著上次校對的術語條目繼續校對,因此不用擔心上次校對到了哪一條術語。

圖3:插入術語后的Word 文檔

圖4:統計同一文件夾下所有Word 文檔的結果列表
第2 個小程序是一個術語自動插入原文文檔的工具。這個工具用于將存儲在Excel 表格中的術語自動插入到Word 格式的原文文檔中。雖然CAT 工具在翻譯界已經成為主流工具,但目前仍有不少譯者只用辦公軟件,特別是Word 格式進行翻譯。這款翻譯術語工具可以讓這些譯者使用利用現代翻譯術語加快術語的處理,同時保持術語翻譯的一致性。這個程序在保存著翻譯術語的Excel 表格中加載一個命令按鈕。用戶將自己的翻譯術語復制到表格相應的列中,然后點擊按鈕,程序開始運行,然后出現一個打開文檔對話框,提醒用戶打開需要翻譯的文檔,用戶選擇好需要處理的文檔后,點擊對話框的下面的“打開”,程序就會自動將術語譯文添加到對應的原文后面,并且用紅色顯示。添加術語后的文檔如圖3 所示。這樣,譯者在翻譯時就不必再擔心術語前后翻譯不一致,如果多人協作翻譯時也不必擔心不同譯者之間術語翻譯不一致的問題。同時也省去了譯者查詢和輸入術語譯文的麻煩。
第3 個小程序是為了利用CAT 軟件在翻譯過程中保留隱藏文字(隱藏文字保留不變)這一特征而設計的。利用CAT 軟件的這個特征,在將原文加載到CAT 軟件翻譯之前,可以先將原文文檔的每一個段落進行復制,并且將奇數段落隱藏。翻譯完成后從CAT軟件中導出時,自然就成了原文和譯文段落對照的格式。這一過程可以通過Word文字轉表格和表格轉文字的功能實現(徐彬、郭紅梅,2017:96-101)。本程序的就是將這個過程用程序來自動完成,而不必手動操作完成。運行程序后,出現一個打開文件對話框,選中要處理的原文后,程序自動將原文加工成所需要的格式,并且另存為另一個文件,文件名為“原文文件名+段落對照”的格式,存儲路徑與原文存儲路徑完全相同,而原文文件保持不變。
第4 個小程序與上一個在功能上有但一定的相似之處,結果都是生成原文譯文段落對照的文檔。不同之處在于,上一個是將原文導入CAT 軟件前,對原文進行加工,然后在CAT 軟件中進行翻譯,最終導出原文和譯文段落對照的格式。而這個小程序并不一定需要在CAT 軟件中進行翻譯,而是直接將已經存在的原文和譯文兩個獨立文檔加工成原文和譯文段落對照的格式。原文可以直接在Word 文檔中翻譯,最后將原文和譯文用這個小程序自動加工成段落對照的格式。也可以直接將原文加載到CAT軟件中直接進行翻譯,翻譯完成后再用這個小程序加工成段落對照的格式。兩個小程序之間雖然有相似之處,但是使用的環境并不相同。點擊“開始運行”之后,先后出現一個打開原文和打開譯文的文件打開對話框。選擇好原文和譯文后,程序會刪除自動原文和譯文中的空白段落,并檢測原文和譯文段落數是否相同,如果相同,就在原文存儲路徑下自動生成原文和譯文段落對照的Word 文檔,而源文檔保留不變。如果不同,小程序會自動將原文和譯文排列成兩列,并在相應的文件中自動生成一個新的名為“繼續運行”命令按鈕。用戶根據情況對原文和譯文進行編輯,等兩列完全對應之后,點擊“繼續運行”命令按鈕,就會將原文和譯文轉換為原文和譯文段落對照的格式。
第5 個小程序與第4 個小程序在功能上完全相反,是將原文和譯文段落對照的格式,提取為原文和譯文兩個獨立的文檔。這個程序主要用于將從各種渠道獲得的雙語對照文件,提取為兩個不同文檔,然后用于進行對齊,制作翻譯記憶庫和語料庫?,F在的雙語平行語料對齊軟件,無論是CAT附帶的對齊組件還是專用的對齊軟件,絕大多數都要求原文和譯文是兩個獨立的文件?,F在互聯網上有不少免費使用的原語和譯語對照文件。如果要利用這些文件提高翻譯效率,或者制作成雙語平行語料庫用于翻譯研究,必須先將它們對齊,制作成雙語語料料庫。這個小程序可以將網上下載的雙語段落對照文件,提取為兩個獨立的文件,以便于使用對齊軟件將原語和譯語兩個文件制作成翻譯記憶庫或者雙語平行語料庫。本小程序的運行方法與以上兩個基本相同,此處不再贅述。
在翻譯實踐中經常會涉及文件字數統計的問題。例如,客戶需要知道自己要求翻譯的文件總共有多少字。譯者需要知道自己在規定時間內要完成多少字的翻譯任務量。翻譯項目管理人員需要知道一個項目總共有多少字,給譯員分配任務時每位譯員要翻譯多少字等等。對于熟悉CAT 軟件的客戶、譯員或者項目管理人員來說,這些并沒有什么問題,因為現代CAT 軟件會詳細統計項目和項目中每個文件的字數。然而對于不使用CAT 軟件的人員,在項目文件較多時,一個一個統計所有翻譯文件的字數,就會非常麻煩。第6 個小程序就是為解決這個問題而編寫。用戶可以將同一項目中的所有Word 文檔放在同一個文件夾中然后點擊文件中的命令按鈕,啟動程序,出現一個輸入框,要求輸入文件夾的路徑。輸入正確的文件夾路徑之后,程序自動運行,統計所有文件的中文字數和西文字符數,統計完成后,在同一文件夾下會出現一個文件名為“文檔字數統計表”的Excel 工作簿,工作簿中有一個名為“統計文檔字數列表”的工作表。如圖4 所示,工作表中的分別列出了每一個文件的文件名、總字符數、漢字字符和英文字符數。最終統計結果用Excel 表格是因為Excel 表格更容易對數據進行匯總計算。
最后一個小程序用于將從Trados、MemoQ 和Déjà Vu 等CAT導出的雙語對照文件自動轉換為雙語平行語料庫,供翻譯研究使用。轉換后的文檔格式為TXT 格式,可以用雙語平行語料庫檢索軟件CUC_ParaConc 進行檢索?,F代的CAT 軟件都可以導出雙語原文譯文雙語表格對照格式的文件,其中MemoQ 和Déjà vu 導出的是雙語對照的RTF 格式文件,而Trados 導出的是Word 格式的雙語對照文件。這些文件本來用于對譯文進行外部審校。由于這種雙語對照文件是句子層次的雙語對照格式,所以非常適合轉化成雙語平行語料庫,用于翻譯研究。在整個翻譯流程完成,譯文質量有保證之后,就可以到處雙語對照的文件,然后使用本小程序自動轉換為雙語平行語料庫文本。本小程序運行簡單,用戶點擊“開始運行”的命令按鈕之后,出現一個對話框,要求用戶選擇轉換哪一個CAT 軟件導出的雙語對照文件。用戶選擇對應的數字之后,點擊“確定”,出現打開文件對話框,要求用戶選擇所要轉換的文件,選擇好后,程序自動將文件轉換為雙語對照的TXT 格式,新文件名與原文件名相同,而后綴不同。新轉換的文檔保存在與原文檔同樣的存儲路徑中,原文件保留不變。
文章介紹了兩種類型的Office VBA 翻譯小程序的使用方法。從中可以看出,Office VBA 小程序可以在譯前和譯后編輯,翻譯文檔格式轉換,術語管理和雙語平行語料庫建設等方面有非常重要的作用。目前VBA 編程在翻譯中的應用在翻譯界和翻譯技術界還是一個新的課題。希望今后有更多的翻譯實踐和翻譯研究工作者關注這一話題,共同促進翻譯技術的發展。