cht電腦資訊gcin
adm Find login register

gcin filter 本機字/詞頻紀錄

Solomon

joined: 2008-02-27
posted: 78
promoted: 22
bookmarked: 3
1subject: gcin filter 本機字/詞頻紀錄Promote 0 Bookmark 02008-12-22quote  

剛剛無聊想到來做一個字詞頻的filter。

利用sqlite3來紀錄打過的字與詞,以我用無蝦米的情況來說,會記錄每一個字打出來的次數。若是使用詞音,會輸出一個詞或是句子。

我想應該是單純每一個字都會出一次字的會比較適用,不過我現在自己使用下來的感覺是有一點慢。

有興趣的人就拿去玩玩看,歡迎修改。看看可不可以加速,不然感覺有一點點慢,加上每次打字都聽到硬碟在轉動,這樣子也怪怪的。

caleb
joined: 2007-09-22
posted: 630
promoted: 134
bookmarked: 90
2subject: gcin filter 本機字/詞頻紀錄Promote 0 Bookmark 02008-12-23quote  

我的舊實驗在 AMD Athlon 3200+ (這是顆 32 bit CPU) + 256 MB RAM withou swap,啟用簡單的 gcin filter 仍可有 1000+ 字/min

(印象中至少有 1300+ 字/min,不過當時是 post 在 cle.linux.org.tw/gcin/gcin.php ← 舊站目前已停用,沒辦法查)

 

拖慢 gcin filter 的主要因素:

1. 大量的 shell script 邏輯判斷

2. disk I/O

 

建議修改方式:

1. 減少邏輯判斷

2. 修改 filter echo 的 latency

3. 只記錄 user 打的字詞,等累積到一定量後再統一計算字頻詞頻

4. 把 I/O 丟到 ramdisk / tmpfs

caleb
joined: 2007-09-22
posted: 630
promoted: 134
bookmarked: 90
3subject: gcin filter 本機字/詞頻紀錄Promote 0 Bookmark 02008-12-23quote  
caleb

我的舊實驗在 AMD Athlon 3200+ (這是顆 32 bit CPU) + 256 MB RAM withou swap,啟用簡單的 gcin filter 仍可有 1000+ 字/min

這裡所指「簡單的 gcin filter」是把 user 打的所有字詞 pipe 到一個硬碟上的檔案(沒用 ramdisk / tmpfs)

如果只是 do nothing filter 印象中可到 1600+ 字/min 以上。

caleb
joined: 2007-09-22
posted: 630
promoted: 134
bookmarked: 90
4subject: gcin filter 本機字/詞頻紀錄Promote 0 Bookmark 02008-12-23quote  

read -r aa 和 echo -n $aa 越接近越好,只要 gcin 能快速收到「要輸出的字」,就不會 delay。

能在背景做的事一律丟到背景,gcin 每次呼叫 filter 都是新開一隻 process,filter 間不會互相干擾(當然 filter 裡如果有存取 database 就要注意)。

Solomon

joined: 2008-02-27
posted: 78
promoted: 22
bookmarked: 3
5subject: gcin filter 本機字/詞頻紀錄Promote 0 Bookmark 02008-12-23quote  
caleb

我的舊實驗在 AMD Athlon 3200+ (這是顆 32 bit CPU) + 256 MB RAM withou swap,啟用簡單的 gcin filter 仍可有 1000+ 字/min

(印象中至少有 1300+ 字/min,不過當時是 post 在 cle.linux.org.tw/gcin/gcin.php ← 舊站目前已停用,沒辦法查)

請問一下你的實驗是怎麼做的?直接用程式去餵字給filter嗎?

caleb
joined: 2007-09-22
posted: 630
promoted: 134
bookmarked: 90
6subject: gcin filter 本機字/詞頻紀錄Promote 0 Bookmark 02008-12-23quote  
Solomon

 

請問一下你的實驗是怎麼做的?直接用程式去餵字給filter嗎?

用單拆碼 .gtab + 拆碼「按滿自動送字」+ 鍵盤的 repeat 開到最快。

例如鍵盤的 A 鍵按住不放這樣。

A 按住不放 → gcin 一直送字 → filter 不斷 pipe 存到硬碟上某文字檔 → 系統裡同時跑 N 個 gcin filter (gcin 每次送字都會呼叫一隻新的 filter)

測試用的 .gtab 太過簡單,不過實際上電腦能處理的速度遠比鍵盤的 repeat 快,一來一往,測出來的結果應該可接受。

反正「用一般鍵盤」的中文輸入世界紀錄遠小於 250 字/min,所以知道 gcin filter 不會拖慢 user 打字就夠了。

Solomon

joined: 2008-02-27
posted: 78
promoted: 22
bookmarked: 3
7subject: Promote 0 Bookmark 02008-12-23quote  

剛剛更新了filter的內容(在第一篇)。

把一開始的判斷database的部分給拿掉,不需要每次判斷,把read與echo放在一起,資料庫的部分放到最後面再來做。

以一般的打字速度來說,目前不會有停頓的感覺,剩下來就是來調整sqlite的部分了。

cht電腦資訊gcin
adm Find login register
views:16696