はじめに
MeCabを使ったユーザー辞書作成はこれまでもたくさん取り組まれてきていると思いますが、CentOSの後継の1つとされているAlmaLinux上のMeCabを使ったユーザー辞書の作成と、作成した辞書をPythonで用いる方法は、なかなかまとめられていない...と思い、ここに備忘録として記したいと思います
目次
- 実行環境
- MeCab+Neologdの準備
2-1. MeCabのインストール
2-2. mecab-ipadic-NEologdのダウンロード
2-3. MeCabの実行 - MeCabを使ったユーザー辞書の作成
- 作成したユーザー辞書をPythonから呼び出す
4-1. mecab-Python3のインストール
4-2. pythonの実行
1.実行環境
cat /etc/redhat-release
#実行結果
AlmaLinux release 8.6 (Sky Tiger)
python3 --version
#実行結果
Python 3.6.8
which python3
#実行結果
/usr/bin/python3
2. MeCab+Neologdの準備
2-1. MeCabのインストール
mecabをインストールするために必要になるgroongaリポジトリを追加します
sudo dnf -y install --nogpgcheck https://packages.groonga.org/almalinux/8/x86_64/Packages/groonga-release-2021.10.30-1.noarch.rpm
追加したリポジトリのメタデータキャッシュを作成しておきます
sudo dnf -y makecache
MeCabをインストールします
sudo dnf -y install mecab mecab-ipadic mecab-devel patch --nogpgcheck
MeCabのバージョンを確認しておきます
mecab -v
mecab of 0.996
2-2. mecab-ipadic-NEologdのダウンロード
MeCabのシステム辞書として今回は mecab-ipadic-NEologd を使用していきます。Gitからダウンロードします
以下のコマンドの実行が完了すると、カレントディレクトリに mecab-ipadic-neologd のフォルダが作成されます
git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
mecab-ipadic-NEologd をインストールします(すこし時間がかかると思います)
cd mecab-ipadic-neologd
./bin/install-mecab-ipadic-neologd -n -a
インストールの最後の方で以下のような表示が出ますので yes を入力して Enter します
[install-mecab-ipadic-NEologd] : Do you want to install mecab-ipadic-NEologd? Type yes or no.
2-3. MeCabの実行
mecab-ipadic-neologd がインストールできたので、MeCabを実行してみます
実行するときにシステム辞書として -d /usr/lib64/mecab/dic/mecab-ipadic-neologd/
を指定することに注意しましょう
mecab -d /usr/lib64/mecab/dic/mecab-ipadic-neologd/
今日はお昼ごはんにカレーライスを食べました。 #適当に文章を入力してみてください
今日 名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
お 接頭詞,名詞接続,*,*,*,*,お,オ,オ
昼ごはん 名詞,固有名詞,一般,*,*,*,昼ごはん,ヒルゴハン,ヒルゴハン
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ
カレーライス 名詞,一般,*,*,*,*,カレーライス,カレーライス,カレーライス
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
食べ 動詞,自立,*,*,一段,連用形,食べる,タベ,タベ
まし 助動詞,*,*,*,特殊・マス,連用形,ます,マシ,マシ
た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。 記号,句点,*,*,*,*,。,。,。
EOS
ちなみに、mecabのデフォルトのシステム辞書/usr/lib64/mecab/dic/ipadic/
を指定して実行してみると、出力結果が変化することがわかると思います。
※お昼ごはん
に着目してみてください。
mecab -d /usr/lib64/mecab/dic/ipadic/
今日はお昼ごはんにカレーライスを食べました。 #同じ文章を入れてみてください
今日 名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
お昼 名詞,副詞可能,*,*,*,*,お昼,オヒル,オヒル
ごはん 名詞,一般,*,*,*,*,ごはん,ゴハン,ゴハン
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ
カレーライス 名詞,一般,*,*,*,*,カレーライス,カレーライス,カレーライス
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
食べ 動詞,自立,*,*,一段,連用形,食べる,タベ,タベ
まし 助動詞,*,*,*,特殊・マス,連用形,ます,マシ,マシ
た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。 記号,句点,*,*,*,*,。,。,。
EOS
ipadic と ipadic-neologd とで行いたい自然言語処理の結果が異なってくるので、用途にあわせて指定するようにしてみてください
3. MeCabを使ったユーザー辞書の作成
それでは、実際にユーザ辞書を作成してみます。ユーザー辞書を作成するには、登録したい語句についてレコードを作成する必要があります。そのレコードのフォーマットは次のとおりです。
表層形,左文脈ID,右文脈ID,コスト,品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用型,活用形,原形,読み,発音
#たとえば
お昼ごはん,,,10,名詞,一般,*,*,*,*,お昼ごはん,オヒルゴハン,オヒルゴハン,オヒルゴハン
レコードができたら csvファイル として保存します。作成した csvファイルが UTF-8 とすることに注意してください
お昼ごはん,,,10,名詞,一般,*,*,*,*,お昼ごはん,オヒルゴハン,オヒルゴハン,オヒルゴハン
ファイルを作成したときに、そのファイルの文字コードを確認するためには nkf コマンドで確認すると良いです。nkfコマンドはデフォルトでインストールされていませんので、別途インストールしたあと確認してみてください
nkf -g ./userdic-data.csv
UTF-8
ユーザー辞書としたい語句のレコードを記載した csvファイル が作成できたら以下のコマンドを実行して、ユーザ辞書を作成します。正常に終了すると、以下のような実行結果になります。
/usr/libexec/mecab/mecab-dict-index -d /usr/lib64/mecab/dic/mecab-ipadic-neologd -u ./user.dic -f utf-8 -t utf-8 ./userdic-data.csv
#実行結果
reading ./userdic-data.csv ... 1
emitting double-array: 100% |###########################################|
done!
ユーザー辞書(user.dic)が作成できたら、ユーザー辞書の動作を確認してみましょう。お昼ごはん
をひとまとまりで認識できるように csvファイル に記載したので、ちゃんと正しく動いていますね
mecab -d /usr/lib64/mecab/dic/mecab-ipadic-neologd/ -u ./user.dic
今日はお昼ごはんにカレーライスを食べました。
今日 名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
お昼ごはん 名詞,一般,*,*,*,*,お昼ごはん,オヒルゴハン,オヒルゴハン,オヒルゴハン
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ
カレーライス 名詞,一般,*,*,*,*,カレーライス,カレーライス,カレーライス
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
食べ 動詞,自立,*,*,一段,連用形,食べる,タベ,タベ
まし 助動詞,*,*,*,特殊・マス,連用形,ます,マシ,マシ
た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。 記号,句点,*,*,*,*,。,。,。
EOS
4. 作成したユーザー辞書をPythonから呼び出す
では、Pythonプログラム上で作成したユーザー辞書を指定して、Pythonで扱えるようにしてみましょう
4-1. venv環境の作成
Pythonの仮想環境を作成しておきます。ここでは env というディレクトリにPythonの仮想環境を入れることとします
python3 -m venv env
コマンドが終了したら、仮想環境のPythonをアクティベートします
#アクティベートするときは以下のコマンドを入力します
source ~/env/bin/activate
#アクティベートを解除するときは以下のコマンドを入力します
deactivate
アクティベートしたあとに which python
を実行すると、仮想環境のpythonが呼び出されるようになります。
ここでは仮想環境のpip
にmecab-python3
をインストールして呼び出すようにしていきます。
which python
#実行結果
~/env/bin/python
4-2. mecab-Python3のインストール
仮想環境のPythonをアクティベートしている状態で、まずpip
のアップデートをしておきます
pip install --upgrade pip
pip
のアップデートができたら、mecab-python3
のモジュールをインストールします
pip install mecab-python3
4-3. pythonの実行
pythonでmecabを実行するのに必要なモジュールを準備できたので、実際にPythonからMeCabを呼び出し、作成したユーザー辞書を使った動作を確認してみましょう。
MeCabを実行するのに必要なファイルへのパスをおさらいしておきます
設定ファイル: /etc/mecabrc
システム辞書: /usr/lib64/mecab/dic/mecab-ipadic-neologd
ユーザー辞書: ./user.dic
-r /etc/mecabrc
でMeCabの設定ファイルを、-d /usr/lib64/mecab/dic/mecab-ipadic-neologd
でシステム辞書を、-u ./user.dic
で作成したユーザー辞書の指定します
import MeCab
tagger = MeCab.Tagger('-r /etc/mecabrc -d /usr/lib64/mecab/dic/mecab-ipadic-neologd -u ./user.dic')
print(tagger.parse('今日はお昼ごはんにカレーライスを食べました。'))
上記のコードのPythonプログラムファイルを作成できたら、実際に実行してみましょう。
Pythonを実行するとき仮想環境がアクティベートされていることを確認してください
python check.py
#実行結果
今日 名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
お昼ごはん 名詞,一般,*,*,*,*,お昼ごはん,オヒルゴハン,オヒルゴハン,オヒルゴハン
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ
カレーライス 名詞,一般,*,*,*,*,カレーライス,カレーライス,カレーライス
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
食べ 動詞,自立,*,*,一段,連用形,食べる,タベ,タベ
まし 助動詞,*,*,*,特殊・マス,連用形,ます,マシ,マシ
た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。 記号,句点,*,*,*,*,。,。,。
EOS
できましたね!
おわりに
この記事では、AlmaLinux8でMeCab+NEologdを使った辞書を作成してPythonから呼び出すながれを備忘録的にまとめてみました。同じような試みをしようとしている方の参考になれば幸いです。
参考文献
以下の方々のサイトを参考にさせていただきました。ありがとうございました。