ギークなエンジニアを目指す男

機械学習系の知識を蓄えようとするブログ

python3からMecabを使ってみた(インストール手順も)

年末年始で自然言語処理の勉強をするため、Mecabをインストールして使ってみました。

その時のインストール手順などの備忘録です。

インストール環境

インストール手順

Homebrew

HomebrewでMeCabをインストールします。

ターミナルから下記コマンドを入力すれば、Homebrewが端末にインストールされているか確認することができます。

$ brew -v

これでHomebrewのバージョンが表示されればインストール済です。

インストールされていない方は、下記サイトを参照してみてください。

phexcel.work

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によくまとまっているので、気になる方はご参照ください。

github.com

まずは、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.

シンボリックリンクが出来ていないようです。

たしかにそんなフォルダは存在しない。

f:id:taxa_program:20181221235525p:plain

無理やり作ってみた。

$ 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

f:id:taxa_program:20181222005457p:plain

満を持して

$ 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

一言

ディ・モールトベネ!!!

(明日ディズニーシーに朝から行くので、そろそろ寝ないと嫁に怒られる)