2009-10-31

[Ubuntu] 在 IBus 輸入法中,嘸蝦米的安裝心得

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 安裝嘸蝦米的工作大概分成三個部分:

  1. 整理字碼表
  2. 建立符合 IBus 的轉換檔
  3. 產生 db 檔,安裝
整理字碼表
此步驟為建立符合 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.txt
cat 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 即可以在 漢語 中找到嘸蝦米輸入法了。



致謝



延伸閱讀:

Related Posts Plugin for WordPress, Blogger...

24 則留言 :

  1. ibus-table-createdb -n liu_ibus_final.txt -n liu5.db
    您這一行打字錯誤了,應該是
    ibus-table-createdb -c liu_ibus_final.txt -n liu5.db
    thank you.

    回覆刪除
  2. 不好意思 請教一下
    為什麼我用cat Liu.txt | awk "{print $1"\t"$2"\t100"}" > liu_ibus.txt
    整理出的liu_ibus.txt的內容是空白的呢

    回覆刪除
  3. 那一行其實我做的事就是
    a 對
    變成
    a 對 100
    中間是 tab 區隔
    原來是我又打錯字
    正確的是
    cat Liu.txt | awk '{print $1"\t"$2"\t100"}' > liu_ibus.txt

    回覆刪除
  4. 感謝relic兄的協助,
    我發現在安裝過程中最困難的部份是如何獲得正確的liu.txt的格式,故直接上網找到的liu57.cin這個檔案,再使用您提供的指令,即可完成了。

    回覆刪除
  5. # liu-uni 的 vrsf 選字檔(liu-uni.vrsf)
    # 補破網 (patchtab.ptt)
    # Edward G.J. Lee 的 noseeing-8 罕用字 (patchtab.lgj)
    其實我的 liu.txt 檔就是從 liu57.cin 拿來用的。 只是我加上了上述的東西在裡面。因為那時候有人釋出了 vrsf 的選字檔,我就順便加進去了。
    在 Liu7 中,我還滿常用的。

    回覆刪除
  6. 您好,我在下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漢語那邊沒看到無蝦米,麻煩大大解惑,感恩

    回覆刪除
  7. 其實我沒有特別去看那一隻 py 檔檔,可是從最後一行。覺得看 Repply 3 很像
    liu7 目前已經有推出 ibus 的格式表可以下載,如果有買 liu7 可以直接到官網下載即可

    回覆刪除
  8. 所有都做了,不過在ibus漢語那邊沒看到無蝦米,麻煩大大解惑,感恩

    回覆刪除
  9. 裝好後看不見,應該是沒有重開 IBus 的關係

    回覆刪除
  10. 請問IBusg如何重開?感恩

    回覆刪除
  11. OK了,謝謝大大…

    回覆刪除
  12. 考慮到每個人取得的 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 的格式不對,也會產生那些錯誤訊息。
    關於第一樓,劣者指出人家打字錯誤,結果自己也打錯,呵呵,真是抱歉。

    回覆刪除
  13. 你好:
    我現在table檔,轉換出來的順序怪怪的
    目前只有發現兩個問題。
    第一個是D:我打D,結果第一個出來的是"D",再來才是"的"
    第二個是U:我打U,結果第一個出來的是"U",再來才是"以"
    不知道有沒有人遇到同樣狀況呢?

    回覆刪除
  14. 因為我學無蝦米是在有盲打之前,所以其實我不太習慣 vrsfw 的選法。所以對我來說沒什麼困擾。
    再加上我個人覺得在 linux 下面,不太需要去用,,T ,,C ,,J 之類的,我會用接建一個叫 無中 無日 的輸入方式直接使用。因為怎麼修正還是和 Windows 有差距,沒有必要都一樣。
    就因為上述的這兩點,所以讓我在權重都下 100 的情況下,其實是一切都正常的。因為 rsfw 的字是後來才 cat 進入檔案中,所以不會影響本來的順序,但是要到完全的 rsfw 都是正確的,這一點我自己沒有去檢查過就是了了。

    回覆刪除
  15. 其實我自己是參考這一篇:
    在 scim 中安裝嘸蝦米:由 Windows 的安裝檔取得嘸蝦米表格檔
    http://reic.twbbs.org/post/1/393
    因為之前用 liu57b 的 cin 直接轉給 scim 使用,發現在cin 中的排序竟然和 windows 有一些不太一樣,所以都是直接從 windows 取出來使用打起來的手感和在 windows 比較接近。
    你的問題應該要去看一下你的字碼表。看一下
    D D
    是不是在
    D 的
    的前面,因為權重一樣的話,就是比排序的位置了。

    回覆刪除
  16. 第 13,14,16 樓的字序不正確問題,劣者今天下午終於修正完成了,成果同步貼於個人部落格上,詳細過程請參閱。
    簡單的說上述「整理字碼表」的指令要改成如下
    cat liu.txt | grep -v '^%' | awk '{counter[$1]++} END {} {print $1"\t"$2"\t"101-counter[$1]}' > liu-ibus.txt
    相同的拼字,其權重就會自動遞減(而不會只是固定在100)。因此這樣就可以「盲打」了。

    回覆刪除
  17. 你好:
    我用了這個權重的計算方式之後還是沒辦法,我就想說到底是哪裡有問題,因為我的table裡面也沒有全型的"D"跟"U"。
    後來想到或許是有自訂的db會放在~/.ibus裡面,果然沒錯,我只要把~/.ibus移除之後再重啟ibus,就完成了。
    所以還是要記得刪除 ~/.ibus呀 XD

    回覆刪除
  18. 我安裝之後 IBUS全部輸入法的圖示都變成空白
    改如何解決呢??
    謝謝

    回覆刪除
  19. 圖的位置放在 ibus-table/icons 下面啊。應該是沒有找到相對應的圖吧

    回覆刪除
  20. #\>ibus-table-createdb -s liu_ibus_final.txt -n liu5.db沒有任何錯誤
    我建的liu_ibus_final.txt在這兒,能否幫我看一下?
    http://ryancx.dyndns.org/files/liu_ibus_final.txt

    回覆刪除
  21. 多謝你啦 ^^
    可以使用了~~~~~ YA

    回覆刪除
  22. 我的問題跟19樓一樣~~
    中間也沒有任何錯誤
    請問是什麼問題?

    回覆刪除
  23. 因為改用chrome的關係 (Firefox會因為誤連一個壞網址而導致整個程式hug 住)
    小弟發現了一個問題,就是Ubuntu 10.04 + Chrome6.0.472.55
    用iBus嘸蝦米在輸入中文時,會變得怪怪的

    後來發現,原來是完成輸入一個字之後(已按下空白鍵),發現打錯了,去按倒退鍵(Backspace)之後,再輸入字根,就畫面就會沒反應 (Del有同樣的問題)
    需要Ctrl+Space切換輸入法(或者按Esc),再輸入,才會有字出現
    而完成字之前的字根用倒退鍵(下底線還存在的時候)則無此問題產生

    本來以為是我的嘸蝦米設定或安裝有問題
    但在終端機、gedit或firefox下使用,則一切正常

    在chrome下使用新酷音時,也有同樣的問題。
    不過因為它打一連串的字,下面都會有底線(還未確定),此時可用倒退鍵修改錯字
    待按下Enter,底線消失後(確定了),此時若用倒退鍵修改,會有與嘸蝦米一樣的問題

    請問各位先進是如何解決這個問題的?
    還是只能等Chrome的更新? =___=

    另一個問題是,嘸蝦米在windows下,輸入超過四碼就會停住(通常是輸入錯誤)
    但liu_ibus卻沒有限制,這點讓常打錯字根的我很不習慣
    不知要如何設定?

    多謝!!

    回覆刪除

,,