« 上一篇 | 下一篇»

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

reic | 31 十月, 2009, 14:46 | Freeware , Reic 手扎 , Unix | (4214 Reads)

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 即可以在 漢語 中找到嘸蝦米輸入法了。

致謝

延伸閱讀:

靜態連結網址 | 迴響 (21) | 引用 (0)
作者保留此著作部分權利, 採CC授權。
友善列印/Print  Add this post to Delicious.   Add this post to Hemidemi.  Add this post Yahoo My Web.  Add this post Google Bookmarks.  Add this post MyShare. 
發表迴響












:authimage



  

Comments
[20] 重新啟動 IBus 找不到嘸蝦米[迴響]| 作者 Ryan |19 三月 2010, 11:07

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

[19] re: ccko[迴響]| 作者 reic |16 十一月 2009, 23:29

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

[18] [迴響]| 作者 ccko |16 十一月 2009, 16:50

我安裝之後 IBUS全部輸入法的圖示都變成空白

改如何解決呢??

謝謝

[17] 原來是~/.ibus搞的鬼[迴響]| 作者 kewang |14 十一月 2009, 12:13

你好:

我用了這個權重的計算方式之後還是沒辦法,我就想說到底是哪裡有問題,因為我的table裡面也沒有全型的"D"跟"U"。

後來想到或許是有自訂的db會放在~/.ibus裡面,果然沒錯,我只要把~/.ibus移除之後再重啟ibus,就完成了。

所以還是要記得刪除 ~/.ibus呀 XD

[16] 取得可盲打版本的 ibus table[迴響]| 作者 太魯閣被車載回來 |13 十一月 2009, 16:52

第 13,14,16 樓的字序不正確問題,劣者今天下午終於修正完成了,成果同步貼於個人部落格上,詳細過程請參閱。

簡單的說上述「整理字碼表」的指令要改成如下

cat liu.txt | grep -v '^%' | awk '{counter[$1]++} END {} {print $1"\t"$2"\t"101-counter[$1]}' > liu-ibus.txt

相同的拼字,其權重就會自動遞減(而不會只是固定在100)。因此這樣就可以「盲打」了。

[15] Re: kewang[迴響]| 作者 reic |11 十一月 2009, 18:10

其實我自己是參考這一篇:
在 scim 中安裝嘸蝦米:由 Windows 的安裝檔取得嘸蝦米表格檔
http://reic.twbbs.org/post/1/393

因為之前用 liu57b 的 cin 直接轉給 scim 使用,發現在cin 中的排序竟然和 windows 有一些不太一樣,所以都是直接從 windows 取出來使用打起來的手感和在 windows 比較接近。

你的問題應該要去看一下你的字碼表。看一下
D D
是不是在
D 的
的前面,因為權重一樣的話,就是比排序的位置了。

[14] Re: 太魯閣被車載回來[迴響]| 作者 reic |11 十一月 2009, 18:01

因為我學無蝦米是在有盲打之前,所以其實我不太習慣 vrsfw 的選法。所以對我來說沒什麼困擾。

再加上我個人覺得在 linux 下面,不太需要去用,,T ,,C ,,J 之類的,我會用接建一個叫 無中 無日 的輸入方式直接使用。因為怎麼修正還是和 Windows 有差距,沒有必要都一樣。

就因為上述的這兩點,所以讓我在權重都下 100 的情況下,其實是一切都正常的。因為 rsfw 的字是後來才 cat 進入檔案中,所以不會影響本來的順序,但是要到完全的 rsfw 都是正確的,這一點我自己沒有去檢查過就是了了。

[13] 打出來有部分字錯掉了[迴響]| 作者 kewang |10 十一月 2009, 23:19

你好:

我現在table檔,轉換出來的順序怪怪的

目前只有發現兩個問題。

第一個是D:我打D,結果第一個出來的是"D",再來才是"的"
第二個是U:我打U,結果第一個出來的是"U",再來才是"以"

不知道有沒有人遇到同樣狀況呢?

[12] 討論缺點[迴響]| 作者 太魯閣被車載回來 |10 十一月 2009, 22:30

考慮到每個人取得的 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 的格式不對,也會產生那些錯誤訊息。

關於第一樓,劣者指出人家打字錯誤,結果自己也打錯,呵呵,真是抱歉。

[11] [迴響]| 作者 lslian |09 十一月 2009, 14:58

OK了,謝謝大大…

[10] [迴響]| 作者 lslian |09 十一月 2009, 14:41

請問IBusg如何重開?感恩

[9] re: Islian[迴響]| 作者 reic |09 十一月 2009, 14:07

裝好後看不見,應該是沒有重開 IBus 的關係

[8] [迴響]| 作者 lslian |09 十一月 2009, 13:46

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

[7] re: steven[迴響]| 作者 reic |04 十一月 2009, 09:39

其實我沒有特別去看那一隻 py 檔檔,可是從最後一行。覺得看 Repply 3 很像

liu7 目前已經有推出 ibus 的格式表可以下載,如果有買 liu7 可以直接到官網下載即可

[6] 不知名訊息[迴響]| 作者 steven |03 十一月 2009, 11:06

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

[5] Re: Jerry[迴響]| 作者 reic |02 十一月 2009, 09:45

# liu-uni 的 vrsf 選字檔(liu-uni.vrsf)
# 補破網 (patchtab.ptt)
# Edward G.J. Lee 的 noseeing-8 罕用字 (patchtab.lgj)

其實我的 liu.txt 檔就是從 liu57.cin 拿來用的。 只是我加上了上述的東西在裡面。因為那時候有人釋出了 vrsf 的選字檔,我就順便加進去了。

在 Liu7 中,我還滿常用的。

[4] [迴響]| 作者 Jerry |02 十一月 2009, 00:42

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

[3] [迴響]| 作者 gg |02 十一月 2009, 00:16

成功 ^^
3Q

[2] Re: jerry[迴響]| 作者 reic |01 十一月 2009, 22:56

那一行其實我做的事就是
a 對
變成
a 對 100
中間是 tab 區隔

原來是我又打錯字
正確的是
cat Liu.txt | awk '{print $1"\t"$2"\t100"}' > liu_ibus.txt

[1] [迴響]| 作者 Jerry |01 十一月 2009, 22:50

不好意思 請教一下
為什麼我用cat Liu.txt | awk "{print $1"\t"$2"\t100"}" > liu_ibus.txt

整理出的liu_ibus.txt的內容是空白的呢