【Python】MacにMeCabを入れて自然言語処理をしてみよう(unidic-lite編)

Homebrew

MacにMeCabをインストールして、Python(3.9.1)での実行方法を紹介します。
MeCabの辞書をインストールするためにbrewコマンドを実行する必要があります。
Homebrewのインストール方法は参考情報にある記事を参考にしてください。

今回unidic-liteを辞書としてインストールしましたがchasenが上手く動作しなかったので
その対処方法も併せて紹介していきます。

また、UbuntuにMeCabをインストールして日本語のWordCloudを作成した投稿もあるので興味があればアクセスしてみてください。

参考情報

環境情報

MAC OS

MeCabのインストール

まずはbrewコマンドでMeCabの辞書をインストールします。

以下を実行します。

brew install mecab-ipadic

brewコマンドによるMeCabのインストール

次にvenvを使用して仮想環境を作成します。

python3 -m venv mecab-test

pythonの仮想環境を作成

作成した仮想環境を有効にします。

仮想環境の有効化

pipコマンドでmecab-pythonライブラリをインストールします。

pip3 install mecab-python3

pipコマンドでmecab-python3のインストール

MeCabの辞書をインストールします。

pip3 install unidic-lite

MeCabの辞書をインストールする

MeCabの動作確認

MeCabを正常にインストールできているか確認します。

mecab
すもももももももものうち

※mecabから抜けるときは[Ctrl]+[C]でおこないます。

mecabの確認

オプションを指定して実行もできます。

echo 東京特許許可局 | mecab -Oyomi

yomiをmecabで実行

Pythonの方でも試してみます。

import MeCab

wakati = MeCab.Tagger()
result = wakati.parse("すもももももももものうち")

print(result)

MeCab.Tagger()で[-Owakati]を指定し、分かち書きを試してみます。

import MeCab

wakati = MeCab.Tagger("-Owakati")
result = wakati.parse("すもももももももものうち").split()

print(result)

mecab-pythonのテスト

MeCab.Taggerに-Ochasenを指定したらエラーになった

MeCab.Tagger(-Ochasen)と指定したら以下のエラーが発生。

------------------- ERROR DETAILS ------------------------
arguments: -Ochasen
[ifs] no such file or directory: /Users/<USERNAME>/PyDev/mecab-test/lib/python3.9/site-packages/unidic/dicdir/mecabrc
----------------------------------------------------------

公式ページには以下の情報がありました。

Chasen output is not a built-in feature of MeCab, you must specify it in your dicrc or mecabrc. Notably, Unidic does not include Chasen output format. Please see the MeCab documentation.

https://github.com/SamuraiT/mecab-python3#using-unsupported-output-modes-like--ochasen

chasenはdicrcまたはmecabrcで指定が必要とのことです。

私の環境では以下のフォルダにdicrc、mecabrcは存在しました。

/Users/<USERNAME>/PyDev/mecab-test/lib/python3.9/site-packages/unidic_lite/dicdir

今回はchasenを動作させられるようにdicrcにchasenのフォーマットを書き込みます。

上記フォーマットは以下から引用させていただきました。

MeCab: Yet Another Japanese Dependency Structure Analyzer

それではエラーが発生しないか試してみます。

import MeCab

cha = MeCab.Tagger("-Ochasen")
text = "すもももももももものうち"
result = cha.parse(text)

print(result)

chasenの実行結果

-Oyomiはフリガナを出力してくれる

yomiもchasen同様にdicrcにフォーマットを入れてあげないとエラーで動作しません。

chasenと同じようにdicrcにyomiのフォーマットを指定します。

; yomi
node-format-yomi = %pS%f[6]
unk-format-yomi = %M
eos-format-yomi  = \n

上記で参照としたURLだと「node-format-yomi = %pS%f[7]」となっているが「node-format-yomi = %pS%f[6]」としないと期待する結果とならないので注意してください。

import MeCab

yomi = MeCab.Tagger("-Oyomi")
text = "東京特許許可局"
result = yomi.parse(text)

print(text)
print('------------------------------')
print(result)

yomiの出力結果

コメント

タイトルとURLをコピーしました