一開始是因為要試regular expression在match 單一中文字時,竟然無法成功。眼看 http://stackoverflow.com/questions/12312310/how-to-match-chinese-characters-in-perl?lq=1 上寫得斬釘截鐵,我開始懷疑起自己來了…
結果寫了個.pl檔試試,一開始也失敗,但是開始發現,問題似乎是因為沒有以utf8格式開檔,後來找到 http://zenoga.tumblr.com/post/40094864918/unicode-aware-perl-one-liners 才解決了這個問題。看起來沒什麼,不過可花了我半個早上啊…
以下這行就是結果,可以拿來斷中文句子
perl '-Mopen qw/:std :utf8/' -ne 'while(m/(\p{Han}+)/g){print "$1\n";}' test.simp.utf8
據說詞頻的統計要用到 pat-tree / suffix tree / trie,估狗了一下覺得只有 http://search.cpan.org/~avif/Tree-Trie-1.9/Trie.pm 適合中文詞頻統計之用。有個現成的斷詞模組叫mmseg, 用法如下
perl '-Mopen qw/:utf8/' '-MLingua::ZH::MMSEG' -Mutf8 -ne 'print join "\n", mmseg' jian.txt
下一步就是要把結果丟給AI::Categorizer或AI::Classifier來看看結果如何…
20170208更新:
windows 平台上指令請改為
perl "-Mopen qw/:utf8/" -MLingua::ZH::MMSEG -Mutf8 -ne "print join \"\n\", mmseg" XXX
2013年5月6日 星期一
ubuntu上以規則式(stanford-segmenter)及統計式方法進行斷詞
規則式(stanford-segmenter)
先到 http://nlp.stanford.edu/software/segmenter.shtml 抓個新版的 ,目前是stanford-segmenter-2013-04-04解壓後進入 stanford-segmenter-2013-04-04 目錄,執行個範例程式
./segment.sh ctb test.simp.utf8 UTF-8 0
若是要對正體中文文檔斷字,需用類似iconv的程式作轉換,例如以utf-8格式儲存的繁體文檔fan.txt要斷字的話,執行以下指令:
iconv -c -f utf-8 -t big5 fan.txt | iconv -c -f big5 -t gb2312 | iconv -f gb2312 -t utf8
試用結果感覺,對於科學詞彙較多的文檔,似乎斷得有點不好,而且有類似的句子斷出來的結果卻明顯不同的情況。
統計式
http://ckipsvr.iis.sinica.edu.tw/ 中有對中文的類統計方式斷詞步驟的說明,可分為:
- 初步斷詞
- 未知詞偵測
- 中國人名擷取
- 歐美譯名擷取
- 複合詞擷取
- bottom-up merging algorithm
- 重新斷詞
改寫的步驟為:
while (未知詞比重<閥值 && 迭代次數<閥值) {
標示已知詞(可能有多個解)
產生候選詞,加入詞庫,調整權重
}
2013年5月5日 星期日
emacs中undo後再redo
http://stackoverflow.com/questions/3527142/how-do-you-redo-changes-after-undo-with-emacs
在windows系統中,undo/redo通常是C-z/C-y,但在emacs中,裝了CUA只還給你undo,redo還是要記下這個按鍵組合:C-g C-u ,還滿拗口(手?)的,原文是 undo the undo
可以用elpa來裝undo-tree來試試另一種操作法,用undo-tree-visulize可以看到編輯的歷史
在windows系統中,undo/redo通常是C-z/C-y,但在emacs中,裝了CUA只還給你undo,redo還是要記下這個按鍵組合:C-g C-u ,還滿拗口(手?)的,原文是 undo the undo
可以用elpa來裝undo-tree來試試另一種操作法,用undo-tree-visulize可以看到編輯的歷史
2013年5月4日 星期六
emacs遇到desktop file appears to be in use by PID XXX的解決方式
http://stackoverflow.com/questions/14005526/emacs-startup-warning
上面說的是治標的方式
回過頭來說,會遇這個問題表示你使用了類似 http://www.emacswiki.org/DeskTop 中所說的設定
在此同時,一般人不會去設定 desktop-path 變數。但是按一下 C-h v desktop-path 好好檢查吧…
如果它出現了不想要的路徑,或是經常發生當掉的情況,最好根據 http://www.emacswiki.org/DeskTop 中 Minimal Setup 所展示的設定 desktop-path 及相關變數
而有多個桌面或機器共同設定的情況,這個 desktop-path 當然是不能共用的,不然互相lock會很麻煩的
上面說的是治標的方式
回過頭來說,會遇這個問題表示你使用了類似 http://www.emacswiki.org/DeskTop 中所說的設定
在此同時,一般人不會去設定 desktop-path 變數。但是按一下 C-h v desktop-path 好好檢查吧…
如果它出現了不想要的路徑,或是經常發生當掉的情況,最好根據 http://www.emacswiki.org/DeskTop 中 Minimal Setup 所展示的設定 desktop-path 及相關變數
而有多個桌面或機器共同設定的情況,這個 desktop-path 當然是不能共用的,不然互相lock會很麻煩的
2013年5月3日 星期五
Ubuntu 13.04上主要prolog compiler
- swi-prolog - ISO/Edinburgh-style Prolog interpreter
- yap - High-performance Prolog System
- gprolog - GNU Prolog compiler
perl中相當於sql的衍生欄位用法
http://www.perlhowto.com/sort_ordering_by_multiple_columns
有時查詢需要利用衍生欄位進行排序,使用map這個指令的確非常好用
不過這是很有名的黑魔法,請見 http://docstore.mik.ua/orelly/perl/cookbook/ch04_16.htm
還有個很有迫力的稱號,叫做"史瓦茲變換"…(害我想到柯西不等式TT)
有時查詢需要利用衍生欄位進行排序,使用map這個指令的確非常好用
不過這是很有名的黑魔法,請見 http://docstore.mik.ua/orelly/perl/cookbook/ch04_16.htm
還有個很有迫力的稱號,叫做"史瓦茲變換"…(害我想到柯西不等式TT)
2013年5月2日 星期四
Siri技術解析(II)
http://wesnerm.blogs.com/net_undocumented/2011/10/siri-technology.html
此文指出了幾篇參考文獻,感覺滿可信的。據他所言,後台所用的語法解析模型比較是基於統計而非精確文法。顯然由google translate之類的現存技術,的確是這樣沒錯。
http://search.cpan.org/~dougw/AI-Prolog-0.741/lib/AI/Prolog.pm
以perl來實作的prolog
http://search.cpan.org/~salva/Language-Prolog-Yaswi-0.21/Yaswi.pm
perl當作介面來呼叫swi prolog,真想看看能產生什麼樣的火花
此文指出了幾篇參考文獻,感覺滿可信的。據他所言,後台所用的語法解析模型比較是基於統計而非精確文法。顯然由google translate之類的現存技術,的確是這樣沒錯。
http://search.cpan.org/~dougw/AI-Prolog-0.741/lib/AI/Prolog.pm
以perl來實作的prolog
http://search.cpan.org/~salva/Language-Prolog-Yaswi-0.21/Yaswi.pm
perl當作介面來呼叫swi prolog,真想看看能產生什麼樣的火花
訂閱:
文章 (Atom)
