Ubuntu 已於 10月29日釋出。Ubuntu 9.10 將輸入法由 scim 轉換為 IBus (Intelligent Input Bus) ,為了先習慣後來 ubuntu 的改變,還是決定怎了解怎麼在 IBus 中安裝 嘸蝦米。在網路上查詢了一下,只有看到 Vicamo Yang 的 Boshiamy for iBus 這一篇文章比較完整,但是因為我比較懶,不想重新打包 deb 檔,所遙還是透過 ibus-table-createdb 直接來完成。
這一次筆者手邊有 Liu7 和 Liu57b,當然最直接的方法還是說到說 Liu7 是否有提供相對應的下載,於是到官網去找了一下,竟然沒有看到 cin 可以下載,所以還是從 Liu57b 的 cin 檔開始好了。而我手邊剛好有已經整理好的 For scim使用的 scim檔(詳見此篇 、 或 此篇)。所以整理的 cin 檔的工作在此篇就不再詳述了。
本次在 IBus 安裝嘸蝦米的工作大概分成三個部分:
整理字碼表
此步驟為建立符合 IBus 的字碼格式,所以取得 scim 中已建立好的 Liu.txt檔。一口氣取出字碼部分,並加上權重的設定。
awk '/BEGIN\_TABLE/{f=1;next}/END\_TABLE/{exit}f' Liu.txt |awk '{count[$1]++}{print $1"\t"$2"\t"101-count[$1]}' > liu_ibus.txt
如果你想要手動的看看 IBUS,利用文字編輯軟體移除檔案開始-->BEGIN_TABLE 中的所有內容 和 檔尾的 END_TABLE 。然後透過下述指令整理好內容:
cat Liu.txt | awk '{print $1"\t"$2"\t100"}' > liu_ibus.txtcat Liu.txt | awk '{counter[$1]++} END {} {print $1"\t"$2"\t"101-counter[$1]}' > liu_ibus.txt
感謝 太魯閣被車載回來 的指點了這麼一個酷的用法,如果你已經做好了權重都是 100 的 liu_ibus_final.txt 也不用再重來一次
mv liu_ibus_final.txt liu_ibus_old.txt; cat liu_ibus_old.txt |awk '{if($3==100){count[$1]++;print $1"\t"$2"\t"$3+1-count[$1]}else{print $0}}' > liu_ibus_final.txt
建立符合 IBus 的轉換檔
我已經移除掉一些說明註解,如果想要看更清楚的說明,可以參考Vicamo Yang 的 Boshiamy for iBus 所提供的內容。如果懶的去一一修改,可以直接取用下述的內容。
### File header must not be modified
### This file must be encoded into UTF-8.
### This table under LGPL
### comments start with ### not single #
### Derive from the format of SCIM Table, so you can modify the table from
### scim-tables' table
SCIM_Generic_Table_Phrase_Library_TEXT
VERSION_1_0
### Begin Table definition.
BEGIN_DEFINITION
LICENSE = LGPL
UUID = 702d9641-a51b-4688-b4a2-8e8b8fe579cf
SERIAL_NUMBER = 20090709
ICON = liu5.png
NAME = liu5
NAME.zh_TW = 嘸蝦米
DESCRIPTION = Boshiamy Input Method
LANGUAGES = zh_TW
AUTHOR = Boshiamy Corp. Reic Wang
STATUS_PROMPT = TW
VALID_INPUT_CHARS = ,.'abcdefghijklmnopqrstuvwxyz[]
LAYOUT = us
MAX_KEY_LENGTH = 5
AUTO_COMMIT = FALSE
DEF_FULL_WIDTH_PUNCT = FALSE
DEF_FULL_WIDTH_LETTER = FALSE
USER_CAN_DEFINE_PHRASE = TRUE
PINYIN_MODE = TRUE
# 2009/11/26 更新,建議將此選項關閉,否則會動態調整 frequency ,會讓打字變的很不習慣
DYNAMIC_ADJUST = FALSE
END_DEFINITION
### Begin Table data.
### Format of every line whose formated in "input_keys\tphrase\tfreq\n" is an
### entry.
### From left to right, the 1st column are the input key combination that you
### entered via keyboard; the 2nd column are presented character or phrase of
### the key combination you want; the 3rd column are frequency of the character
### or phrase.
BEGIN_TABLE
END_TABLE
將在上一個部分已建好的 liu_ibus.txt的內容,貼至 BEGIN_TABLE 和 END_TABLE 間,並將之命名為 liu_ibus_final.txt。即完成此部分。
產生 db 檔,安裝
再來的步驟就比較容易了。產生db檔:
ibus-table-createdb -s liu_ibus_final.txt -n liu5.db
cp liu5.db /usr/share/ibus-table/tables/
cp liu5.png /usr/share/ibus-table/icons/
重新啟動 IBus 即可以在 漢語 中找到嘸蝦米輸入法了。
致謝
延伸閱讀:
#\>ibus-table-createdb -s liu_ibus_final.txt -n liu5.db沒有任何錯誤
我建的liu_ibus_final.txt在這兒,能否幫我看一下?
http://ryancx.dyndns.org/files/liu_ibus_final.txt
你好:
我用了這個權重的計算方式之後還是沒辦法,我就想說到底是哪裡有問題,因為我的table裡面也沒有全型的"D"跟"U"。
後來想到或許是有自訂的db會放在~/.ibus裡面,果然沒錯,我只要把~/.ibus移除之後再重啟ibus,就完成了。
所以還是要記得刪除 ~/.ibus呀 XD
第 13,14,16 樓的字序不正確問題,劣者今天下午終於修正完成了,成果同步貼於個人部落格上,詳細過程請參閱。
簡單的說上述「整理字碼表」的指令要改成如下
cat liu.txt | grep -v '^%' | awk '{counter[$1]++} END {} {print $1"\t"$2"\t"101-counter[$1]}' > liu-ibus.txt
相同的拼字,其權重就會自動遞減(而不會只是固定在100)。因此這樣就可以「盲打」了。
其實我自己是參考這一篇:
在 scim 中安裝嘸蝦米:由 Windows 的安裝檔取得嘸蝦米表格檔
http://reic.twbbs.org/post/1/393
因為之前用 liu57b 的 cin 直接轉給 scim 使用,發現在cin 中的排序竟然和 windows 有一些不太一樣,所以都是直接從 windows 取出來使用打起來的手感和在 windows 比較接近。
你的問題應該要去看一下你的字碼表。看一下
D D
是不是在
D 的
的前面,因為權重一樣的話,就是比排序的位置了。
因為我學無蝦米是在有盲打之前,所以其實我不太習慣 vrsfw 的選法。所以對我來說沒什麼困擾。
再加上我個人覺得在 linux 下面,不太需要去用,,T ,,C ,,J 之類的,我會用接建一個叫 無中 無日 的輸入方式直接使用。因為怎麼修正還是和 Windows 有差距,沒有必要都一樣。
就因為上述的這兩點,所以讓我在權重都下 100 的情況下,其實是一切都正常的。因為 rsfw 的字是後來才 cat 進入檔案中,所以不會影響本來的順序,但是要到完全的 rsfw 都是正確的,這一點我自己沒有去檢查過就是了了。
你好:
我現在table檔,轉換出來的順序怪怪的
目前只有發現兩個問題。
第一個是D:我打D,結果第一個出來的是"D",再來才是"的"
第二個是U:我打U,結果第一個出來的是"U",再來才是"以"
不知道有沒有人遇到同樣狀況呢?
考慮到每個人取得的 scim table 不一樣,會產生這種問題: 由於 awk '{print $1"\t"$2"\t100"}' 是固定在 100,因此選字的頻率就不準,內定選字並不是按照一般我們常見字的頻率來排序,也就是說嘸蝦米最引以為傲的「盲打」就派不上用場了,最經典的 e,r,s,f,w,l,c,b,k,j,一二三四五六七八九十 排列還不正確,這點對於平常習慣盲打的人會造成非常嚴重的後果。
http://tw.myblog.yahoo.com/chrysler-wrangler/article?mid=211
照理說,那個 counter 遇到相同的字應該要遞減才對,過去劣者曾經為嘸蝦米 scim table 寫過 java 來解決這個問題(程式碼在上述部落格網頁中),但是如果能夠直接用 awk 來解決,那自然是最理想。如果沒空改寫,那麼劣者的 java 程式應該可以解決盲打的問題。
另外,
關於第七樓,劣者發現若 liu_ibus_final.txt 的格式不對,也會產生那些錯誤訊息。
關於第一樓,劣者指出人家打字錯誤,結果自己也打錯,呵呵,真是抱歉。
您好,我在下ibus-table-createdb -s liu_ibus_final.txt -n liu5.db 指令,會出現以下訊息:
Traceback (most recent call last):
File "/usr/share/ibus-table/engine/tabcreatedb.py", line 297, in
main ()
File "/usr/share/ibus-table/engine/tabcreatedb.py", line 226, in main
phrases = phrase_parser ( table)
File "/usr/share/ibus-table/engine/tabcreatedb.py", line 164, in phrase_parser
xingma, phrase, freq = unicode (l, "utf-8").strip ().split ('\t')
ValueError: need more than 1 value to unpack
liu5.db有建出來,不過再ibus漢語那邊沒看到無蝦米,麻煩大大解惑,感恩
# liu-uni 的 vrsf 選字檔(liu-uni.vrsf)
# 補破網 (patchtab.ptt)
# Edward G.J. Lee 的 noseeing-8 罕用字 (patchtab.lgj)
其實我的 liu.txt 檔就是從 liu57.cin 拿來用的。 只是我加上了上述的東西在裡面。因為那時候有人釋出了 vrsf 的選字檔,我就順便加進去了。
在 Liu7 中,我還滿常用的。
那一行其實我做的事就是
a 對
變成
a 對 100
中間是 tab 區隔
原來是我又打錯字
正確的是
cat Liu.txt | awk '{print $1"\t"$2"\t100"}' > liu_ibus.txt