仕事で自然言語処理をしなければならなくなり、困ったことはありますか。自然言語処理をするには、まず、テキストを形態素解析する必要があります。
本記事では、Pythonで形態素解析する方法をMeCabやjanomeの実例を交えながら、解説します。
形態素解析とは
形態素解析とは、自然言語処理で最初に行う解析です。形態素解析では、文章を形態素という要素に分解し、それぞれの形態素に品詞を対応させます。
形態素解析は、コンピュータに自然言語を処理させるための最初の段階です。形態素解析をすることで、その後の構文解析、意味解析、文脈解析などの分析ができるようになります。
日本語の場合、英語の単語同士が離れていないため、形態素解析が難しいです。そのため、自分で形態素解析のルールを設定するのではなく、既存の形態素解析ツールを利用することが一般的です。
形態素解析そのものについては、以下の記事で詳しく解説しています。
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("私はこれから姉と夕食の食材を買いに出かけます。"))
結果は以下のように出力されます。
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)
結果、以下のように出力されます。
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分で必要な分だけ受講
質問のみのお問い合わせも受け付けております。
『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で簡単な形態素解析をするところから理解を深めていってはいかがでしょうか。