漫長的碼農生涯,難免會遇到中文繁簡轉換需求,過去我都依賴 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 呼叫整合。