之前一直利用閑暇時間做深藍詞庫轉換,對各大輸入法的分類詞庫有了一些大概的了解,下面來比較下各個詞庫格式的特點:
1.搜狗細胞詞庫scel格式
scel格式是采用Unicode編碼了漢字、拼音。整個scel格式的內容是:頭信息、詞庫簡介、拼音組合列表、詞條列表。scel格式的詞條的數據結構設計的還是比較好的,它使用了拼音指針來避免在詞條中出現重復的拼音來占據內容,也會把同音詞合並在一起,節省空間。基本結構如下:
該拼音對應的詞條數、拼音指針、詞條列表。
2.QQ分類詞庫qpyd格式
qpyd格式是我一直很頭疼的格式,原來是采用了zip壓縮詞條列表。qpyd格式的內容是:頭信息、詞庫簡介、壓縮的詞條列表。qpyd格式由於采用了zip壓縮,所以在同樣詞條數的情況下,整個文件會顯得比其他格式的詞庫小。但是與搜狗的scel格式不同的是,qpyd格式中,每個詞條都對應了其拼音,詞語是使用UTF8編碼,但是拼音是使用Unicode編碼,真是很奇怪。
3.百度分類詞庫bdict格式
百度的bdict格式算是比較簡單的,它其實和搜狗的scel格式很相似,主要不同是使用了默認的聲母和韻母列表,而不是寫在詞庫文件中。整個bdict格式的內容是:頭信息、詞庫簡介、詞條列表,詞條中的漢字是使用Unicode編碼。詞條列表的內部格式如下:
拼音長度、(分母序號、韻母序號)列表、詞語
這里的分母序號和韻母的序號是在詞庫中找不到的,需要通過幾個實際的bdict詞庫解析,一個個的歸納出來。
4.紫光分類詞庫uwl格式
uwl格式的詞庫並不是很多,所以我現在還不支持對該詞庫格式的轉換,但是使用了WinHex大概看了下,該格式的詞庫和scel也比較類似,沒有使用壓縮,但是編碼上好像UTF8和Unicode的都有,詞條之間的距離很稀疏,也就是說在文件中,詞條和詞條間有很多0000,實在是浪費空間。
5.觸寶備份詞庫bak格式
觸寶輸入法的備份文件格式是我覺得數據結構上最復雜的,里面使用的是一個樹結構來表示。樹結構中的上一層節點和下一個節點還是雙向指針,我花了很多的時間來解讀,終於能夠實現對該文件的解析,但是有些字節不明白是什么意思,沒辦法根據詞庫生成對應的bak文件。觸寶使用的是Unicode編碼來保存漢字,拼音和bdict做的有點類似,也是用的默認的拼音列表,不同之處是,觸寶沒有將分母和韻母分開,而且把聲韻母的組合作為一個列表。
總結下:
這幾種詞庫格式中,感覺scel是比較清晰的,也比較節約空間,而且容易理解,如果能夠像QQ詞庫那樣壓縮的話,就更節省空間了。qpyd格式把每個詞的每個拼音都記錄在詞后面,實在是浪費空間,還不如scel格式這樣方便,而且拼音和漢字使用了2中編碼,真是沒必要吧。bdict格式把聲母和韻母拆開,以默認列表進行檢索,這樣也比較好,空間利用已經比較充分。紫光的uwl格式就實在不敢恭維,里面充斥着大量的0000,實在太浪費空間了。觸寶詞庫備份文件數據結構太復雜太復雜,一般難以理解。
若要了解具體每種格式的解析辦法,可以參加我的項目代碼,項目地址:http://code.google.com/p/imewlconverter/