MeCab

【Python】MeCabによる形態素解析の基本的な使い方

【Python】MeCabによる形態素解析の基本的な使い方

PythonでMeCabを用いて形態素解析をする方法について解説します。

形態素解析とは

形態素解析とは、テキストデータの文から、対象言語の文法や単語の品詞の情報に基づいて分割する解析のことを言います。「形態素」というのは言語学上の用語で、意味を持つ要素の最小単位のことを言い、これ以上分割すると意味がなくなってしまう単位の事です。

例えば、適当なのですが以下のような文を考えてみます。

形態素解析 例文

この文章は|で書いたような位置で要素を分割することができます。例えば「Python」や「解析」といった言葉は普通名詞ですし、「し」という部分は元々は「する」でサ行変格活用がされています。形態素解析では辞書を使ってこのような分割を機械的に実行することができます。

日本語の形態素解析エンジンとしてはMeCabが有名です。MeCabはオープンソースの形態素解析エンジンで、奈良先端科学大学出身の工藤拓さんによって開発されているものです。私は以前の職場でインターネット上から記事をクローリングして解析するソフトウェアの開発に関わっていましたが、その際にMeCabや係り受け解析ができるCaboChaといったソフトウェアを使用していました。

本記事では、PythonでMeCabを使って形態素解析を実行するための環境の準備方法や基本的な使い方について紹介します。形態素解析の精度向上を考えると辞書をどうするか等、色々と難しい部分がありますが、本記事ではunidicという有名な辞書を用いて形態素解析を実行できるようにするところを目標とします。

Note

多言語に対応した形態素解析を実施したい場合は、有償製品ですが、BASIS TechnologyのRosette Base Linguisticsが候補になるかと思います。公式サイトはこちらを参考にしてください。約40か国語の言語に対応しています。

係り受け解析ができるCaboChaというソフトウェアの使い方については「CaboChaによる構文解析の基本的な使い方」でまとめています。興味があれば参考にしてください。

PythonでのMeCabを使用した形態素解析

PythonでMeCabを使用した形態素解析するための環境準備の方法と簡単な形態素解析の実行方法について紹介していきます。

環境の準備方法

MeCabを使用する場合には、まずMeCabをインストールする必要があります。MeCabはpipでインストールすることができます。

以下のコマンドでpipを使ってMeCabをインストールしてください。

pip install mecab-python3

次にMeCabが使用する辞書であるunidicをインストールします。unidicについてもpipを使って以下のようにインストールができます。

pip install unidic

unidicについては、これに加えて辞書自体をダウンロードする必要があります。以下のコマンドでunidicの辞書をダウンロードしてください。

python -m unidic download

上記コマンドを実行すると以下の例ようにダウンロードが進みます。記事執筆時でダウンロードされたのはunidicのv3.1.0でした。

download url: https://cotonoha-dic.s3-ap-northeast-1.amazonaws.com/unidic-3.1.0.zip
Dictionary version: 3.1.0+2021-08-31
Downloading UniDic v3.1.0+2021-08-31...
unidic-3.1.0.zip: 100%|███████████████████| 526M/526M [01:43<00:00, 5.07MB/s]
Finished download.
Downloaded UniDic v3.1.0+2021-08-31 to D:\PycharmProjects\python-tech-sample-source\venv\lib\site-packages\unidic\dicdir

上記で形態素解析を実施するための準備については整います。次に、対象のテキストに対して形態素解析を実行する例についてご紹介します。

PythonでのMeCabを用いた形態素解析の実装

PythonでMeCabを用いた形態素解析を利用する方法について以下の簡単な例を用いて紹介します。MeCabやunidicをインストールしていない方は上記の環境構築の手順をご確認いただいてインストールしてから試してください。

import MeCab

# MeCabの解析気を用意する
# Taggerのinitでunidicの読み込みがされる
tagger = MeCab.Tagger()

# 解析対象の文字列を用意する
sample_text = 'Pythonで形態素解析をしてみます。'

# 形態素解析を実行する
result = tagger.parse(sample_text)

# 形態素解析結果を表示する
print(result)
【実行結果】
Python	名詞,普通名詞,一般,,,
で	助詞,格助詞,,,,,デ,で,で,デ,で,デ,和,"","","","","","",格助,デ,デ,デ,デ,"","動詞%F2@0,名詞%F1","",7014343053025792,25518
形態	名詞,普通名詞,一般,,,,ケイタイ,形態,形態,ケータイ,形態,ケータイ,漢,"","","","","","",体,ケイタイ,ケイタイ,ケイタイ,ケイタイ,"0","C2","",3024215389381120,11002
素	接尾辞,名詞的,一般,,,,ソ,素,素,ソ,素,ソ,漢,"","","","","","",接尾体,ソ,ソ,ソ,ソ,"","C3","",5752103704338944,20926
解析	名詞,普通名詞,サ変可能,,,,カイセキ,解析,解析,カイセキ,解析,カイセキ,漢,"","","","","","",体,カイセキ,カイセキ,カイセキ,カイセキ,"0","C2","",1590177315299840,5785
を	助詞,格助詞,,,,,ヲ,を,を,オ,を,オ,和,"","","","","","",格助,ヲ,ヲ,ヲ,ヲ,"","動詞%F2@0,名詞%F1,形容詞%F2@-1","",11381878116459008,41407
し	動詞,非自立可能,,,サ行変格,連用形-一般,スル,為る,し,シ,する,スル,和,"","","","","","",用,シ,スル,シ,スル,"0","C5","",5370298291593857,19537
て	助詞,接続助詞,,,,,テ,て,て,テ,て,テ,和,"","","","","","",接助,テ,テ,テ,テ,"","動詞%F1,形容詞%F2@-1","",6837321680953856,24874
み	動詞,非自立可能,,,上一段-マ行,連用形-一般,ミル,見る,み,ミ,みる,ミル,和,"","","","","","",用,ミ,ミル,ミ,ミル,"1","C1","M4@1",10148500948001409,36920
ます	助動詞,,,,助動詞-マス,終止形-一般,マス,ます,ます,マス,ます,マス,和,"","","","","","",助動,マス,マス,マス,マス,"","動詞%F4@1","",9812325267808939,35697
。	補助記号,句点,,,,,,。,。,,。,,記号,"","","","","","",補助,,,,,"","","",6880571302400,25
EOS

【MeCabの使用方法の解説】

MeCabを利用する場合には、MeCabをimportする必要があります。

import MeCab

まずは、MeCabのエンジンであるTaggerクラスのインスタンスを作ります。

# MeCabの解析気を用意する
# Taggerのinitでunidicの読み込みがされる
tagger = MeCab.Tagger()

unidicをインストールした割には使っていないように見えるかもしれませんが、コメントに記載しているように実際にはTaggerの__init__()内でtry_import_unidic()という関数が呼び出されていて、unidicがある場合には読み込みがされています。興味がある方はTaggerクラスの定義を見てみてください。

後は簡単です。以下の部分のように対象となる文をTagger.parseメソッドに渡すだけ解析結果が返却されます。

# 解析対象の文字列を用意する
sample_text = 'Pythonで形態素解析をしてみましょう。'

# 形態素解析を実行する
result = tagger.parse(sample_text)

# 形態素解析結果を表示する
print(result)

実行結果を見てみると、文が各要素に分割され、品詞や文法が表示されていて、形態素解析ができていることが分かります。

まとめ

PythonでMeCabを使って形態素解析を実行するための環境準備方法と簡単な実行例を紹介しました。

試すだけであれば簡単にできることはお分かりいただけたかと思います。ただし、解析結果が必ずどのような文でも正しいかというとそうではありません。形態素解析の解析精度向上を考える場合には辞書をどうするか等、技術的に色々と検討する必要が出てきます。

まず、形態素解析を試してみたいという場合は、今回ご紹介した例のように一度使って試してみてください。

Note

MeCabの開発本体のgithubはこちらを参考にしてください。READMEに概要や基本的な使い方等の記載もあります。