http://rafeel.s602.xrea.com/honyaku/mecab.cgi
先ほどの形態素解析のテスト用の文章を利用して、1文毎に形態素の共起回数を数えてみました。
なにぶん14文ですので、単語の出現数も共起数も少ないですが
以下の様な感じに。マクドナルドの話なので、そっち系の言葉が多いですね。
助詞とか多いので、ひらがなは除外しました。対象は漢字かカタカナ。
こうゆうのを新聞サイトとかクロールしてもっと大規模にやればいいと思います。
副作用対策では、別途単語の出現回数も数えて、割ってやれば、ありふれた単語は得点が下がって
レアな単語の得点が上がるといったことができますね。
TF-IDFみたいな考え方です
マック<>フレバ-->5 セット<>円-->2 チキン<>アクセント-->2 チキン<>カボチャ-->2 チキン<>タマネギ-->2 チキン<>トマト-->2 チキン<>ナマ-->2 チキン<>パンズ-->2 チキン<>フレバ-->2 チキン<>プラス-->2 チキン<>ポテト-->2 チキン<>円-->2 チキン<>出し-->2 チキン<>厚-->2 チキン<>味わえる-->2 チキン<>混ま-->2 チキン<>程度-->2 チキン<>練り-->2 チキン<>良い-->2 チキンバーガー<>チキン-->2 バーガー<>円-->2 フレッシュネスバーガー<>マクドナルド-->2 フレバ<>決まる-->2 フレバ<>運命-->2 マクドナルド<>客-->2 マクドナルド<>復活-->2 マック<>チキン-->2 マック<>後-->2 マック<>復活-->2 マック<>決まる-->2
プログラムは行ごとに、単語と単語で3重ループですね。
InKatakanaの部分で、かたかなのみといったマッチングができます(perlは文字コードがらみややこしい)
my @words = split(/@@/,$lines[$i]); for(my $j=0;$j<@words;$j++) { my $word=$words[$j]; print $word."|"; if (decode_utf8($word) =~ /(\p{InKatakana}|\p{InCJKunifiedideographs})/) { for(my $k=$j+1;$k<@words;$k++) { my $word2=$words[$k]; if (decode_utf8($word2) =~ /(\p{InKatakana}|\p{InCJKunifiedideographs})/) { if( defined $col{$word."<>".$word2} ) { $col{$word."<>".$word2}++; } else { $col{$word."<>".$word2} = 1; } } } } } print "<br>\n";