単語集計(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とか見たんだけどなあ・・・。んー、誰か知ってたら教えてください。

仕方ないので、chasenに渡すときだけeucに変換する。

function chasen(){
    nkf -e $1 | /usr/local/bin/chasen | nkf -s
}