之前項目需要個簡體轉繁體的功能,工期太緊,就自己擼了一個,效果還行. 在做這個的過程中發現簡轉繁其實遠比想的要複雜.
中間有很多簡體字習慣的用法,在繁體中是不同的。且有些字如(後,後,臺灣,台灣) 在繁體中有幾種寫法和用法。
簡體字將其簡化成了一個字...
然後相同的字,在不同的片語中時,有些用簡體那個,有些用繁體那個...
最後,台灣繁體和香港繁體還有不同的差異.
不一一列舉,總之是個麻煩事。機械的通過一些編碼轉換是不行的. 所以通常自己寫的話是通過詞庫去翻譯比較好點。
當然也可以調第三方服務API(如有道,維基之類),不過如果業務效能有要求,還是不要調這類第三方服務好點。
後面項目弄完了,我再回過頭研究這個問題,發現了個Open CC的項目弄這個還可以.然後Golang的調用
封裝在GitHub上也有人實現了,就拿來試了試,確實效果還不錯.
例子:
package main/*利用OpenCC進行簡轉繁的例子 OpenCC庫 : https://github.com/BYVoid/OpenCC opencc wrapper for Golang : github.com/stevenyao/go-opencc Author:XCL*/import ("fmt"opencc "github.com/stevenyao/go-opencc")func main() {// mac localconfig_s2t := "/Users/xcl/langtest/input/OpenCC-master/data/config/s2t.json"// linux//config_s2t := "/usr/share/opencc/s2t.json"// 簡體字串ch := "前面有大臣,後面有皇后 遊覽風景,做遊戲,去遊園夜遊 登上手工造遊艇,看維港景色。拿好裝置探尋台灣,去遊泳,衝浪,別浪費了這次機會. "//應用中需要先檢查檔案是不是存在,// 否則報"fatal error: unexpected signal during runtime execution." 造成服務中斷c := opencc.NewConverter(config_s2t)defer c.Close()// 轉換tw := c.Convert(ch)fmt.Println("繁體:", tw)}/*運行結果:➜ src : go run main.go繁體: 前面有大臣,後面有皇后 遊覽風景,做遊戲,去遊園夜遊 登上手工造遊艇,看維港景色。拿好設備探尋臺灣,去遊泳,衝浪,別浪費了這次機會.*/
要跑起這個程式,需要有s2t.json這個詞庫。
配置s2t.json:
本地,解壓從github下載的源碼,裡面有這個檔案詞庫,
Linux 下可以用的yum或rpm之類的命令安裝好opencc,其詞庫在 /usr/share/opencc下。
這個項目轉換是很厲害,可以注意下例子中所舉的那些字或詞,但有些字或片語用法需要定製時,用這個還真不知道怎麼加進去或定製一些轉換。
時間有限就沒研究下去了,反正線上之前寫的那個跑得好好的,穩定為主,不折騰這個了。
BLOG: http://blog.csdn.net