年末年始で自然言語処理の勉強をするため、Mecab
をインストールして使ってみました。
その時のインストール手順などの備忘録です。
インストール環境
- MacBook Pro (Mid 2014)
- macOS Mojava 10.14.1
インストール手順
Homebrew
HomebrewでMeCabをインストールします。
ターミナルから下記コマンドを入力すれば、Homebrewが端末にインストールされているか確認することができます。
$ brew -v
これでHomebrewのバージョンが表示されればインストール済です。
インストールされていない方は、下記サイトを参照してみてください。
Mecabと辞書をインストール
下記コマンドでインストールを実行します。
$ brew install mecab $ brew install mecab-ipadic
自分の環境では、brew install mecab
した際に下記エラーが出力されました。
Error: The following directories are not writable by your user: /usr/local/lib /usr/local/share/man/man8 You should change the ownership of these directories to your user. sudo chown -R $(whoami) /usr/local/lib /usr/local/share/man/man8
言われた通りに、ディレクトリのオーナーを変更します。
$ sudo chown -R [ここにログインしているユーザ名] /usr/local/lib $ sudo chown -R [ここにログインしているユーザ名] /usr/local/share/man/man8
この後、再びbrew install mecab
で正常終了しました。
mecab-ipadic-NEologdをインストール
mecab-ipadic-NEologdをインストールします。
先程導入したIPA辞書(mecab-ipadic)でも十分なのですが、最近の語彙等に対応するためには追加辞書が必要です。
ここでは、有名な追加辞書であるmecab-ipadic-NEologdを使用します。
NEologdを使用するメリットについては、公式GitHubのREADMEによくまとまっているので、気になる方はご参照ください。
まずは、mecab-ipadic-NEologdをGitHub上からクローンしてきます。
$ brew install git curl xz $ git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git $ cd mecab-ipadic-neologd
以下コマンドを実行し、画面の指示に従うとインストールが完了します。
インストールする辞書はオプションで選べますが、基本的には標準設定で十分みたい。
- 標準設定
$ ./bin/install-mecab-ipadic-neologd -n
- 全辞書インストール(※合計2Gbyte程度の空き容量が必要)
$ ./bin/install-mecab-ipadic-neologd -n -a
自分は標準設定でインストール開始
んんn.....
なんか怪しい
[install-mecab-ipadic-NEologd] : Start.. [install-mecab-ipadic-NEologd] : Check the existance 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 is not found.
mecab is not found.
まさかね。
とりあえず進めてみます。
Pythonバインディングをインストール
下記コマンドでインストール
$ brew install swig $ pip install mecab-python3
はい。エラーきました
Command "python setup.py egg_info" failed with error code 1 in /private/var/folders/g0/bt1_fn9x3bb4_4sj6827j25w0000gn/T/pip-install-n1vtwgic/mecab-python3/
原因調査の旅へ
まずは本当にmecab
が正しくインストールされているか確認してみる
$ brew install mecab Warning: mecab 0.996 is already installed, it's just not linked You can use `brew link mecab` to link this version.
リンクがうまくできていないっぽい?
$ brew link mecab Linking /usr/local/Cellar/mecab/0.996... Error: Could not symlink include/mecab.h /usr/local/include is not writable.
シンボリックリンクが出来ていないようです。
たしかにそんなフォルダは存在しない。
無理やり作ってみた。
$ sudo mkdir /usr/local/include $ sudo chown -R `whoami`:admin /usr/local/include
もう一度実行してみる。
$ brew link mecab Linking /usr/local/Cellar/mecab/0.996... 7 symlinks created
できた!気がする・・・
もう一度mecab-ipadic-NEologdのインストールをおそるおそる・・・
$ cd mecab-ipadic-neologd $ ./bin/install-mecab-ipadic-neologd -n ..... [install-mecab-ipadic-NEologd] : Finish..
うまくいったような気がします。
よしよし、mecab-python3
もこのままうまくいってくれ。
$ pip install mecab-python3
Failed building wheel for mecab-python3
なぜ...
〜格闘すること1時間強〜
原因わかりました。
command line toolsが最新のバージョン過ぎたようです....
(こんなの普通は分からないでしょ・・・)
早速少し古いcommand line toolsをダウンロードしてきて、インストールします。
下記からダウンロードできます。
https://developer.apple.com/download/more/
自分がインストールしたバージョンは下記です。
- command line tools 9.4
満を持して
$ pip install mecab-python3 Installing collected packages: mecab-python3 Successfully installed mecab-python3-0.996.1
できた...!!!!!
python3から使ってみた
import MeCab mecab = MeCab.Tagger ('-d /usr/local/lib/mecab/dic/mecab-ipadic-neologd') text = 'イタリアのネアポリスに住む少年ジョルノ・ジョバァーナは、ジョースター家の宿敵・DIOの血を継ぐ息子であった。' mecab.parse('')#文字列がGCされるのを防ぐ node = mecab.parseToNode(text) while node: #単語を取得 word = node.surface #品詞を取得 pos = node.feature.split(",")[1] print('{0} , {1}'.format(word, pos)) #次の単語に進める node = node.next
イタリアのネアポリスに住む少年ジョルノ・ジョバァーナは、ジョースター家の宿敵・DIOの血を継ぐ息子であった。 , * イタリアのネアポリスに住む少年ジョルノ・ジョバァーナは、ジョースター家の宿敵・DIOの血を継ぐ息子であった。 , 固有名詞 のネアポリスに住む少年ジョルノ・ジョバァーナは、ジョースター家の宿敵・DIOの血を継ぐ息子であった。 , 連体化 ネアポリスに住む少年ジョルノ・ジョバァーナは、ジョースター家の宿敵・DIOの血を継ぐ息子であった。 , 固有名詞 に住む少年ジョルノ・ジョバァーナは、ジョースター家の宿敵・DIOの血を継ぐ息子であった。 , 格助詞 住む少年ジョルノ・ジョバァーナは、ジョースター家の宿敵・DIOの血を継ぐ息子であった。 , 自立 少年ジョルノ・ジョバァーナは、ジョースター家の宿敵・DIOの血を継ぐ息子であった。 , 一般 ジョルノ・ジョバァーナは、ジョースター家の宿敵・DIOの血を継ぐ息子であった。 , 固有名詞 は、ジョースター家の宿敵・DIOの血を継ぐ息子であった。 , 係助詞 、ジョースター家の宿敵・DIOの血を継ぐ息子であった。 , 読点 ジョースター家の宿敵・DIOの血を継ぐ息子であった。 , 固有名詞 家の宿敵・DIOの血を継ぐ息子であった。 , 接尾 の宿敵・DIOの血を継ぐ息子であった。 , 連体化 宿敵・DIOの血を継ぐ息子であった。 , 一般 ・DIOの血を継ぐ息子であった。 , 一般 DIOの血を継ぐ息子であった。 , 固有名詞 の血を継ぐ息子であった。 , 連体化 血を継ぐ息子であった。 , 一般 を継ぐ息子であった。 , 格助詞 継ぐ息子であった。 , 自立 息子であった。 , 一般 であった。 , * あった。 , * た。 , * 。 , 句点 , *
tagger = MeCab.Tagger("-Ochasen") print(tagger.parse("イタリアのネアポリスに住む少年ジョルノ・ジョバァーナは、ジョースター家の宿敵・DIOの血を継ぐ息子であった。'"))
イタリア イタリア イタリア 名詞-固有名詞-地域-国 の ノ の 助詞-連体化 ネアポリス ネアポリス ネアポリス 名詞-一般 に ニ に 助詞-格助詞-一般 住む スム 住む 動詞-自立 五段・マ行 基本形 少年 ショウネン 少年 名詞-一般 ジョルノ・ジョバァーナ ジョルノ・ジョバァーナ ジョルノ・ジョバァーナ 名詞-一般 は ハ は 助詞-係助詞 、 、 、 記号-読点 ジョー ジョー ジョー 名詞-固有名詞-人名-名 スター スター スター 名詞-一般 家 カ 家 名詞-接尾-一般 の ノ の 助詞-連体化 宿敵 シュクテキ 宿敵 名詞-一般 ・ ・ ・ 記号-一般 DIO DIO DIO 名詞-固有名詞-組織 の ノ の 助詞-連体化 血 チ 血 名詞-一般 を ヲ を 助詞-格助詞-一般 継ぐ ツグ 継ぐ 動詞-自立 五段・ガ行 基本形 息子 ムスコ 息子 名詞-一般 で デ だ 助動詞 特殊・ダ 連用形 あっ アッ ある 助動詞 五段・ラ行アル 連用タ接続 た タ た 助動詞 特殊・タ 基本形 。 。 。 記号-句点 ' ' ' 名詞-サ変接続 EOS
一言
ディ・モールトベネ!!!
(明日ディズニーシーに朝から行くので、そろそろ寝ないと嫁に怒られる)