1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AlmaLinux8上でMeCab+NEologdで辞書を作成してPythonから呼び出す

Last updated at Posted at 2022-09-22

はじめに

MeCabを使ったユーザー辞書作成はこれまでもたくさん取り組まれてきていると思いますが、CentOSの後継の1つとされているAlmaLinux上のMeCabを使ったユーザー辞書の作成と、作成した辞書をPythonで用いる方法は、なかなかまとめられていない...と思い、ここに備忘録として記したいと思います

目次

  1. 実行環境
  2. MeCab+Neologdの準備
    2-1. MeCabのインストール
    2-2. mecab-ipadic-NEologdのダウンロード
    2-3. MeCabの実行
  3. MeCabを使ったユーザー辞書の作成
  4. 作成したユーザー辞書を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 とすることに注意してください

userdic-data.csv
お昼ごはん,,,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が呼び出されるようになります。
ここでは仮想環境のpipmecab-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で作成したユーザー辞書の指定します

check.py
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から呼び出すながれを備忘録的にまとめてみました。同じような試みをしようとしている方の参考になれば幸いです。

参考文献

以下の方々のサイトを参考にさせていただきました。ありがとうございました。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?