GENIA taggerを使ってみる

 今までは英語の品詞解析にEngTaggerを用いていましたが、名詞を抽出するだけでも複数形と単数形が別々に数えられてしまうので、各単語の原形を解析して返してくれるソフトを探しなおしました。
 この条件を満たす形態素解析プログラムとして、「GENIA tagger」がよさそうだったので、早速使ってみることにしました。
 本家のホームページからではなかなかダウンローダが進まなかったので、GitHubからダウンロードしました。

 makeしてすぐに実行ファイルは作成できますが、これをRubyから使用するには外部コマンドとして実行しなければならないので、「GENIA Taggerで英語の形態素解析」のサイトさんを参考に、GENIAサーバを作成して実行できるようにしました。

 このサーバはソケットに送られてきた文字列を、1行ずつGENIA taggerに送って、解析結果を1行にまとめて送り返してくれます。これを利用して、頻度解析クラスの方で解析したい文章を1行にまとめて、結果をハッシュにまとめるというようにコードしました。
 GENIA taggerの返却結果は、2列目に原形、3列目に品詞名が入っているので、これをたよりに単語の出現数を数えました。

@socket.puts document.gsub("\n", " ")
result = @socket.gets.gsub(" ", "\n").chomp
word_list = Hash.new #単語出現数を数えるハッシュ

result.each_line do |line|
elements = line.split(/\t/) #タブ区切りにする

if elements[2] =~ /^NN/ #名詞を回収
word = elements[1].downcase #小文字に直す

if word_list.include?(word) #既に追加済なら
word_list[word] +=1
else #新規登録
word_list[word] = 1
end
end
end
#スコアの大きい順に並び替え
word_list = word_list.sort{|a,b| b[1] <=> a[1]}

 結果を確認してみたところ、「mice」は「mouse」として数えられていましたし、他の「-s」付きの名詞も原形で回収できていました。次回は論文間の出力の比較を行いたいと思います。