MeCabで名詞のみを抽出するGemを公開しました
- Development
- Aug 17, 2015
形態素解析を行なうためのライブラリとして有名なものに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やプルリクエストなど、お待ちしております :)