自然言語処理

Pythonで形態素解析するには?コードから結果の出力まで解説!

仕事で自然言語処理をしなければならなくなり、困ったことはありますか。自然言語処理をするには、まず、テキストを形態素解析する必要があります。

本記事では、Pythonで形態素解析する方法をMeCabやjanomeの実例を交えながら、解説します。


本ブログを運営しているTech Teacherは、
プログラミング家庭教師サービスを運営しています。
完全マンツーマン・フルオーダーメイド
あなたが必要な指導を提供します。

形態素解析とは

形態素解析とは、自然言語処理で最初に行う解析です。形態素解析では、文章を形態素という要素に分解し、それぞれの形態素に品詞を対応させます。

形態素解析は、コンピュータに自然言語を処理させるための最初の段階です。形態素解析をすることで、その後の構文解析、意味解析、文脈解析などの分析ができるようになります。

日本語の場合、英語の単語同士が離れていないため、形態素解析が難しいです。そのため、自分で形態素解析のルールを設定するのではなく、既存の形態素解析ツールを利用することが一般的です。

形態素解析そのものについては、以下の記事で詳しく解説しています。

形態素解析とは? 仕組みと形態素解析ツール9選も合わせて紹介!この記事では自然言語処理の一手順である形態素解析について解説します。定義や仕組みはもちろん、実際のプログラムも合わせて解説するので広く理解したい方におすすめです。また、形態素解析の無料ツール9つをまとめているので早速形態素解析を行うことができます。それぞれ異なる機能や特徴があるため、用途に合わせて使い分けましょう。...

Pythonで使える形態素解析ライブラリ4選

Pythonで使用できる形態素ライブラリは主に4つあります。

以下では、それぞれの概要を紹介します。

MeCab

MeCabはPythonで最も使われている形態素解析ライブラリの一つです。

MeCabは、京都大学と日本電信通信株式会社コミュニケーション科学基礎研究所によって開発されました。

MeCabは、さまざまな辞書を利用できたり、複数のプログラミング言語に対応していたりと汎用性が高いことで知られています。

MeCab公式サイト:https://taku910.github.io/mecab/

janome

janomeは、Python専用の形態素解析ライブラリです。

janome以外のライブラリをインストールしなくても利用できたり、辞書が内包されていたりと、MeCab同様扱いやすい仕様になっています。

Janome公式サイト:https://mocobeta.github.io/janome/

PyKNP

PyKNPは、京都大学の言語メディア研究室によって開発されたJUMAN++とKNPどちらも使えるモジュールです。

JUMAN++は、日本語の形態素解析ツールです。RNN(リカレントニューラルネットワーク)を利用したモデルで、より意味的に自然な解析が可能です。これにより、前のモデルJUMANよりも大きく性能が向上しています。

なお、KNPは構文解析ツールです。

PyKNP公式サイト https://nlp.ist.i.kyoto-u.ac.jp/?PyKNP

SudachiPy

SudachiPyは、Python用のSudachiです。

Sudachiは、複数の分割単位を併用できたり、機能がプラグイン化されているという特徴があります。

Sudachi公式サイト https://github.com/WorksApplications/Sudachi

MeCabでの形態素解析例

実際に、MeCabを用いて形態素解析してみましょう。

まず、MeCabをインストールします。

同時に今回使用する辞書もインストールします。辞書は、もともと準備されている辞書を使うこともできますし、自身で作った辞書を使うこともできます。ここでは、unidic-liteという辞書を使用します。

# pythonでMeCabを利用するために、macab-python3をインストールします。
!pip install mecab-python3
# 辞書をインストールします。今回は、unidic-liteを使います。
# 他の辞書をインストールすることも可能です。 !pip install unidic-lite

では、実際に、形態素解析する文章を入力します。

今回は、例として「私はこれから姉と夕食の食材を買いに出かけます。」という文章を形態素解析しましょう。

# MeCabをimportします。
import MeCab

tagger = MeCab.Tagger()
print(tagger.parse("私はこれから姉と夕食の食材を買いに出かけます。"))

結果は以下のように出力されます。

ワタクシ ワタクシ 私-代名詞 代名詞 0
助詞-係助詞
これ コレ コレ 此れ 代名詞 0
から カラ カラ から 助詞-格助詞
アネ アネ 名詞-普通名詞-一般 0
助詞-格助詞
夕食 ユーショク ユウショク 夕食 名詞-普通名詞-一般 0
助詞-格助詞
食材 ショクザイ ショクザイ 食材 名詞-普通名詞-一般 0
助詞-格助詞
買い カイ カウ 買う 動詞-一般 五段-ワア行 連用形-一般 0
助詞-格助詞
出かけ デカケ デカケル 出掛ける 動詞-一般 下一段-カ行 連用形-一般 0
ます マス マス ます 助動詞 助動詞-マス 終止形-一般
補助記号-句点
EOS
このように、品詞だけでなく、読み方や活用形も形態素解析で分析できます。

janomeでの形態素解析例

次に、janomeを用いた形態素解析をしてみましょう。

なお、処理速度は、janomeよりMeCabの方が早いです。

これに対し、janomeは他のライブラリをインストールしなくても、実装できるという簡便性があります。

まず、janomeをインストールします。

janomeは辞書が内包されているため、辞書をインストールする必要はありません。もちろん、辞書をインストールして使うこともできます。なお、今回のように何も指定しない場合、ipadicという辞書が使われてます。

!pip install janome

その後、実際にjanomeで形態素解析をします。例文は、MeCabのときと同様、「私はこれから姉と夕食の食材を買いに出かけます。」とします。

from janome.tokenizer import Tokenizer
# 形態素解析します。 t = Tokenizer() for token in t.tokenize('私はこれから姉と夕食の食材を買いに出かけます。'): print(token)

結果、以下のように出力されます。

名詞,代名詞,一般,*,*,*,私,ワタシ,ワタシ
助詞,係助詞,*,*,*,*,は,ハ,ワ
これから 副詞,助詞類接続,*,*,*,*,これから,コレカラ,コレカラ
名詞,一般,*,*,*,*,姉,アネ,アネ
助詞,並立助詞,*,*,*,*,と,ト,ト
夕食 名詞,一般,*,*,*,*,夕食,ユウショク,ユーショク
助詞,連体化,*,*,*,*,の,ノ,ノ
食材 名詞,一般,*,*,*,*,食材,ショクザイ,ショクザイ
助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
買い 動詞,自立,*,*,五段・ワ行促音便,連用形,買う,カイ,カイ
助詞,格助詞,一般,*,*,*,に,ニ,ニ
出かけ 動詞,自立,*,*,一段,連用形,出かける,デカケ,デカケ
ます 助動詞,*,*,*,特殊・マス,基本形,ます,マス,マス
記号,句点,*,*,*,*,。,。,。
EOS

MeCabの場合の結果と表示のされ方が異なっていますが、これは、辞書の違いによるものです。同じ辞書を使用した場合、表示のされ方も同じになります。

なお、全体の実行時間はMeCabが、3.27msに対して、janomeは152msでした。実際に、MeCabの方が実行時間が短いことが確かめられました。
>

データサイエンスを学習するならTech Teacherで!

『Tech Teacher』3つの魅力

魅力1. オーダーメイドのカリキュラ

『Tech Teacher』では、決められたカリキュラムがなくオーダーメイドでカリキュラムを組んでいます。「質問だけしたい」「相談相手が欲しい」等のご要望も実現できます。

    魅力2. 担当教師によるマンツーマン指導

    Tech Teacherでは完全マンツーマン指導で目標達成までサポートします。
    東京大学を始めとする難関大学の理系学生・院生・博士の教師がが1対1で、丁寧に指導しています。
    そのため、理解できない箇所は何度も分かるまで説明を受けることができます。

    魅力3. 3,960円/30分で必要な分だけ受講

    Tech Teacherでは、授業を受けた分だけ後払いの「従量課金制」を採用しているので、必要な分だけ授業を受講することができます。また、初期費用は入会金22,000円のみです一般的なプログラミングスクールとは異なり、多額な初期費用がかからないため、気軽に学習を始めることができます。

    まとめ

    ・魅力1. 担当教師によるマンツーマン指導

    ・魅力2. オーダーメイドのカリキュラム

    ・魅力3. 3,960円/30分で必要な分だけ受講

    質問のみのお問い合わせも受け付けております。

    まとめ

    Pythonでの形態素解析方法を説明してきました。

    形態素解析は、文章を形態素という単位でわけ、それぞれに品詞を対応させていく手法です。形態素解析をすることで、その後の自然言語処理が進められます。

    現在、さまざまな形態素解析ツールが開発されていますが、Pythonの場合、MeCabやjanome、PyKNP、SudachiPyなどがあります。

    本記事では、特に有名な2つのツール、MeCab、janomeを用いて実際に形態素解析してみました。MeCabは処理速度が早いという利点がある一方、janomeは実装が簡単だという利点があります。

    形態素解析は、自然言語処理の最初に行う重要な過程です。みなさんも、まずは、Pythonで簡単な形態素解析をするところから理解を深めていってはいかがでしょうか。