読者です 読者をやめる 読者になる 読者になる

kitak.blog

Kみたいなエンジニアになりたいブログ

MeCab を Ruby から使うための natto gem

こんにちは。エスプレッソマキアートダブル、きたけーです。

形態素解析エンジンのMeCabRuby から使いたくて色々調べてみたんですが、nattoというgemをみつけました。メカブナットウ

mecab gemっていうのもあるのですが、「ビルドでインストールに時間がかかる」「MeCabmecab gemのバージョンを意識しないといけない」と、昔つかおうとしてかなりハマって、嫌な思い出になってしまっていたのでした。 一方、nattoは、FFI(外部関数インターフェイス)でRubyMeCabをつないでいるので、ビルドの必要もなく、MeCabのバージョンを意識する必要もありません。

MeCab のインストール

brewが入っているなら、こんなかんじ

brew install mecab
brew install mecab-ipadic

natto のインストール

こんなかんじ

gem install natto

natto の使い方

こんなかんじ

require 'natto'

text = 'すもももももももものうち'

natto = Natto::MeCab.new
natto.parse(text) do |n|
  puts "#{n.surface}\t#{n.feature}"
end

結果

すもも    名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も 助詞,係助詞,*,*,*,*,も,モ,モ
もも  名詞,一般,*,*,*,*,もも,モモ,モモ
も 助詞,係助詞,*,*,*,*,も,モ,モ
もも  名詞,一般,*,*,*,*,もも,モモ,モモ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
うち  名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
    BOS/EOS,*,*,*,*,*,*,*,*

品詞が欲しかったら、n.feature.split(',')[0]とかする。