単語集計(1)
はてな始めてから1年になるので、この1年どんな単語を使ったのか調べてみようかなーと思ったりしました。英語なら簡単だけど日本語は単語に分解するのが面倒なので
茶筌 http://chasen.naist.jp/hiki/ChaSen/
を使ってみることに。
http://chasen.naist.jp/hiki/ChaSen/?%C3%E3%E4%A5%A4%CE%C7%DB%C9%DB
からwindows用バイナリをダウンロードしてくる。使い方は簡単で
$ chasen sample.txt | head ■ ■ ■ 記号-一般 [ 未知語 アニメ アニメ アニメ 名詞-一般 ] 未知語 [ 未知語 A エイ A 記号-アルファベット Q キュー Q 記号-アルファベット ] 未知語 創 ソウ 創 名詞-固有名詞-一般 聖 ヒジリ 聖 名詞-一般
ちなみにサンプルは http://d.hatena.ne.jp/kkobayashi/20050517/p3 の日記より。
で、単語に分解したら適当に集計する。
# count.pl use strict; my (%cnt, %info); while(<>){ chomp; my($w, undef) = split(/\t/); $cnt{$w}++; $info{$w}=$_; } foreach (sort {$cnt{$b} <=> $cnt{$a}} keys %cnt){ print "$cnt{$_}\t$info{$_}\n"; }
こんな感じでいいでしょ。「名詞」と「動詞」だけ抜き出して集計。
$ chasen sample.txt | grep -E "[[:space:]](名詞|動詞)" | perl count.pl | head 3 脚本 キャクホン 脚本 名詞-一般 2 エリ エリ エリ 名詞-一般 2 河 カワ 河 名詞-一般 2 ん ン ん 名詞-非自立-一般 2 の ノ の 名詞-非自立-一般 2 森 モリ 森 名詞-固有名詞-人名-姓 2 アク アク アク 名詞-一般 2 オン オン オン 名詞-サ変接続 2 バカ バカ バカ 名詞-一般 2 話 バナシ 話 名詞-接尾-サ変接続
これで全ての日記を集計する・・・って、すっごい大変そうだなあ。とりあえず10265語あるらしい。そこから意味のある単語を抜き出すのは、結局人の仕事なんだよなあ・・・。
追記
Cygwin (or MinGW)でコンパイルしたい、という人もいるかもしれないのでメモ。長いので「続きを読む」で。
http://chasen.naist.jp/hiki/ChaSen/?%C3%E3%E4%A5%A4%CE%C7%DB%C9%DB
から本体と辞書をダウンロード。
また、Darts
http://chasen.org/~taku/software/darts/
というライブラリがいるらしいので、それもダウンロード。
# wget http://chasen.naist.jp/stable/chasen/chasen-2.3.3.tar.gz # wget http://chasen.naist.jp/stable/ipadic/ipadic-2.7.0.tar.gz # wget http://chasen.org/~taku/software/darts/src/darts-0.2.tar.gz # tar -zxvf chasen-2.3.3.tar.gz # tar -zxvf ipadic-2.7.0.tar.gz # tar -zxvf darts-0.2.tar.gz
Dartsのインストール
# ./configure # make && make install
茶筌のインストール
# ./configure
lib/MakefileのLIBSに-liconv を追加して、config.hの34行目あたりを
#define HAVE_MMAP 1
に変更*1。そしてmake。
# make && make install
IPADICのインストール
順番として、本体の後に辞書をインストールするらしい。これは簡単で
# ./configure # make && make install
ほんとはShift-JISでコンパイルしたかったんだけど、いまいちうまくいかない。-i s のオプションもうまくいかないし。http://chasen.aist-nara.ac.jp/ml/chasen-users/msg00350.htmlとか見たんだけどなあ・・・。んー、誰か知ってたら教えてください。
function chasen(){ nkf -e $1 | /usr/local/bin/chasen | nkf -s }