MeCab (めかぶ)とは?日本語の形態素解析をPythonでやってみた
- ツイート
-
- 2024/07/22

ChatGPTをはじめ、AIの自然言語処理はますます進化を遂げています。本来コンピュータは計算機ですが、どのようにして文章を処理しているのでしょうか。今回は、日本語処理には欠かせない存在、MeCab(めかぶ)について解説します。
目次
Mecabとは?
MeCabとは、日本語の解析ツールで、AIなどが日本語などの言語(自然言語)を機械的に処理するために用いられます。数ある日本語解析システムの中でも、精度が高いことやPythonやR、C言語やJavaなどのプログラミング言語で利用しやすいことから、エンジニアから研究者まで、幅広い利用者の間で活用されています。
ちなみに、「めかぶ」という名前は、開発者の好物であるワカメの一部である「和布蕪(めかぶ)」に由来しています。
MeCabが行う形態素解析とは?
日本語の解析には、「形態素解析」という手法が使われています。形態素とは単語が意味を持つ最小の単位で、つまり形態素解析とは文章をできるだけ単語に分解することです。
英語に代表される多くの言語には単語間にスペースがあるため、文章から単語を抽出するのは簡単です。一方、日本語の場合は単語を区切るわかりやすい指標がありません。したがって、コンピューターが単語を抽出する難易度も高くなります。
例えば、以下の文章はどのように単語を区切ることができるでしょうか。
私は東京都に住んでいます。
日本語を使い慣れている人であれば、問題なく以下のように区切れるでしょう。
私/は/東京/都/に/住ん/で/い/ます/。
しかし、単純に区切る方法としては、「東京・都(とうきょうと)」だけでなく「東・京都(ひがしきょうと)」など、数多くのパターンがあり、一般的なコンピューターがその判別をすることは難しいのです。この難関をMeCabは、膨大な日本語データベースの辞書を利用して、確率モデルによって最も確率の高い区切り方をすることで乗り越えました。

MeCabの辞書とは?
MeCabが解析する際に活用している日本語データベースのことを「辞書」と呼びます。辞書にはいくつか種類がありますが、その中でも、最新のワードなどを含むIPA辞書と、古文まで豊富に含んだUnidicの2つが主流です。
形態素解析の活用方法・形態素解析を応用するには?
MeCabはいくつかのプログラミング言語に対応しており、PythonやR、C言語やJavaで利用することができます。MeCab本体と辞書をダウンロードし、ソースコードを実行することで簡単に使えます。
文章を形態素解析することにより、単語の頻度などを特定することができるため、様々なことに応用することができます。例えば、以下のような使われ方が一般的です。
ワードクラウド
ワードクラウドとは、文章の特徴を図で可視化する手法のひとつです。形態素解析によって分解した単語の頻度などをもとに、文章がどのような内容なのかを図示することができます。実はこの記事の一番上にあるサムネイル画像は、本記事の文中のワードクラウドになっています。
クラスタリング
文章中の単語の頻度の割合を計算することにより、文章を特徴ごとにグループ化することができます。たとえば、迷惑メールの判定などに使われているのはこの手法です。迷惑メールに含まれる単語や文章の特徴を学習させることができれば、新たに受信したメールの判別を行うことも可能になります。
Webスクレイピング・APIを利用した分析
Web上のデータの多くは文字データで構成されています。Twitterの分析などに応用すれば、自社アカウントのフォロワーがどのような商品を必要としているのか、どのような層なのかなどを、自動で分析をするためにも形態素解析は役に立ちます。
進化を続ける自然言語処理
また新たな手法では、単語の特徴量をベクトルにする「Word2Vec」が注目されています。Word2Vecとは、単語を何次元ものベクトルに変換し、数値で表すことができる技術です。この技術の最大の特徴は、自然言語を数量的に扱うことができる点で、単語の類似度の計算はもちろん、単語を足し算したり、反対に単語を引き算することも可能です。Google検索をする際に、検索したワードに類似した単語がヒットするようにこの技術が使われてます。
PythonでMeCabを使う方法
ここからは、PythonでMeCabを使うための具体的な手順をご紹介します。
事前準備として、こちらのページの手順に従ってMeCabをインストールします。
形態素分析
手始めに文章の形態素分析を実行します。コードは以下のようになります。
A = MeCab.Tagger()
text = 'pythonでMeCabを初めて使ってみます'
result = A.parse(text)
print(result)
このコードを実行した結果、文章が品詞分解され、品詞や活用形などが表示されます。

ワードクラウド
次にワードクラウドを作成してみます。
事前に以下のコードを実行して日本語フォントをダウンロードします。
sudo apt update
sudo apt install fonts-ipaexfont
こうすることでワードクラウドを作成する際に日本語が文字化けするのを防ぎます。
夏目漱石の『吾輩は猫である』の第一節を例として品詞分解し、名詞、形容詞、動詞を抽出して格納するコードを書きます。
from wordcloud import WordCloud
text = "吾輩は猫である。名前はまだ無い。どこで生れたかとんと見当がつかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。吾輩はここで始めて人間というものを見た。しかもあとで聞くとそれは書生という人間中で一番獰悪な種族であったそうだ。この書生というのは時々我々を捕えて煮て食うという話である。しかしその当時は何という考もなかったから別段恐しいとも思わなかった。ただ彼の掌に載せられてスーと持ち上げられた時何だかフワフワした感じがあったばかりである。掌の上で少し落ちついて書生の顔を見たのがいわゆる人間というものの見始であろう。この時妙なものだと思った感じが今でも残っている。第一毛をもって装飾されべきはずの顔がつるつるしてまるで薬缶だ。その後猫にもだいぶ逢ったがこんな片輪には一度も出会わした事がない。のみならず顔の真中があまりに突起している。そうしてその穴の中から時々ぷうぷうと煙を吹く。どうも咽せぽくて実に弱った。これが人間の飲む煙草というものである事はようやくこの頃知った。"
mecab = MeCab.Tagger('-r/etc/mecabrc -Ochasen') #Chasenを使う。
node = mecab.parseToNode(text)
output = []
while node:
word_type = node.feature.split(",")[0]
if word_type in ["名詞","形容詞","動詞"]:
if not node.surface.isdigit():
output.append(node.surface.upper())
node = node.next

最後に、ダウンロードしたフォントを指定し、ワードクラウドの保存先などを設定して作成します。
#ダウンロードした日本語フォントのパスを貼り付ける
fpath = "/usr/share/fonts/opentype/ipaexfont-gothic/ipaexg.ttf"
wordcloud = WordCloud(background_color="white", font_path=fpath, width=800,height=600).generate(text)
wordcloud.to_file("/content/sample_data/sample_wordcloud.png")

すると指定した保存先(contentファイルの中の、sample_dataファイルの中)に、以下の画像が出来上がります。

おわりに
普段何気なく話している日本語が、コンピューターでどのように機械処理をされているのか、お分かりいただけたでしょうか。MeCabなどの形態素解析の技術は、身近なところで利用されています。
インターネット・アカデミーでは、MeCabを利用できるプログラミング言語の「Python講座」や、実際に自然言語処置ができる「AI(ディープラーニング)講座」をご用意しています。興味のある方はぜひ、無料カウンセリングにお越しください。

AIプログラミングを実践
AIエンジニア育成コース「AIエンジニア育成コース」では、AIの歴史やAIが得意なことや苦手な事、ビジネスにおける活用事例などの基礎知識はもちろん、Pythonを使ったAIプログラミングの実践を行います。
相談してコースを選びたい方はカウンセラーに無料で相談

※無理な勧誘は一切ありません
MeCab(めかぶ)という可愛らしい名前ですが、コンピューターにとっては強力なツールなんです。