MeCabで名詞のみを抽出するGemを公開しました

形態素解析を行なうためのライブラリとして有名なものにMeCabがあります。 これを用いて名詞を抽出する機会があったので、 mecab-noun_parser として公開しました。

インストール方法

Gemfile に以下を書いて bundle します。

gem 'mecab'
gem 'mecab-noun_parser'

もちろん、別途 MeCab 本体のインストールを行なう必要があります。

使い方

使い方としては、 MeCab::NounParser のインスタンスを生成し、それに解析したい文章を追加します。 parse メソッドでこれを解析し、 nouns メソッドで結果を取得できます。

require 'mecab'
require 'mecab-noun_parser'

parser = MeCab::NounParser.new

parser << 'Rubyは、手軽なオブジェクト指向プログラミングを実現するための種々の機能を持つオブジェクト指向スクリプト言語です。本格的なオブジェクト指向言語であるSmalltalk、EiffelやC++などでは大げさに思われるような領域でのオブジェクト指向プログラミングを支援することを目的としています。もちろん通常の手続き型のプログラミングも可能です。'
parser << 'Rubyはテキスト処理関係の能力などに優れ、Perlと同じくらい強力です。さらにシンプルな文法と、例外処理やイテレータなどの機構によって、より分かりやすいプログラミングが出来ます。'
parser << 'まあ、簡単にいえばPerlのような手軽さで「楽しく」オブジェクト指向しようという言語です。どうぞ使ってみてください。'
parser << 'Rubyはまつもと ゆきひろが個人で開発しているフリーソフトウェアです。'

p parser.parse.nouns

この結果は以下のようになります。

[
  {:noun=>"Ruby", :count=>3},
  {:noun=>"オブジェクト指向プログラミング", :count=>2},
  {:noun=>"Perl", :count=>2},
    :
  {:noun=>"個人", :count=>1},
  {:noun=>"開発", :count=>1},
  {:noun=>"フリーソフトウェア", :count=>1}
]

名詞のみを配列でほしい場合は次のように書けます。

nouns = parser.parse.nouns
nouns.map { |noun| noun[:noun] } #=> ["Ruby", "オブジェクト指向プログラミング", ...]

単語を除外する

もしいくつかの単語を除外したければ、インスタンス生成時に :except オプションを渡します。

parser = MeCab::NounParser.new(except: ['Smalltalk', 'Eiffel', ...])

備考

Travis CIでMeCabをインストールする際、 apt-get だと古いバージョンしか入らず、ソースからインストールするのに苦労しました。 こちらは、 natto というGemの設定を参考にさせていただきました。

issueやプルリクエストなど、お待ちしております :)