形態素解析など言語解析業界では 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