| adm | Find | login register |
Solomon joined: 2008-02-27 posted: 78 promoted: 22 bookmarked: 3 |
剛剛無聊想到來做一個字詞頻的filter。 利用sqlite3來紀錄打過的字與詞,以我用無蝦米的情況來說,會記錄每一個字打出來的次數。若是使用詞音,會輸出一個詞或是句子。 我想應該是單純每一個字都會出一次字的會比較適用,不過我現在自己使用下來的感覺是有一點慢。 有興趣的人就拿去玩玩看,歡迎修改。看看可不可以加速,不然感覺有一點點慢,加上每次打字都聽到硬碟在轉動,這樣子也怪怪的。 | |||||||||
caleb joined: 2007-09-22 posted: 630 promoted: 134 bookmarked: 90 |
我的舊實驗在 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 |
這裡所指「簡單的 gcin filter」是把 user 打的所有字詞 pipe 到一個硬碟上的檔案(沒用 ramdisk / tmpfs) 如果只是 do nothing filter 印象中可到 1600+ 字/min 以上。 | |||||||||
caleb joined: 2007-09-22 posted: 630 promoted: 134 bookmarked: 90 |
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 |
請問一下你的實驗是怎麼做的?直接用程式去餵字給filter嗎? | |||||||||
caleb joined: 2007-09-22 posted: 630 promoted: 134 bookmarked: 90 |
用單拆碼 .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 |
剛剛更新了filter的內容(在第一篇)。 把一開始的判斷database的部分給拿掉,不需要每次判斷,把read與echo放在一起,資料庫的部分放到最後面再來做。 以一般的打字速度來說,目前不會有停頓的感覺,剩下來就是來調整sqlite的部分了。 |
| adm | Find | login register |