漫長的碼農生涯,難免會遇到中文繁簡轉換需求,過去我都依賴 Word,但在 Web Server 整合 Word 是件麻煩事。Word 程序體積龐大,啟動要耗用不少記憶體跟 CPU,不適合每次 Request 隨用隨建用完即丟。加上 Word 為桌面程式會綁執行身分,不適合用 IIS AppPool 帳號跑。最後我琢磨出來的解決方案是寫成 Windows Service 以 WebAPI 方式提供服務,服務啟動時開啟固定數量的 Word 程序,分攤處理需求。在實務經驗中,Word 偶爾會因不明原因故障,故得加上連續出錯就重啟 Word 的自我修復機制。另外,伺服器得安裝 Office 多少也增加部署複雜度。

總之,利用 Word 做繁簡翻譯稱不上是完美解決方案。

另一個評估過的繁簡轉換選項是 Microsoft Visual Studio International Pack 1.0 SR1,它有 NuGet 套件可直接下載安裝,只需一顆 ChineseConvert.dll 就搞定很方便,可惜不支援字彙轉換,例如「預設記憶體大小及硬碟容量」 應翻成「缺省内存大小及硬盘容量」,幾乎都會被客戶打槍。

最近(事實上 Lag 很久了),我發現一個優秀開源專案 OpenCC https://github.com/BYVoid/OpenCC ( 線上展示 ) ,作者 BYVoid 是神人 (請參見網路流傳作者的阿里巴巴面試評語 )。OpenCC 以 C++ 開發,支援 Linux、Mac OS X、Windows、iOS、Android 等平台,官方可下載的已編譯 Windows 版只到 1.0.1 版,1.0.2 版之後的新版需自行編譯,而最新版為 1.0.5 (2017/2/6)。

如果你想自己編譯 1.0.5 版,可以參考這篇:实战Windows下编译Opencc 1.0.5 - CSDN博客,該文章作者有提供編譯好的 1.0.5 Windows 版本,但需要CSDN積分才能下載。 最後我決自己試著用  VS2015 編譯,先安裝 CMake 再照著官方文件的 Windows Visual Studio 2013 or higher 編譯步驟:

cmake -H. -Bbuild -G"Visual Studio 14 Win64" -DCMAKE_INSTALL_PREFIX="path/to/install" 
cmake --build build --config Release --target install

身為 C++麻瓜,原本只抱著姑且一試的心態,但 Github 上最新版本已排除大部分會遇到的問題,只有一個小地方要調。原本編譯有錯,我參考前述編譯指南將 PhraseExtract.cpp 改為 Unicode (UCS-2 Little Endian) 就成功了。

編譯輸出目錄 path/to/install/share/opencc 下有字典檔及設定檔,執行檔則在原始碼目錄下的 build\src\tools\Release 資料夾,共有 opencc.dll、opencc.exe、opencc_dict.exe、opencc_phrase_extract.exe 四個檔案,將兩個目錄合併即可使用。

如果嫌自己編譯麻煩,直接下載使用 1.0.1 版也是可以的,1.0.1 版應已能滿足需求。版本比較資訊

將繁體文字檔轉成簡體的指令為:

opencc -i 繁體中文檔案路徑 -o 簡體中文檔案路徑 -c tw2sp.json

其中 -c 指定轉換設定檔,OpenCC 支援以下幾種轉換:

  • s2t.json Simplified Chinese to Traditional Chinese 簡體到繁體
  • t2s.json Traditional Chinese to Simplified Chinese 繁體到簡體
  • s2tw.json Simplified Chinese to Traditional Chinese (Taiwan Standard) 簡體到臺灣正體
  • tw2s.json Traditional Chinese (Taiwan Standard) to Simplified Chinese 臺灣正體到簡體
  • s2hk.json Simplified Chinese to Traditional Chinese (Hong Kong Standard) 簡體到香港繁體(香港小學學習字詞表標準)
  • hk2s.json Traditional Chinese (Hong Kong Standard) to Simplified Chinese 香港繁體(香港小學學習字詞表標準)到簡體
  • s2twp.json Simplified Chinese to Traditional Chinese (Taiwan Standard) with Taiwanese idiom 簡體到繁體(臺灣正體標準)並轉換爲臺灣常用詞彙
  • tw2sp.json Traditional Chinese (Taiwan Standard) to Simplified Chinese with Mainland Chinese idiom 繁體(臺灣正體標準)到簡體並轉換爲中國大陸常用詞彙
  • t2tw.json Traditional Chinese (OpenCC Standard) to Taiwan Standard 繁體(OpenCC 標準)到臺灣正體
  • t2hk.json Traditional Chinese (OpenCC Standard) to Hong Kong Standard 繁體(OpenCC 標準)到香港繁體(香港小學學習字詞表標準)

建議使用tw2sp.json,才有常用字彙轉換效果,實測如下,

如此,我們找到速度比呼叫 Word 快 N 倍又支援字彙轉換的理想解決方案,下篇文章,來談談如何透過 .NET 呼叫整合。

Tutorial of using VS2015 to build OpenCC for Windows and basic usage.


Comments

# by 布丁布丁吃布丁

實用的函式庫,感謝介紹

# by tomexou

>> 缺省真是非常糟糕的翻译,很少有人能从字面意思上理解,还要专门去查解释才懂,还不如直接将这个词废弃,用一个通俗易懂的词来代替。 台灣的「預設」比大陸的「默認、缺省」翻得適意。

# by andy

感謝介紹,想請問您是如何得知編譯完的檔案在哪個資料夾的呢?找到這篇之前還以為自己編譯失敗了...

# by Jeffrey

to andy, 記得當時我也了花了點時間才找到,但如何發現因年代久遠已不復記憶... (抱頭)

Post a comment