.NET開発者のためのブログメディア
MeCabをPython3で使ってみよう|形態素解析について分かりやすく解説
- SE
- 形態素解析にMeCabを使用しているのですが、PythonでもMeCabが使えるのですか。
- PM
- はい、使えます。ここではPython3でMeCabを使った形態素解析をご紹介しましょう。
目次
MeCabとは?
MeCabとは、オープンソースの形態素解析エンジンのことです。MeCabという名前になったのは、開発者の方が和布蕪(めかぶ)が大好物だったためにMeCabという名前になったようです。
形態素解析とは
形態素解析とは、検索エンジンでも使われている自然言語処理の手法の一つで、ある文章・フレーズを「意味を持つ最小単位(=単語)」に分解し、それらの品詞などに判別する作業のことです。
MeCabのインストール
開発環境はWindows 10、Python3です。Windows環境にMeCabをインストールします。
①32bit版……MeCabの公式サイトからダウンロードします。
②64bit版……有志がビルドしたものがこちらのサイトから現時点(2021年2月16日)での最新バージョンがダウンロードできます。
ここではPythonが64bit版ですので②をインストールします。インストールの途中で文字コードを選択するところがありますが、UTF-8を選択してください。
PythonもMeCabもPATHを通す
PythonもMeCabもPATHを通します。PythonはPATHが通っていると思いますので、MeCabのPATHを通します。デフォルトでインストールした場合、C:\Plogram Files\MeCabにインストールされているはずです。
PATHはMeCabのbinフォルダに通します。PATHの通し方はまず、スタートボタンを右クリックして「ファイル名を指定して実行」を選択します。そして、「control」と入力し「Enter」を押下すればコントロールパネルが表示されます。
そして、「システムとセキュリティ」を選択し、「システム」を選択します。左側の一番下に「システムの詳細設定」がありますのでそれをクリックします。
次に「環境変数」をクリックすると色々とシステム環境変数が並んでいるところに「Path」という項目がありますので、そこをクリックし、『編集』をクリックします。
そして、「新規」をクリックし、「C:\Program Files\MeCab\bin」を加えて「OK」ボタンを押して行くとPATHが通ります。
MeCabを使ってみる
PowerShellを立ち上げて下記の通り打ち込みます。
1
|
PS:\>mecab
|
そして、「私は栃木に住んでいます。」と入力してみました。すると文字化けしたものが出力されますが、これは問題ありません。
1
2
3
4
5
6
7
8
|
私は栃木に住んでいます。
私は 險伜捷,荳闊ャ,*,*,*,*,*
ネ 蜷崎ゥ・蝗コ譛牙錐隧・邨・ケ・*,*,*,*
リに 險伜捷,荳闊ャ,*,*,*,*,*
Z 蜷崎ゥ・蝗コ譛牙錐隧・邨・ケ・*,*,*,*
んでいます 險伜捷,荳闊ャ,*,*,*,*,*
B 蜷崎ゥ・蝗コ譛牙錐隧・邨・ケ・*,*,*,*
EOS
|
MeCabをPython上で使えるようにする
MeCabがインストールできたならば、Python上で動かせなければなりません。多くのサイトでは、まず、Python上のMeCabバインディングの導入、そしてlibmecab.dll をコピー&ペーストするとあります。
しかし、Python3の最新版ではサイト通りにはいきません。
Python上にmecab-python3の導入
多くのサイトでは次のことをするように書いてありますが、Pyhton3の最新版ではエラーでインストールできません。
1
2
|
pip install ipykernel
pip install mecab-python-windows
|
例えばmecab-python-windowsをインストールしようとすると次のエラーが出てインストールできません。wheelはインストール済みとします。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
PS C:\> pip install mecab-python-windows Collecting mecab-python-windows
Using cached mecab-python-windows-0.996.3.tar.gz (53 kB)
Building wheels for collected packages: mecab-python-windows
Building wheel for mecab-python-windows (setup.py) ... error
ERROR: Command errored out with exit status 1:
command: 'e:\programs\python\python39\python.exe' -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\xxxx\\AppData\\Local\\Temp\\pip-install-essa5efg\\mecab-python-windows_ff62a8f8515e4ed1a627b26b7ce1994e\\setup.py'"'"'; __file__='"'"'C:\\Users\\xxxx\\AppData\\Local\\Temp\\pip-install-essa5efg\\mecab-python-windows_ff62a8f8515e4ed1a627b26b7ce1994e\\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d 'C:\Users\xxxx\AppData\Local\Temp\pip-wheel-3671ecsi'
cwd: C:\Users\xxxx\AppData\Local\Temp\pip-install-essa5efg\mecab-python-windows_ff62a8f8515e4ed1a627b26b7ce1994e\
Complete output (14 lines):
running bdist_wheel
running build
running build_py
file MeCab.py (for module MeCab) not found
file MeCab.py (for module MeCab) not found
running build_ext
building '_MeCab' extension
creating build
creating build\temp.win-amd64-3.9
creating build\temp.win-amd64-3.9\Release
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\bin\HostX86\x64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -IC:\Program Files\MeCab\sdk -Ic:\programs\python\python39\include -Ic:\programs\python\python39\include -IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\ATLMFC\include -IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include -IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\include\um -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\shared -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\um -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\winrt -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\cppwinrt /EHsc /TpMeCab_wrap.cxx /Fobuild\temp.win-amd64-3.9\Release\MeCab_wrap.obj
MeCab_wrap.cxx
MeCab_wrap.cxx(3137): fatal error C1083: include ファイルを開けません。'mecab.h':No such file or directory
error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.28.29333\\bin\\HostX86\\x64\\cl.exe' failed with exit code 2
----------------------------------------
ERROR: Failed building wheel for mecab-python-windows
Running setup.py clean for mecab-python-windows
Failed to build mecab-python-windows
Installing collected packages: mecab-python-windows
Running setup.py install for mecab-python-windows ... error
ERROR: Command errored out with exit status 1:
command: 'e:\programs\python\python39\python.exe' -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\xxxx\\AppData\\Local\\Temp\\pip-install-essa5efg\\mecab-python-windows_ff62a8f8515e4ed1a627b26b7ce1994e\\setup.py'"'"'; __file__='"'"'C:\\Users\\xxxx\\AppData\\Local\\Temp\\pip-install-essa5efg\\mecab-python-windows_ff62a8f8515e4ed1a627b26b7ce1994e\\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record 'C:\Users\xxxx\AppData\Local\Temp\pip-record-8w33mq2q\install-record.txt' --single-version-externally-managed --compile --install-headers 'e:\programs\python\python39\Include\mecab-python-windows'
cwd: C:\Users\hiroy\AppData\Local\Temp\pip-install-essa5efg\mecab-python-windows_ff62a8f8515e4ed1a627b26b7ce1994e\
Complete output (14 lines):
running install
running build
running build_py
file MeCab.py (for module MeCab) not found
file MeCab.py (for module MeCab) not found
running build_ext
building '_MeCab' extension
creating build
creating build\temp.win-amd64-3.9
creating build\temp.win-amd64-3.9\Release
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\bin\HostX86\x64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -IC:\Program Files\MeCab\sdk -Ie:\programs\python\python39\include -Ic:\programs\python\python39\include -IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\ATLMFC\include -IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include -IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\include\um -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\shared -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\um -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\winrt -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\cppwinrt /EHsc /TpMeCab_wrap.cxx /Fobuild\temp.win-amd64-3.9\Release\MeCab_wrap.obj
MeCab_wrap.cxx
MeCab_wrap.cxx(3137): fatal error C1083: include ファイルを開けません。'mecab.h':No such file or directory
error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.28.29333\\bin\\HostX86\\x64\\cl.exe' failed with exit code 2
----------------------------------------
ERROR: Command errored out with exit status 1: 'c:\programs\python\python39\python.exe' -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\xxxx\\AppData\\Local\\Temp\\pip-install-essa5efg\\mecab-python-windows_ff62a8f8515e4ed1a627b26b7ce1994e\\setup.py'"'"'; __file__='"'"'C:\\Users\\xxxx\\AppData\\Local\\Temp\\pip-install-essa5efg\\mecab-python-windows_ff62a8f8515e4ed1a627b26b7ce1994e\\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record 'C:\Users\hiroy\AppData\Local\Temp\pip-record-8w33mq2q\install-record.txt' --single-version-externally-managed --compile --install-headers 'c:\programs\python\python39\Include\mecab-python-windows' Check the logs for full command output.
|
これはmecab-python3をpipでインストールすることで解決できます。
1
2
3
4
5
|
PS C:\> pip3 install mecab-python3 Collecting mecab-python3
Downloading mecab_python3-1.0.3-cp39-cp39-win_amd64.whl (509 kB)
|████████████████████████████████| 509 kB 327 kB/s
Installing collected packages: mecab-python3
Successfully installed mecab-python3-1.0.3
|
これでmecab-python3のインストールができました。
形態素解析を試みる
それでは手始めに「かれのくるまでまつ」の形態素解析をしてみましょう。全文ひらがなです。「かれ」は「彼」と「枯れ」、「くるまで」は「車で」と「来るまで」と解釈可能で全文ひらがなの文章の形態素解析は難しいはずですが、MeCabは形態素解析を行えます。
次のソースをsample.pyとして保存してコンパイルしてください。
1
2
3
4
5
6
7
|
import MeCab
mecab = MeCab.Tagger("-Ochasen")
sent = "かれのくるまでまつ"
print(mecab.parse(sent))
|
そして下記のように実行します。
1
|
PS C:\(作業フォルダ)>py sample.py
|
すると、下記のように出力されます。「かれのくるまでまつ」は「枯れの来るまで待つ」と解析されています。
1
2
3
4
5
6
|
かれ カレ かれる 動詞-自立 一段 連用形
の ノ の 助詞-格助詞-一般
くる クル くる 動詞-自立 カ変・クル 基本形
まで マデ まで 助詞-副助詞
まつ マツ まつ 動詞-自立 五段・タ行 基本形
EOS
|
IPA-NEologd 辞書の導入
「今日はメロンパンを食べました。」という文章を解析してみるとメロンパンがメロンとパンで分解されて認識されていません。ソースコードは次の通りです。
1
2
3
4
5
6
7
|
import MeCab
mecab = MeCab.Tagger('-Ochasen')
sent ="今日はメロンパンを食べました"
print(mecab.parse(sent))
|
この出力結果は次の通りです。
1
2
3
4
5
6
7
8
9
|
今日 キョウ 今日 名詞-副詞可能
は ハ は 助詞-係助詞
メロン メロン メロン 名詞-一般
パン パン パン 名詞-一般
を ヲ を 助詞-格助詞-一般
食べ タベ 食べる 動詞-自立 一段 連用形
まし マシ ます 助動詞 特殊・マス 連用形
た タ た 助動詞 特殊・タ 基本形
EOS
|
これはWindows Subsystem for Linuxを利用するのが確実です。
WSL(Windows Subsystem for Linux)のインストール
WindowsがWSLが利用できる設定と仮定します。WSLでDebianをインストールします。Debianがインストールできたならば、次にDebianにMeCabをインストールします。PowerShellを立ち上げ、下記の通り打ち込むとPowerSellでDebianにログインできます。
1
|
PS C:\>wsl -d debian
|
これでMeCabがインストール完了です。
1
2
3
4
5
6
7
|
$ sudo apt-get update
$ sudo apt install mecab
$ sudo apt install libmecab-dev
$ sudo apt install mecab-ipadic-utf8
$ sudo apt install git
$ sudo apt install make
$ sudo apt install curl
|
mecab-ipadic-NEologdをDebianにインストール
次にmecab-ipadic-NEologdをインストールします。下記の通り打ち込んでください。
1
2
3
|
$ git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
$ cd mecab-ipadic-neologd
$ sudo bin/install-mecab-ipadic-neologd -n -a
|
これでmecab-ipadic-NEologdがDebianにインストールできます。
辞書をWindowsにコピーする
Debianのmecab-ipadic-NEologdの辞書をWindowsにコピーします。C:\Program Files\MeCab\dic\にNEologdフォルダを作成します。そこに辞書をコピーします。
1
|
$ sudo cp /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd/* /mnt/c/Program Files/MeCab/dic/NEologd/
|
これでコピーができます。
mecab-ipadic-NEologdの辞書を使用する
mecab-ipadic-NEologdの辞書を使うにはソースコードを少し変更しなければなりません。
1
2
3
4
5
6
7
8
|
import MeCab
mecab = MeCab.Tagger('-Ochasen -d "C:/Program Files/MeCab/dic/NEologd"')
sent ="今日はメロンパンを食べました"
print(mecab.parse(sent))
|
これをsampl2.pyとして保存し、Pythonでコンパイルします。
1
|
PS C:\(作業フォルダ)>py sample2.py
|
出力結果は次の通りです。
1
2
3
4
5
6
7
8
|
今日 キョウ 今日 名詞-副詞可能
は ハ は 助詞-係助詞
メロンパン メロンパン メロンパン 名詞-固有名詞-一般
を ヲ を 助詞-格助詞-一般
食べ タベ 食べる 動詞-自立 一段 連用形
まし マシ ます 助動詞 特殊・マス 連用形
た タ た 助動詞 特殊・タ 基本形
EOS
|
メロンパンが認識できています。
- SE
- なるほど。MeCabをPythonで使えるなら、私もやってみます。
- PM
- ご紹介した方法でPythonにMeCabをインストールして使ってみてください。
まとめ
テキストを読み込んでの形態素解析など、NumPyを使えば統計として価値あるものへと昇華できます。Python3でMeCabを使うとまだまだ奥が深い形態素解析ができるので、興味のある方はぜひ調べてみてください。
Search キーワード検索
Popular 人気の記事
reccomended おすすめ記事
Categories 連載一覧
Tags タグ一覧
Jobs 新着案件
-
開発エンジニア/東京都品川区/【WEB面談可】/在宅ワーク
月給29万~30万円東京都品川区(大崎駅) -
遠隔テストサービス機能改修/JavaScript/東京都港区/【WEB面談可】/テレワーク
月給45万~60万円東京都港区(六本木駅) -
病院内システムの不具合対応、保守/東京都豊島区/【WEB面談可】/テレワーク
月給30万~30万円東京都豊島区(池袋駅) -
開発/JavaScript/東京都豊島区/【WEB面談可】/テレワーク
月給50万~50万円東京都豊島区(大塚駅) -
債権債務システム追加開発/東京都文京区/【WEB面談可】/在宅勤務
月給62万~67万円東京都文京区(後楽園駅)