基于 Objective-C 的中文簡繁正轉換庫:NCChineseConverter
簡介
NCChineseConverter 是一個 基于 Objective-C 的中文簡繁正轉換庫. 除此之外, 本項目還包括一個 Python 的詞庫轉換工具.
本庫的基本實現原理: 從 Mediawiki 提供的字典中提取數據, 轉換為自己需要的格式, 然后用最大正向匹配算法進行字符替換.
特點
- 可以只使用單一詞庫
- 可擴充自定義詞庫
- 提供 NSString 的 Category
使用方法
- 用詞典工具生成詞典
- 把生成的詞典放在項目的 Resources 目錄下
- 按如下方式引用轉換庫和調用
#import "NCChineseConverter.h" … NSString *oriString = @""; NSString *result = [[NCChineseConverter sharedInstance] convert:oriString withDict:NCChineseConverterDictTypezh2TW]; …
Tool
下載詞庫并生成詞典:
python dictgenerator.py
用本地詞庫生成詞典(適用于已經下載了詞庫文件):
python dictgenerator.py n
利用詞典工具會在當前目錄生成如下詞典文件:
- zh2TW.txt (簡體 -> 臺灣正體)
- zh2HK.txt (簡體 -> 港澳繁體)
- zh2SG.txt (簡體 -> 新馬繁體)
- zh2CN.txt (繁體/正體 -> 大陸簡體)
方便起見, 我在dictionary目錄中放了轉換好的詞典文件. 目錄名稱即為詞典生成時間.
注意: 請勿修改文件名, 轉換庫是嚴格按照文件名來讀取詞典的.
自定義擴充轉換詞組
詞典工具是根據 Mediawiki 的詞庫來進行詞典生成, 所以要等待 Mediawiki 的詞庫更新才能得到新的詞典. 如果你有一些 Mediawiki 里沒有的詞語要擴充, 則可以使用該方法來使用.
使用前綴相同的字典文件來進行自定義詞組的擴充, 轉換庫會自動加載對應的擴充字典.
比如, 把你自己的 簡體 -> 臺灣正體 詞典命名為 zh2TW.custom.txt, 這樣轉換庫就可以自動加載這個詞典并在轉換時使用.
備注
雖然詞典工具一次生成四個詞典, 但是你可以視情況只使用其中一個或多個. 需要注意的是如果你沒有在項目中放入某個詞典文件, 那么要避免在代碼里調用該字典.
未來改進
- 增加更多轉換詞庫
- 使用 Double-array Trie Tree 來構造原始字典, 提高搜索速度
- 改進分詞算法
背景
簡繁正的問題在此不多說, 都是歷史遺留問題, 具體情況可以自行查看 Wikipedia, 用自己的思考去判斷(漢字簡化爭論). 在此只討論技術相關問題.
簡繁轉換不是單純的從一個字轉換為另一個字, 他包含很多內容, 如:
- 各種繁體/正體. 如: 港澳繁體, 臺灣正體. 再加上各個華人地區的中文(如新加坡)使用等.
- 簡體和繁體的對照往往不止一對一, 而是一對二, 一對三, 甚至一對五(多繁對一簡問題)
目前比較常用的轉換方式主要是 Wikipedia 的轉換方式 和 OpenCC.
Wikipedia 進行簡繁轉換的操作流程參見: 繁簡處理
OpenCC 的庫相對比較專業. 不過這是一個 C 庫, 所以如果要在 iOS 下使用, 則需要自己把庫編譯成 iOS 可以使用的庫再進行調用.