Saturday, February 05, 2011

CedIME 字典

CedIME 裡內建了很多不同的字典

英文 auto-correct 字典 - 821K
倉頡輸入法字典 - 180K
速成輸入法字典 - 66K
筆劃輸入法字典 - 490K
注音輸入法字典 - 47K
中文關聯詞字典 - 386K
倉頡字根查詢字典 - 156K
筆劃字根查詢字典 - 184K

除了英文字典,最佔空間的要算是筆劃輸入法字典了。一直以來筆劃輸入法的字典和倉頡字典的格式都是一樣的,是一個樹狀數據結構。類似下圖:


這裡每個圓圈 (Internal Node) 代表一個字根,例如倉頡的:日、月、金、木等等。從上面開始: A->B->F 可以代表 日 -> 弓 -> 木 = 閑,如此類推。筆劃輸入也是一樣的道理,只是字根變成 (一丨丿丶フ)。

這個樹狀的結構在使用時非常有效率,例如當你輸入"日"倉頡字根,CedIME就可以把"日"這個 Internal Node 以下所有可能的字都找出來,因此你很多時不必整段倉頡字根輸入完已經能夠從選字表中找到要輸入的文字。

然而筆劃字根和倉頡字根的差異非常大:
- 倉頡輸入法字根長度最長只是 5 ,而筆劃字根最長可以去到 48
- 倉頡輸入法盡用 26 個字母作為字根,筆劃基本字根只有五個 (一丨丿丶フ)

因此相對於倉頡輸入法來說,筆劃輸入法的樹結構相對較長而且窄,並且有很多無用的 Internal Node。當理解這點以後,改善辦法自然就是要從樹的結構入手,盡量把浪費的 Internal Node 省略掉。

而我在 CedIME 裡處理這個問題的方法就是用一種叫 Radix Tree (Patricia tries) 的數據結構。它也是樹結構的一種,特點是所有 Internal Node 都必然會有兩個或以上的 Child。如下圖:


這種結構對於筆劃字根來說很適合,它能把幾個無用而連續的 Internal Node 合併為一個 Node ,這大大省略了整棵樹佔用的空間。轉用了這個新的結構後筆劃輸入法的字典由本來的 490K 大幅減少至 238K,加上 Android APK本身的壓縮功能,實際上在手機中只佔大約 130K左右。另外由於使用時字典必須載入到手機的記憶體中,因此在 CedIME 運行時也節省了相當的記憶體。

6 comments:

core181 said...

你好 我使用了 cedIME 之後覺得是最適合android 的筆劃輸入法
非常感謝您

最近因為手機空間不足,個人把 data/app 移轉至 system/app 後 cedIME 運作正常,但是昨日將手機還原格式化後,歡迎畫面就不斷的出現 CedIME 異常要求關閉,之後移除CedIME,無論怎麼安裝回來都無法使用,請問該如何讓cedIME回復呢

無論舊版或是新版都無法執行

另外 新版的 CedIME 長按 123 似乎不能直接更換他家輸入法呢,另外有辦法在輸入法快速切換嗎,例如CedIMe 筆畫與倉頡 同時使用?

DoDo said...

您好,您的CedIME新版非常好用又漂亮,我滿喜歡...我是倉頡和筆劃使用者。
不過我的HTC Desire Z〈台版〉的實體鍵盤無法打出全形標點符號,請問CedIME有內建嗎?希望實體鍵盤能夠支援全形標符號,這樣不用在虛擬螢幕按...還有另一件事,倉頡輸入法雖然在Desire Z支援實體鍵盤,但筆劃卻不行了..只有虛擬螢幕才可。能夠告訴我原因嗎?謝謝

只有二個問題是全形標點符號和筆劃輸入法無法支援實體鍵盤,其他都沒問題

可否請作者小小改善呢?感恩...

Booker said...

有時pop up feedback會不能顯示
不知道是rom問題還是cedime的問
要reboot才可解決

Booker said...

補充
筆劃keyboard layout可以微調一下
將backspace和三點附號(省略號是六點的)交換位置

域奇 said...

Cedric你好, cedIME一直是我default的輸入法, 確實是其他輸入法無法取代的, 近排發現愈來愈多手機沒了trackball, 要微調位置的時間, 用OS2.3的還好一點, 2.2之前的真的很麻煩... 不知道會唔會有機會幫cedIME加入好似htc鍵盤既上下左右掣做option?

Mini Yoshi said...

又上了一課,謝謝。