形態素解析など言語解析業界では Python のほうがメジャーなようです。でも Rubyist としてはそこでも Ruby で突き進んでいきたいわけです(速度は気にしないという前提)。なので Ruby での使い方をやっていきます。
MeCabとは
MeCab (和布蕪)とは
MeCabは 京都大学情報学研究科−日本電信電話株式会社コミュニケーション科学基礎研究所 共同研究ユニットプロジェクトを通じて開発されたオープンソース 形態素解析エンジンです。 言語, 辞書,コーパスに依存しない汎用的な設計を 基本方針としています。 パラメータの推定に Conditional Random Fields (CRF) を用 いており, ChaSenが採用している 隠れマルコフモデルに比べ性能が向上しています。また、平均的に ChaSen, Juman, KAKASIより高速に動作します。 ちなみに和布蕪(めかぶ)は, 作者の好物です。
MeCab: Yet Another Part-of-Speech and Morphological Analyzer
ねばねば…。
HomebrewでMeCab本体とIPA辞書をインストール
あとでリンクを載せている、 heroku-buildpack-mecab で使える MeCab のバージョンが0.996なので、それを入れます。
さて。 MeCabを入れる前に mecab gem をインストールしようとすると怒られます(当然)。
$ gem install mecab
Fetching: mecab-0.996.gem (100%)
Building native extensions. This could take a while...
ERROR: Error installing mecab:
ERROR: Failed to build gem native extension.
/Users/riocampos/.anyenv/envs/rbenv/versions/2.1.5/bin/ruby extconf.rb
checking for make... yes
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers. Check the mkmf.log file for more details. You may
need configuration options.
Provided configuration options:
--with-opt-dir
--without-opt-dir
--with-opt-include
--without-opt-include=${opt-dir}/include
--with-opt-lib
--without-opt-lib=${opt-dir}/lib
--with-make-prog
--without-make-prog
--srcdir=.
--curdir
--ruby=/Users/riocampos/.anyenv/envs/rbenv/versions/2.1.5/bin/ruby
--with-mecab-config
--without-mecab-config
--enable-mecab-config
--disable-mecab-config
extconf.rb:12:in ``': No such file or directory - mecab-config (Errno::ENOENT)
from extconf.rb:12:in `<main>'
extconf failed, exit code 1
Gem files will remain installed in /Users/riocampos/.anyenv/envs/rbenv/gems/2.1.0/gems/mecab-0.996 for inspection.
Results logged to /Users/riocampos/.anyenv/envs/rbenv/gems/2.1.0/extensions/x86_64-darwin-13/2.1.0/mecab-0.996/gem_make.out
MeCabインストール
気を取り直して Homebrew で入れます。
$ brew info mecab mecab: stable 0.996 (bottled) http://mecab.sourceforge.net/ Not installed From: https://github.com/Homebrew/homebrew/blob/master/Library/Formula/mecab.rb
$ brew install mecab ==> Downloading https://homebrew.bintray.com/bottles/mecab-0.996.mavericks.bottle.1.tar.gz ######################################################################## 100.0% ==> Pouring mecab-0.996.mavericks.bottle.1.tar.gz 🍺 /usr/local/Cellar/mecab/0.996: 18 files, 4.5M
mecab gemインストール
$ gem install mecab Building native extensions. This could take a while... Successfully installed mecab-0.996 1 gem installed
試しに動かしてみます。
require 'mecab' #=> true m = MeCab::Tagger.new ("-Ochasen") # RuntimeError:
動かん>_<
ではシステムのコマンドで動くかな?
$ mecab param.cpp(69) [ifs] no such file or directory: /usr/local/Cellar/mecab/0.996/lib/mecab/dic/ipadic/dicrc
うごかーんorz
$ ls -l /usr/local/Cellar/mecab/0.996/lib total 8944 -r--r--r-- 1 riocampos wheel 1704760 4 13 19:11 libmecab.2.dylib -r--r--r-- 1 riocampos wheel 2865808 10 22 07:42 libmecab.a lrwxr-xr-x 1 riocampos wheel 16 10 22 07:42 libmecab.dylib -> libmecab.2.dylib
あ、辞書が入ってない。
IPA辞書インストール
$ brew install mecab-ipadic ==> Downloading https://downloads.sourceforge.net/project/mecab/mecab-ipadic/2.7.0-20070801/mecab-ip ######################################################################## 100.0% ==> ./configure --prefix=/usr/local/Cellar/mecab-ipadic/2.7.0-20070801 --with-charset=utf8 ==> make install 🍺 /usr/local/Cellar/mecab-ipadic/2.7.0-20070801: 6 files, 16K, built in 19 seconds
おけ。確認。
$ ls -l /usr/local/Cellar/mecab/0.996/lib/mecab/dic/ipadic/ total 103656 -rw-r--r-- 1 riocampos wheel 262496 4 13 19:19 char.bin -rw-r--r-- 1 riocampos wheel 693 4 13 19:19 dicrc -rw-r--r-- 1 riocampos wheel 55910 4 13 19:19 left-id.def -rw-r--r-- 1 riocampos wheel 3463716 4 13 19:19 matrix.bin -rw-r--r-- 1 riocampos wheel 1477 4 13 19:19 pos-id.def -rw-r--r-- 1 riocampos wheel 6241 4 13 19:19 rewrite.def -rw-r--r-- 1 riocampos wheel 55910 4 13 19:19 right-id.def -rw-r--r-- 1 riocampos wheel 49199027 4 13 19:19 sys.dic -rw-r--r-- 1 riocampos wheel 5690 4 13 19:19 unk.dic
実行
mecabコマンドで実行
RubyでMeCabを使う - Qiita
の例文を。
$ mecab すもももももももものうち すもも 名詞,一般,*,*,*,*,すもも,スモモ,スモモ も 助詞,係助詞,*,*,*,*,も,モ,モ もも 名詞,一般,*,*,*,*,もも,モモ,モモ も 助詞,係助詞,*,*,*,*,も,モ,モ もも 名詞,一般,*,*,*,*,もも,モモ,モモ の 助詞,連体化,*,*,*,*,の,ノ,ノ うち 名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ EOS
おお動いた\o/
もいっちょ。
[O] MeCab 用の新語辞書 mecab-ipadic-neologd を公開しました
で挙がっていた例文を。
アップルは Apple Watchを4月24日に国内発売します。 アップル 名詞,一般,*,*,*,*,アップル,アップル,アップル は 助詞,係助詞,*,*,*,*,は,ハ,ワ Apple 名詞,固有名詞,組織,*,*,*,* Watch 名詞,一般,*,*,*,*,* を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ 4 名詞,数,*,*,*,*,* 月 名詞,一般,*,*,*,*,月,ツキ,ツキ 24 名詞,数,*,*,*,*,* 日 名詞,接尾,助数詞,*,*,*,日,ニチ,ニチ に 助詞,格助詞,一般,*,*,*,に,ニ,ニ 国内 名詞,一般,*,*,*,*,国内,コクナイ,コクナイ 発売 名詞,サ変接続,*,*,*,*,発売,ハツバイ,ハツバイ し 動詞,自立,*,*,サ変・スル,連用形,する,シ,シ ます 助動詞,*,*,*,特殊・マス,基本形,ます,マス,マス 。 記号,句点,*,*,*,*,。,。,。 EOS ^C
当たり前ですが Apple Watch が固有名詞になってないです。そういう新語への対策として mecab-ipadic-neologd が上がってきたようです。
詳しくは
mecab-ipadic-neologd/README.ja.md at master · neologd/mecab-ipadic-neologd
を。
Rubyで実行
m = MeCab::Tagger.create("-Ochasen") #=> #<MeCab::Tagger:0x007fefc16ab400 @__swigtype__="_p_MeCab__Tagger"> print m.parse ("今日もしないとね") 今日 キョウ 今日 名詞-副詞可能 も モ も 助詞-係助詞 し シ する 動詞-自立 サ変・スル 未然形 ない ナイ ない 助動詞 特殊・ナイ 基本形 と ト と 助詞-接続助詞 ね ネ ね 助詞-終助詞 EOS #=> nil
うごいた\o/
引数に "-Ochasen" を渡してるので、出力が ChaSen 形式なんですね。
他のgem:natto
上記では標準の mecab gem
スクリプト言語のバインディング
を使いましたが、その他にも
rubyのmecabバインディングnattoを使う - Qiita
によると natto gem
buruzaemon/natto
があるそうです(ねばねばな名前ばかり>_
インストール
$ gem install natto Fetching: natto-0.9.9.gem (100%) Successfully installed natto-0.9.9 1 gem installed
実行
RubyでMeCabを使う - Qiita
に倣ってみる。
require 'natto' #=> true text = 'すもももももももものうち' #=> "すもももももももものうち" nm = Natto::MeCab.new #=> #<Natto::MeCab:0x007fb10373a990 @tagger=#<FFI::Pointer address=0x007fb1056e2c00>, @libpath="/usr/local/Cellar/mecab/0.996/lib/libmecab.dylib", @options={}, @dicts=[#<Natto::DictionaryInfo:0x007fb1037395e0 @filepath="/usr/local/Cellar/mecab/0.996/lib/mecab/dic/ipadic/sys.dic", charset=utf8, type=0>], @version=0.996> nm.parse(text) do |n| puts "#{n.surface}\t#{n.feature}" end すもも 名詞,一般,*,*,*,*,すもも,スモモ,スモモ も 助詞,係助詞,*,*,*,*,も,モ,モ もも 名詞,一般,*,*,*,*,もも,モモ,モモ も 助詞,係助詞,*,*,*,*,も,モ,モ もも 名詞,一般,*,*,*,*,もも,モモ,モモ の 助詞,連体化,*,*,*,*,の,ノ,ノ うち 名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ BOS/EOS,*,*,*,*,*,*,*,* #=> 1
おお動いた動いた\o/
mecab-ipadic-neologd 辞書を使う
テキトーなところにmecab-ipadic-neologdのインストーラ/アップデータを置きます。今回は /usr/local/mecab-ipadic-neologd/ で作業して /usr/local/mecab-ipadic-neologd/latest に置きました。
mecab-ipadic-neologd/README.ja.md at master · neologd/mecab-ipadic-neologd
に従って行います。まずは必要なライブラリを入れます。
$ brew install mecab mecab-ipadic git curl xz
続いて /usr/local/mecab-ipadic-neologd/ で
$ git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
して、
$ mv mecab-ipadic-neologd latest $ cd latest
と移動します。
最新版に更新してインストールするには
$ git pull $ ./bin/install-mecab-ipadic-neologd
を実行します。なお mecab-ipadic-neologd 辞書のインストール先は標準で
$ echo `mecab-config --dicdir`"/mecab-ipadic-neologd"
の表示結果のディレクトリになるとのこと。今回だと
$ echo `mecab-config --dicdir`"/mecab-ipadic-neologd" /usr/local/Cellar/mecab/0.996/lib/mecab/dic/mecab-ipadic-neologd
です。 mecab-ipadic-neologd 辞書を使うときにはこのパスを指定する必要があります。
インストール
ではインストールしましょう。
$ ./bin/install-mecab-ipadic-neologd
[install-mecab-ipadic-neologd] : Start..
[install-mecab-ipadic-neologd] : Check the exists of libraries
[install-mecab-ipadic-neologd] : find => ok
[install-mecab-ipadic-neologd] : sort => ok
[install-mecab-ipadic-neologd] : head => ok
[install-mecab-ipadic-neologd] : cut => ok
[install-mecab-ipadic-neologd] : egrep => ok
[install-mecab-ipadic-neologd] : mecab => ok
[install-mecab-ipadic-neologd] : mecab-config => ok
[install-mecab-ipadic-neologd] : make => ok
[install-mecab-ipadic-neologd] : curl => ok
[install-mecab-ipadic-neologd] : sed => ok
[install-mecab-ipadic-neologd] : cat => ok
[install-mecab-ipadic-neologd] : diff => ok
[install-mecab-ipadic-neologd] : tar => ok
[install-mecab-ipadic-neologd] : unxz => ok
[install-mecab-ipadic-neologd] : xargs => ok
[install-mecab-ipadic-neologd] : grep => ok
[install-mecab-ipadic-neologd] : iconv => ok
[install-mecab-ipadic-neologd] : mecab-ipadic-neologd will be install to /usr/local/Cellar/mecab/0.996/lib/mecab/dic/mecab-ipadic-neologd
[install-mecab-ipadic-neologd] : Make mecab-ipadic-neologd
[make-mecab-ipadic-neologd] : Start..
[make-mecab-ipadic-neologd] : Check local seed directory
[make-mecab-ipadic-neologd] : Check local seed file
[make-mecab-ipadic-neologd] : Check local build directory
[make-mecab-ipadic-neologd] : create /usr/local/Cellar/mecab-ipadic-neologd/updated/libexec/../build
[make-mecab-ipadic-neologd] : Download original mecab-ipadic file
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 11.6M 100 11.6M 0 0 1501k 0 0:00:07 0:00:07 --:--:-- 2064k
[make-mecab-ipadic-neologd] : Decompress original mecab-ipadic file
x mecab-ipadic-2.7.0-20070801/
x mecab-ipadic-2.7.0-20070801/README
x mecab-ipadic-2.7.0-20070801/AUTHORS
x mecab-ipadic-2.7.0-20070801/COPYING
x mecab-ipadic-2.7.0-20070801/ChangeLog
x mecab-ipadic-2.7.0-20070801/INSTALL
x mecab-ipadic-2.7.0-20070801/Makefile.am
x mecab-ipadic-2.7.0-20070801/Makefile.in
x mecab-ipadic-2.7.0-20070801/NEWS
x mecab-ipadic-2.7.0-20070801/aclocal.m4
x mecab-ipadic-2.7.0-20070801/config.guess
x mecab-ipadic-2.7.0-20070801/config.sub
x mecab-ipadic-2.7.0-20070801/configure
x mecab-ipadic-2.7.0-20070801/configure.in
x mecab-ipadic-2.7.0-20070801/install-sh
x mecab-ipadic-2.7.0-20070801/missing
x mecab-ipadic-2.7.0-20070801/mkinstalldirs
x mecab-ipadic-2.7.0-20070801/Adj.csv
x mecab-ipadic-2.7.0-20070801/Adnominal.csv
x mecab-ipadic-2.7.0-20070801/Adverb.csv
x mecab-ipadic-2.7.0-20070801/Auxil.csv
x mecab-ipadic-2.7.0-20070801/Conjunction.csv
x mecab-ipadic-2.7.0-20070801/Filler.csv
x mecab-ipadic-2.7.0-20070801/Interjection.csv
x mecab-ipadic-2.7.0-20070801/Noun.adjv.csv
x mecab-ipadic-2.7.0-20070801/Noun.adverbal.csv
x mecab-ipadic-2.7.0-20070801/Noun.csv
x mecab-ipadic-2.7.0-20070801/Noun.demonst.csv
x mecab-ipadic-2.7.0-20070801/Noun.nai.csv
x mecab-ipadic-2.7.0-20070801/Noun.name.csv
x mecab-ipadic-2.7.0-20070801/Noun.number.csv
x mecab-ipadic-2.7.0-20070801/Noun.org.csv
x mecab-ipadic-2.7.0-20070801/Noun.others.csv
x mecab-ipadic-2.7.0-20070801/Noun.place.csv
x mecab-ipadic-2.7.0-20070801/Noun.proper.csv
x mecab-ipadic-2.7.0-20070801/Noun.verbal.csv
x mecab-ipadic-2.7.0-20070801/Others.csv
x mecab-ipadic-2.7.0-20070801/Postp-col.csv
x mecab-ipadic-2.7.0-20070801/Postp.csv
x mecab-ipadic-2.7.0-20070801/Prefix.csv
x mecab-ipadic-2.7.0-20070801/Suffix.csv
x mecab-ipadic-2.7.0-20070801/Symbol.csv
x mecab-ipadic-2.7.0-20070801/Verb.csv
x mecab-ipadic-2.7.0-20070801/char.def
x mecab-ipadic-2.7.0-20070801/feature.def
x mecab-ipadic-2.7.0-20070801/left-id.def
x mecab-ipadic-2.7.0-20070801/matrix.def
x mecab-ipadic-2.7.0-20070801/pos-id.def
x mecab-ipadic-2.7.0-20070801/rewrite.def
x mecab-ipadic-2.7.0-20070801/right-id.def
x mecab-ipadic-2.7.0-20070801/unk.def
x mecab-ipadic-2.7.0-20070801/dicrc
x mecab-ipadic-2.7.0-20070801/RESULT
[make-mecab-ipadic-neologd] : Configure custom system dictionary on /usr/local/Cellar/mecab-ipadic-neologd/updated/libexec/../build/mecab-ipadic-2.7.0-20070801-neologd-20150413
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking whether make sets $(MAKE)... yes
checking for working aclocal-1.4... missing
checking for working autoconf... found
checking for working automake-1.4... missing
checking for working autoheader... found
checking for working makeinfo... found
checking for a BSD-compatible install... /usr/bin/install -c
checking for mecab-config... /usr/local/bin/mecab-config
configure: creating ./config.status
config.status: creating Makefile
[make-mecab-ipadic-neologd] : Encode the character encoding of system dictionary resources from EUC_JP to UTF-8
./../../libexec/iconv_euc_to_utf8.sh ./Adj.csv
./../../libexec/iconv_euc_to_utf8.sh ./Adnominal.csv
./../../libexec/iconv_euc_to_utf8.sh ./Adverb.csv
./../../libexec/iconv_euc_to_utf8.sh ./Auxil.csv
./../../libexec/iconv_euc_to_utf8.sh ./Conjunction.csv
./../../libexec/iconv_euc_to_utf8.sh ./Filler.csv
./../../libexec/iconv_euc_to_utf8.sh ./Interjection.csv
./../../libexec/iconv_euc_to_utf8.sh ./Noun.adjv.csv
./../../libexec/iconv_euc_to_utf8.sh ./Noun.adverbal.csv
./../../libexec/iconv_euc_to_utf8.sh ./Noun.csv
./../../libexec/iconv_euc_to_utf8.sh ./Noun.demonst.csv
./../../libexec/iconv_euc_to_utf8.sh ./Noun.nai.csv
./../../libexec/iconv_euc_to_utf8.sh ./Noun.name.csv
./../../libexec/iconv_euc_to_utf8.sh ./Noun.number.csv
./../../libexec/iconv_euc_to_utf8.sh ./Noun.org.csv
./../../libexec/iconv_euc_to_utf8.sh ./Noun.others.csv
./../../libexec/iconv_euc_to_utf8.sh ./Noun.place.csv
./../../libexec/iconv_euc_to_utf8.sh ./Noun.proper.csv
./../../libexec/iconv_euc_to_utf8.sh ./Noun.verbal.csv
./../../libexec/iconv_euc_to_utf8.sh ./Others.csv
./../../libexec/iconv_euc_to_utf8.sh ./Postp-col.csv
./../../libexec/iconv_euc_to_utf8.sh ./Postp.csv
./../../libexec/iconv_euc_to_utf8.sh ./Prefix.csv
./../../libexec/iconv_euc_to_utf8.sh ./Suffix.csv
./../../libexec/iconv_euc_to_utf8.sh ./Symbol.csv
./../../libexec/iconv_euc_to_utf8.sh ./Verb.csv
rm ./Adj.csv
rm ./Adnominal.csv
rm ./Adverb.csv
rm ./Auxil.csv
rm ./Conjunction.csv
rm ./Filler.csv
rm ./Interjection.csv
rm ./Noun.adjv.csv
rm ./Noun.adverbal.csv
rm ./Noun.csv
rm ./Noun.demonst.csv
rm ./Noun.nai.csv
rm ./Noun.name.csv
rm ./Noun.number.csv
rm ./Noun.org.csv
rm ./Noun.others.csv
rm ./Noun.place.csv
rm ./Noun.proper.csv
rm ./Noun.verbal.csv
rm ./Others.csv
rm ./Postp-col.csv
rm ./Postp.csv
rm ./Prefix.csv
rm ./Suffix.csv
rm ./Symbol.csv
rm ./Verb.csv
./../../libexec/iconv_euc_to_utf8.sh ./char.def
./../../libexec/iconv_euc_to_utf8.sh ./feature.def
./../../libexec/iconv_euc_to_utf8.sh ./left-id.def
./../../libexec/iconv_euc_to_utf8.sh ./matrix.def
./../../libexec/iconv_euc_to_utf8.sh ./pos-id.def
./../../libexec/iconv_euc_to_utf8.sh ./rewrite.def
./../../libexec/iconv_euc_to_utf8.sh ./right-id.def
./../../libexec/iconv_euc_to_utf8.sh ./unk.def
rm ./char.def
rm ./feature.def
rm ./left-id.def
rm ./matrix.def
rm ./pos-id.def
rm ./rewrite.def
rm ./right-id.def
rm ./unk.def
mv ./Adj.csv.utf8 ./Adj.csv
mv ./Adnominal.csv.utf8 ./Adnominal.csv
mv ./Adverb.csv.utf8 ./Adverb.csv
mv ./Auxil.csv.utf8 ./Auxil.csv
mv ./char.def.utf8 ./char.def
mv ./Conjunction.csv.utf8 ./Conjunction.csv
mv ./feature.def.utf8 ./feature.def
mv ./Filler.csv.utf8 ./Filler.csv
mv ./Interjection.csv.utf8 ./Interjection.csv
mv ./left-id.def.utf8 ./left-id.def
mv ./matrix.def.utf8 ./matrix.def
mv ./Noun.adjv.csv.utf8 ./Noun.adjv.csv
mv ./Noun.adverbal.csv.utf8 ./Noun.adverbal.csv
mv ./Noun.csv.utf8 ./Noun.csv
mv ./Noun.demonst.csv.utf8 ./Noun.demonst.csv
mv ./Noun.nai.csv.utf8 ./Noun.nai.csv
mv ./Noun.name.csv.utf8 ./Noun.name.csv
mv ./Noun.number.csv.utf8 ./Noun.number.csv
mv ./Noun.org.csv.utf8 ./Noun.org.csv
mv ./Noun.others.csv.utf8 ./Noun.others.csv
mv ./Noun.place.csv.utf8 ./Noun.place.csv
mv ./Noun.proper.csv.utf8 ./Noun.proper.csv
mv ./Noun.verbal.csv.utf8 ./Noun.verbal.csv
mv ./Others.csv.utf8 ./Others.csv
mv ./pos-id.def.utf8 ./pos-id.def
mv ./Postp-col.csv.utf8 ./Postp-col.csv
mv ./Postp.csv.utf8 ./Postp.csv
mv ./Prefix.csv.utf8 ./Prefix.csv
mv ./rewrite.def.utf8 ./rewrite.def
mv ./right-id.def.utf8 ./right-id.def
mv ./Suffix.csv.utf8 ./Suffix.csv
mv ./Symbol.csv.utf8 ./Symbol.csv
mv ./unk.def.utf8 ./unk.def
mv ./Verb.csv.utf8 ./Verb.csv
[make-mecab-ipadic-neologd] : Copy user dictionary resource
[make-mecab-ipadic-neologd] : Re-Index system dictionary
reading ./unk.def ... 40
emitting double-array: 100% |###########################################|
./model.def is not found. skipped.
reading ./Adj.csv ... 27210
reading ./Adnominal.csv ... 135
reading ./Adverb.csv ... 3032
reading ./Auxil.csv ... 199
reading ./Conjunction.csv ... 171
reading ./Filler.csv ... 19
reading ./Interjection.csv ... 252
reading ./mecab-user-dict-seed.20150413.csv ... 1690104
reading ./Noun.adjv.csv ... 3328
reading ./Noun.adverbal.csv ... 795
reading ./Noun.csv ... 60477
reading ./Noun.demonst.csv ... 120
reading ./Noun.nai.csv ... 42
reading ./Noun.name.csv ... 34202
reading ./Noun.number.csv ... 42
reading ./Noun.org.csv ... 16668
reading ./Noun.others.csv ... 151
reading ./Noun.place.csv ... 72999
reading ./Noun.proper.csv ... 27327
reading ./Noun.verbal.csv ... 12146
reading ./Others.csv ... 2
reading ./Postp-col.csv ... 91
reading ./Postp.csv ... 146
reading ./Prefix.csv ... 221
reading ./Suffix.csv ... 1393
reading ./Symbol.csv ... 208
reading ./Verb.csv ... 130750
emitting double-array: 100% |###########################################|
reading ./matrix.def ... 1316x1316
emitting matrix : 100% |###########################################|
done!
[make-mecab-ipadic-neologd] : Make custom system dictionary on /usr/local/Cellar/mecab-ipadic-neologd/updated/libexec/../build/mecab-ipadic-2.7.0-20070801-neologd-20150413
make: Nothing to be done for `all'.
[make-mecab-ipadic-neologd] : Finish..
[install-mecab-ipadic-neologd] : Get results of tokenize test
[test-mecab-ipadic-neologd] : Start..
[test-mecab-ipadic-neologd] : Replace timestamp from 'git clone' date to 'git commit' date
[test-mecab-ipadic-neologd] : Get buzz phrases
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 132k 0 132k 0 0 196k 0 --:--:-- --:--:-- --:--:-- 196k
[test-mecab-ipadic-neologd] : Get difference between default system dictionary and mecab-ipadic-neologd
[test-mecab-ipadic-neologd] : Tokenize phrase using default system dictionary
[test-mecab-ipadic-neologd] : Tokenize phrase using mecab-ipadic-neologd
[test-mecab-ipadic-neologd] : Get result of diff
[test-mecab-ipadic-neologd] : Please check difference between default system dictionary and mecab-ipadic-neologd
default system dictonary | mecab-ipadic-neologd
月 9 | 月9
エリカ 様 | エリカ様
金 朋 | 金朋
沢尻 エリカ | 沢尻エリカ
金田 朋子 | 金田朋子
ぶっ ちゃ け 寺 | ぶっちゃけ 寺
相 葉 | 相葉
ウェスティンホテル 東京 | ウェスティンホテル東京
少 クラ 収 | 少クラ 収
裸 祭り | 裸祭り
加藤 晴彦 | 加藤晴彦
こぶし ファクトリー | こぶしファクトリー
十津川 警部 | 十津川警部
竹中 直人 | 竹中直人
深津 絵里 | 深津絵里
ミヤマ オウム | ミヤマオウム
猫 中毒 | 猫中毒
エアロ ゲル | エアロゲル
夙川 アトム | 夙川アトム
[test-mecab-ipadic-neologd] : Finish..
[install-mecab-ipadic-neologd] : Please check the list of differences in the upper part.
[install-mecab-ipadic-neologd] : Do you want to install mecab-ipadic-neologd? Type yes or no.ここでインストールするか否かの質問があるので yes を入れます。多分 y とかじゃダメ。
yes [install-mecab-ipadic-neologd] : OK. Let's install mecab-ipadic-neologd. [install-mecab-ipadic-neologd] : Start.. [install-mecab-ipadic-neologd] : Sudo make install to /usr/local/Cellar/mecab/0.996/lib/mecab/dic/mecab-ipadic-neologd Password:
ここでパスワードが求められます。
make[1]: Nothing to be done for `install-exec-am'.
/bin/sh ./mkinstalldirs /usr/local/Cellar/mecab/0.996/lib/mecab/dic/mecab-ipadic-neologd
mkdir /usr/local/Cellar/mecab/0.996/lib/mecab/dic/mecab-ipadic-neologd
/usr/bin/install -c -m 644 ./matrix.bin /usr/local/Cellar/mecab/0.996/lib/mecab/dic/mecab-ipadic-neologd/matrix.bin
/usr/bin/install -c -m 644 ./char.bin /usr/local/Cellar/mecab/0.996/lib/mecab/dic/mecab-ipadic-neologd/char.bin
/usr/bin/install -c -m 644 ./sys.dic /usr/local/Cellar/mecab/0.996/lib/mecab/dic/mecab-ipadic-neologd/sys.dic
/usr/bin/install -c -m 644 ./unk.dic /usr/local/Cellar/mecab/0.996/lib/mecab/dic/mecab-ipadic-neologd/unk.dic
/usr/bin/install -c -m 644 ./left-id.def /usr/local/Cellar/mecab/0.996/lib/mecab/dic/mecab-ipadic-neologd/left-id.def
/usr/bin/install -c -m 644 ./right-id.def /usr/local/Cellar/mecab/0.996/lib/mecab/dic/mecab-ipadic-neologd/right-id.def
/usr/bin/install -c -m 644 ./rewrite.def /usr/local/Cellar/mecab/0.996/lib/mecab/dic/mecab-ipadic-neologd/rewrite.def
/usr/bin/install -c -m 644 ./pos-id.def /usr/local/Cellar/mecab/0.996/lib/mecab/dic/mecab-ipadic-neologd/pos-id.def
/usr/bin/install -c -m 644 ./dicrc /usr/local/Cellar/mecab/0.996/lib/mecab/dic/mecab-ipadic-neologd/dicrc
[install-mecab-ipadic-neologd] : Install completed.
[install-mecab-ipadic-neologd] : When you use MeCab, you can set '/usr/local/Cellar/mecab/0.996/lib/mecab/dic/mecab-ipadic-neologd' as a value of '-d' option of MeCab.
[install-mecab-ipadic-neologd] : Usage of mecab-ipadic-neologd is here.
Usage:
$ mecab -d /usr/local/Cellar/mecab/0.996/lib/mecab/dic/mecab-ipadic-neologd ...
[install-mecab-ipadic-neologd] : Finish..
[install-mecab-ipadic-neologd] : Finish..インストールされました。
mecab gem で mecab-ipadic-neologd 辞書を使う
先ほどのインストールログのお終い部分
Usage:
$ mecab -d /usr/local/Cellar/mecab/0.996/lib/mecab/dic/mecab-ipadic-neologd ...を参考にして、辞書パスをMeCab::Tagger.new の-d 引数に指定します。
require 'mecab' #=> true m = MeCab::Tagger.new("-d /usr/local/Cellar/mecab/0.996/lib/mecab/dic/mecab-ipadic-neologd") #=> #<MeCab::Tagger:0x007ff8e42f6590 @__swigtype__="_p_MeCab__Tagger"> sentence = "アップルはApple Watchを4月24日に国内発売します。" #=> "アップルはApple Watchを4月24日に国内発売します。" print m.parse(sentence) アップル 名詞,一般,*,*,*,*,アップル,アップル,アップル は 助詞,係助詞,*,*,*,*,は,ハ,ワ Apple Watch 名詞,固有名詞,一般,*,*,*,Apple Watch,アップルウォッチ,アップルウォッチ を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ 4月24日 名詞,固有名詞,一般,*,*,*,4月24日,シガツニジュウヨッカ,シガツニジュウヨッカ に 助詞,格助詞,一般,*,*,*,に,ニ,ニ 国内 名詞,一般,*,*,*,*,国内,コクナイ,コクナイ 発売 名詞,サ変接続,*,*,*,*,発売,ハツバイ,ハツバイ し 動詞,自立,*,*,サ変・スル,連用形,する,シ,シ ます 助動詞,*,*,*,特殊・マス,基本形,ます,マス,マス 。 記号,句点,*,*,*,*,。,。,。 EOS #=> nil
ちゃんと Apple Watch が固有名詞扱いされましたね。
natto gemで mecab-ipadic-neologd 辞書を使う
Natto::MeCab.new の引数として、辞書パスをdicdirに指定すれば良いです。
require 'natto' #=> true nm = Natto::MeCab.new(dicdir: "/usr/local/Cellar/mecab/0.996/lib/mecab/dic/mecab-ipadic-neologd") #=> #<Natto::MeCab:0x007ff8e75fda10 @tagger=#<FFI::Pointer address=0x007ff8e7c9ee30>, @libpath="/usr/local/Cellar/mecab/0.996/lib/libmecab.dylib", @options={:dicdir=>"/usr/local/Cellar/mecab/0.996/lib/mecab/dic/mecab-ipadic-neologd"}, @dicts=[#<Natto::DictionaryInfo:0x007ff8e75f7c78 @filepath="/usr/local/Cellar/mecab/0.996/lib/mecab/dic/mecab-ipadic-neologd/sys.dic", charset=UTF8, type=0>], @version=0.996> sentence = "アップルはApple Watchを4月24日に国内発売します。" #=> "アップルはApple Watchを4月24日に国内発売します。" nm.parse(sentence) do |n| puts "#{n.surface}\t#{n.feature}" end アップル 名詞,一般,*,*,*,*,アップル,アップル,アップル は 助詞,係助詞,*,*,*,*,は,ハ,ワ Apple Watch 名詞,固有名詞,一般,*,*,*,Apple Watch,アップルウォッチ,アップルウォッチ を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ 4月24日 名詞,固有名詞,一般,*,*,*,4月24日,シガツニジュウヨッカ,シガツニジュウヨッカ に 助詞,格助詞,一般,*,*,*,に,ニ,ニ 国内 名詞,一般,*,*,*,*,国内,コクナイ,コクナイ 発売 名詞,サ変接続,*,*,*,*,発売,ハツバイ,ハツバイ し 動詞,自立,*,*,サ変・スル,連用形,する,シ,シ ます 助動詞,*,*,*,特殊・マス,基本形,ます,マス,マス 。 記号,句点,*,*,*,*,。,。,。 BOS/EOS,*,*,*,*,*,*,*,* => 1
こちらでも Apple Watch が固有名詞扱いされましたね。
なお、
インストール時に mecab-ipadic をベースにビルド処理をする
とありますし、
nm.dicts.first.is_sysdic? => true nm.dicts.first.is_usrdic? => false
となることから、 mecab-ipadic の代わりに mecab-ipadic-neologd がシステム辞書として用いられている、ということが分かります。
ちなみに、常時使う辞書を指定するには /usr/local/Cellar/mecab/0.996/etc/mecabrc の dicdir に辞書パスを渡せば良いです。初期設定は
dicdir = /usr/local/Cellar/mecab/0.996/lib/mecab/dic/ipadic
になっていました。
めも
MeCab 学習用リンク:
出力フォーマット:
natto gem 学習用リンク:
作業用リンク:
- diasks2/heroku-buildpack-mecab:Heroku で使うための buildpack