blog

形態素解析について、Python実装を交えて解説します!

形態素解析は、検索エンジンのキーワード処理やスマートフォンの文字入力予測変換など、日常的に使われるシステムの根幹を支えている自然言語処理技術です。「なんとなく知っている」という方も多いですが、その仕組みからPythonによる実装方法、主要ツールの特徴まで体系的に理解している方はそれほど多くありません。本記事では、形態素解析の概念からテキスト処理の基礎知識、代表的な4つの形態素解析システム(MeCab・JUMAN・ChaSen・Sudachi)のPython実装例、辞書・コーパスの役割、そして実社会での応用事例まで、一つの記事で網羅的に解説します。

目次

形態素解析とは何か

形態素解析とは、文章を語の最小単位(形態素)に分割し、それぞれの品詞・語形・読みなどを解析する技術です。自然言語処理(NLP)の根幹をなす処理であり、AIや機械学習を用いたテキスト分析の前処理として不可欠な役割を担います。

まず「形態素」という概念を整理します。たとえば英語の「books」という語は、「book(名詞)」と「-s(複数形を示す接辞)」に分解できます。日本語の「美しさ」であれば「美し(形容詞語幹)」と「さ(名詞化接辞)」に分けられます。このように、語をそれ以上分割すると意味を失ってしまう最小の単位を「形態素」と呼び、「ある言語において意味を担う最小の単位」と定義されます。

形態素解析はこの形態素への分割を自動的に行い、さらに各形態素の品詞・活用形・原形・読みなどを付与します。日本語は英語と異なり、単語と単語の間にスペースが存在しないため、形態素への分割(分かち書き)そのものが重要な課題になります。英語は分かち書きが自明ですが、品詞の多義性が高い(一つの単語が文脈によって名詞にも動詞にもなる)という別の難しさがあります。

形態素解析が活用されている身近な場面としては、GoogleやYahoo!などの検索エンジン、スマートフォンのかな漢字変換・予測変換、ニュースアプリの文字組み処理、感情分析や文書分類などのAIシステムが挙げられます。現代のAI・データ分析の実務において、形態素解析は欠かせない基盤技術のひとつです。

形態素解析の処理フロー
入力テキスト
「美しさに感動した」
→
形態素への分割
美し/さ/に/感動/し/た
→
品詞タグ付け
形容詞語幹・名詞化接辞・助詞…
→
解析結果出力
原形・読み・活用形

この形態素解析を実際の文章分析に使うときは、Pythonでテキストマイニングをする方法で解説しています。

関連記事テキストマイニングとは何ができる?

形態素解析の仕組み:辞書引きから最適な分割を選ぶまで

形態素解析は、おおまかに「辞書で単語の候補をすべて洗い出す → 候補をつなげた経路を作る → 最も自然な経路を1つ選ぶ」という3段階で動きます。

  1. 辞書引き:文の先頭から、辞書に載っている語をすべて探します。「すもももももももものうち」なら「すもも」「もも」「も」「の」「うち」などが候補になります。
  2. ラティス(語の候補の網)の作成:候補の語を文字位置ごとに並べ、前後でつながる語どうしを線で結びます。この網を「ラティス」と呼びます。
  3. 最適経路の選択:各語の出現しやすさ(単語コスト)と、品詞どうしのつながりやすさ(接続コスト)を足し合わせ、合計が最小になる経路を動的計画法(Viterbiアルゴリズム)で選びます。名詞のあとに助詞が続く並びは自然、助詞が3つ続く並びは不自然、といった文法のくせがコストの差になります。

MeCabなどの統計的な手法は、人手で品詞を付けたコーパスからこのコストを学習します。JUMANは人手で設定した規則とパラメータが中心で、Juman++はニューラルネットワークの言語モデルで文脈を加味します。辞書にない語(未知語)は、文字の種類(ひらがな・カタカナ・漢字・英数字)ごとのルールで推定します。

用語 意味 例
形態素解析 分割に加えて、品詞・原形・読みを付ける処理 「頼りすぎて」→ 頼り(動詞・原形「頼る」)/すぎ/て
分かち書き 語の境目にスペースを入れるだけの処理 「私は猫が好き」→「私 は 猫 が 好き」
トークナイズ 文を処理の単位(語・サブワードなど)に切る処理の総称 LLMのトークナイザーはサブワード単位

英語は語がスペースで区切られているため分かち書きが不要で、主な課題は品詞の多義性(同じ綴りの語が名詞にも動詞にもなる)です。日本語は分割そのものが解析の中心的な課題になります。

曖昧性:同じ文が複数に分けられる

日本語は同じ文字列が複数の分割に読めます。たとえば「うらにわにはにわとりがいる」は「裏庭には二羽鶏がいる」とも「裏庭には埴輪鳥がいる」とも分けられます。形態素解析器はこうした候補を前述のコストで比べ、最も自然な1通りを選びます。Juman++が「@」で別候補も保持するのは、この曖昧性を扱うためです。

構文解析・意味解析との関係

形態素解析は、自然言語処理の最初の段階です。次の段階の構文解析が、語どうしの係り受け(どの語がどの語にかかるか)を調べ、その先の意味解析が文の意味を扱います。形態素解析の誤りは後段の解析にそのまま響くため、前処理(正規化)と辞書の選択が精度を左右します。

次に読む:エクセルでテキストマイニングするには?

エクセルを用いたテキストマイニングのやり方(無料)

fugashi(MeCab)のコード例とUniDicの切り方

MeCabをPythonから扱うラッパーのひとつがfugashiです。MeCabのCythonラッパーで、辞書同梱の軽量版(unidic-lite)を指定すれば追加の辞書設定なしで動かせます(確認:github.com/polm/fugashi、2026年10月29日)。

# インストール
# pip install 'fugashi[unidic-lite]'

from fugashi import Tagger

# 分かち書きだけ欲しいとき
tagger = Tagger('-Owakati')
print(tagger.parse("麩菓子は、麩を主材料とした日本の菓子。"))
# → 麩 菓子 は 、 麩 を 主材 料 と し た 日本 の 菓子 。

# 品詞や原形も取りたいとき
tagger = Tagger()
for word in tagger("麩菓子は、麩を主材料とした日本の菓子。"):
    print(word.surface, word.feature.lemma, word.pos, sep="\t")

出力の分割結果は、fugashi公式READMEに載っている例です。UniDicの切り方は、IPA辞書の切り方とは粒度が少し違うため、同じ文でも辞書によって結果が変わります。環境に依存せず試したいときは、後述のjanome(ピュアPython)やSudachiPyも手軽です。

主要な形態素解析システムの比較

システム 開発元 特徴 Python利用 向いている用途
MeCab 奈良先端大/Google 高速・高精度、辞書差し替え容易 janome / python-mecab 汎用、テキストマイニング全般
JUMAN / Juman++ 京都大学 パラメータ調整可能、ニューラル言語モデル統合 PyKNP 学術研究、高精度解析
ChaSen 奈良先端大 統計的パラメータ推定、JUMANベース コマンドライン経由 既存システム互換、研究用途
Sudachi ワークスアプリケーションズ A/B/C分割モード、辞書一元管理 SudachiPy 商業利用、固有名詞抽出、検索システム

目的別の選び方:迷ったらどれを使うか

やりたいこと 最初の候補 理由
まず動かして仕組みを体験したい janome pipだけで入り、追加のバイナリが不要
テキストマイニング・キーワード抽出 MeCab(fugashi/mecab-python3)+辞書 利用例が最も多く、情報も探しやすい
固有名詞や複合語を目的に合わせて切り分けたい SudachiPy A・B・Cの3段階の分割単位を切り替えられる
学術研究・文脈を加味した高精度の解析 Juman++ ニューラル言語モデルを統合
既存システムの保守 ChaSen 互換のために残っているケース。新規採用は想定しにくい

迷ったときの目安は「検索・集計の下ごしらえならMeCab系、分割単位を使い分けたいならSudachi」です。辞書は新語・固有名詞に強いNEologdか、研究で標準的なUniDicを、用途に合わせて選びます。

MeCab:最もメジャーな形態素解析システム

MeCabは現時点で最もメジャーかつ広く実用されている日本語形態素解析システムです。奈良先端科学技術大学院大学の松本研究室と、当時Googleに在籍していた工藤拓氏により開発されました。

MeCabが多くの用途でデファクトスタンダードになっている理由は以下の通りです。まず、前処理・後処理はライブラリ側に任せて解析エンジン本体をシンプルに保つことで、コードの簡略化と高速化を両立しています。CRF(条件付き確率場)を用いた統計的手法により、辞書に存在しない未知語にも比較的強い解析性能を発揮します。また、辞書の差し替えが容易で、デフォルトのIPA辞書のほかにも、新語・固有名詞に強いNEologd辞書(mecab-ipadic-NEologd)や、UniDicなど用途に合わせた辞書を選択できます。

MeCab本体はC++で実装されているため、PythonからMeCabを直接呼び出すには特殊なインターフェイス(python-mecabなど)が必要です。しかし、PythonではMeCabをピュアPythonで再実装したjanomeが利用できます。追加のバイナリインストールが不要なため、環境構築が容易でPython初学者にも扱いやすいです。

以下はjanomeによる形態素解析の実装例です。

# janomeのインストール
# pip install janome

from janome.tokenizer import Tokenizer

# Tokenizerインスタンスを作成
t = Tokenizer()

# 「みんな栄養に頼りすぎてる」を形態素解析
tokens = t.tokenize('みんな栄養に頼りすぎてる')

for token in tokens:
    print(token)

上記コードを実行すると、以下のような出力が得られます。各形態素について、表層形・品詞・品詞細分類・活用型・活用形・原形・読み・発音が確認できます。

みんな    名詞,代名詞,一般,*,*,*,みんな,ミンナ,ミンナ
栄養      名詞,一般,*,*,*,*,栄養,エイヨウ,エイヨー
に        助詞,格助詞,一般,*,*,*,に,ニ,ニ
頼り      動詞,自立,*,*,五段・ラ行,連用形,頼る,タヨリ,タヨリ
すぎ      動詞,非自立,*,*,一段,連用形,すぎる,スギ,スギ
てる      動詞,非自立,*,*,一段,基本形,てる,テル,テル

MeCabを直接Python環境にインストールしてpython-mecabバインディングで使う場合は、mecab-ipadic-NEologdなど最新の辞書と組み合わせることで、SNS・ニュースなどの現代語に対しても高い解析精度が期待できます。テキストマイニングや感情分析の実務プロジェクトでは、このMeCab+NEologd辞書の組み合わせが現在も最もよく採用されています。

JUMAN / Juman++:京都大学発の高機能システム

JUMANは1992年から京都大学工学部(現・黒橋・村脇研究室)で開発が続けられている、日本語形態素解析システムの中で最も歴史が長い部類に入るシステムです。長年にわたる研究開発の蓄積により、特に日本語の品詞体系への深い対応と豊富な辞書情報が強みです。

JUMANの大きな特徴は、辞書などの各種パラメータを解析者自身が柔軟に設定できる点にあります。研究目的で特定のジャンルのテキスト(医療文書・法律文書など)を解析する場合など、ドメイン固有のパラメータ設定が有効であり、学術研究での利用に特に適しています。

JUMAN本体の更新は2014年で停止していますが、同研究室がJuman++として後継システムを開発・維持しています。Juman++はJUMANの文法・辞書を継承しつつ、ニューラルネットワークを活用した言語モデルを統合しており、文脈を考慮した高精度な解析が可能です。以下はJuman++のインストールと基本的な使用例です。

# jumanpp-1.02のインストール(jumanpp-1.02に含まれるREADME_ja.mdに従う)
# wget http://lotus.kuee.kyoto-u.ac.jp/nl-resource/jumanpp/jumanpp-1.02.tar.xz
# tar xJvf jumanpp-1.02.tar.xz
# cd jumanpp-1.02
# ./configure
# make
# sudo make install

# インストール後のテスト
echo "すもももももももものうち" | jumanpp

以下のような解析結果が出力されます。出力には表層形・読み・原形・品詞・品詞細分類のほか、代表表記や語の取得元(自動獲得・辞書など)の情報も含まれます。

すもも すもも すもも 名詞 6 普通名詞 1 * 0 * 0 "代表表記:酸桃/すもも 自動獲得:EN_Wiktionary"
@ すもも すもも すもも 名詞 6 普通名詞 1 * 0 * 0 "自動獲得:テキスト"
も も も 助詞 9 副助詞 2 * 0 * 0 NIL
もも もも もも 名詞 6 普通名詞 1 * 0 * 0 "代表表記:股/もも カテゴリ:動物-部位"
@ もも もも もも 名詞 6 普通名詞 1 * 0 * 0 "代表表記:桃/もも 漢字読み:訓 カテゴリ:植物;人工物-食べ物 ドメイン:料理・食事"
も も も 助詞 9 副助詞 2 * 0 * 0 NIL
もも もも もも 名詞 6 普通名詞 1 * 0 * 0 "代表表記:股/もも カテゴリ:動物-部位"
@ もも もも もも 名詞 6 普通名詞 1 * 0 * 0 "代表表記:桃/もも 漢字読み:訓 カテゴリ:植物;人工物-食べ物 ドメイン:料理・食事"
の の の 助詞 9 接続助詞 3 * 0 * 0 NIL
うち うち うち 名詞 6 副詞的名詞 9 * 0 * 0 "代表表記:うち/うち"
EOS

出力の「@」は複数の解析候補(曖昧性)を示しており、「もも」が「股」か「桃」かのどちらにも解釈できることを表しています。これはJuman++が文脈を考慮して最も確からしい解釈を選びつつ、候補も保持するという設計によるものです。PyKNPというPythonライブラリを使うと、PythonからJuman++をより簡単に呼び出すことも可能です。

ChaSen:奈良先端大発の統計的形態素解析システム

ChaSenは奈良先端科学技術大学院大学の松本研究室で開発された形態素解析システムで、JUMANと並ぶ歴史ある学術系システムです。C言語で実装されており、JUMANをベースに設計されているため解析の仕組みはJUMANに近いですが、アプローチに大きな違いがあります。

JUMANがパラメータを解析者が設定するのに対し、ChaSenは開発者が正しく解析したデータ(アノテーション済みコーパス)を基に、統計的な手法でパラメータを自動推定する方式を採用しています。これにより、手動チューニングの手間を減らしつつ一定の解析精度を確保できます。

ChaSenのインストールと動作確認の手順は以下の通りです。環境構築は複数のステップが必要で、辞書の文字コードをUTF-8に揃える作業も必要です。

# ---- 依存ライブラリ(darts)のインストール ----
yum install nkf gcc gcc-c++
cd ~/download
wget http://chasen.org/~taku/software/darts/src/darts-0.32.tar.gz
cd ~/src
tar xzvf ../download/darts-0.32.tar.gz
cd darts-0.32/
./configure
make
make install

# ---- ChaSen本体のインストール ----
cd ~/download
wget 'https://ja.osdn.net/frs/redir.php?m=jaist&f=%2Fchasen-legacy%2F56305%2Fchasen-2.4.5.tar.gz' \
  -O chasen-2.4.5.tar.gz
cd ~/src
tar xzvf ../download/chasen-2.4.5.tar.gz
cd chasen-2.4.5/
./configure
make
make install

# ---- 辞書(ipadic)のインストール ----
wget 'https://ja.osdn.net/frs/redir.php?m=ymu&f=%2Fipadic%2F24435%2Fipadic-2.7.0.tar.gz' \
  -O ipadic-2.7.0.tar.gz
cd ~/src/
tar xzvf ../download/ipadic-2.7.0.tar.gz
cd ipadic-2.7.0/
./configure
make
make install

# ---- 辞書をUTF-8に変換(文字化け防止) ----
cd ~/src/ipadic-2.7.0/
make clean
find -name '*.dic' | xargs nkf --overwrite -w
find -name '*.cha' | xargs nkf --overwrite -w
`chasen-config --mkchadic`/makemat -i w
`chasen-config --mkchadic`/makeda -i w chadic *.dic
./configure
make
make install
nkf -w --overwrite /usr/local/etc/chasenrc

インストール完了後、次のように動作確認ができます。

echo 'これは、テストです。' | chasen -iw

出力結果は以下のようになります。

これ    コレ    これ    名詞-代名詞-一般
は      ハ      は      助詞-係助詞
、      、      、      記号-読点
テスト  テスト  テスト  名詞-サ変接続
です    デス    です    助動詞      特殊・デス  基本形
。      。      。      記号-句点
EOS

ChaSenはMeCabの前身的な位置づけにあり(本節の手順は古い環境向けのため、新規に試すなら前述のMeCabやSudachiPyをおすすめします)、現在はMeCabに多くのユーザーが移行していますが、アカデミアでの研究用途や、既存システムとの互換性維持のために継続利用されているケースもあります。なお、MeCabはChaSenの課題(速度・精度)を改善して開発されたシステムであるため、新規開発においてはMeCabを選択することが一般的です。

生成AIの業務導入・社内活用をご検討の方は、AI開発会社クリスタルメソッドの無料相談をご利用ください。

Sudachi:現代的な日本語形態素解析システム

Sudachiは株式会社ワークスアプリケーションズの徳島人工知能NLP研究所が中心となって2017年に開発を開始した、現代的な設計思想を持つ日本語形態素解析システムです。「商業利用に耐えうる高品質で使い勝手の良い形態素解析器」を目標として現在も活発に開発が続けられています。

Sudachiの最大の特徴は、形態素分割のモードをA・B・Cの3段階で切り替えられる点です。

  • Aモード:最も細かい単位で分割します。形態論的に定義された最小単位への分割で、辞書に載っている短い単語レベルで区切ります。
  • Bモード:AとCの中間的な分割粒度です。
  • Cモード:固有名詞などの複合語を一つのまとまりとして扱います。名前付き固有表現の認識に優れています。

具体例として「国家公務員」はAモードでは「国家/公務/員」、Bモードでは「国家/公務員」、Cモードでは「国家公務員」と分割されます(SudachiPy公式READMEの例。辞書のバージョンにより結果が変わることがあります)。用途に応じてモードを選ぶことで、感情分析や固有名詞抽出など異なる目的に柔軟に対応できます。

PythonではSudachiPyを使います。

# インストール
# pip install sudachipy sudachidict_core

import sudachipy

# 辞書と分割器を作成
dictionary = sudachipy.Dictionary()
tokenizer = dictionary.create()

# 「国家公務員」を3つのモードで解析(SudachiPy公式READMEの例)
# Cモード(最大まとまり)
print([m.surface() for m in tokenizer.tokenize("国家公務員", sudachipy.SplitMode.C)])
# → ['国家公務員']

# Bモード(中間)
print([m.surface() for m in tokenizer.tokenize("国家公務員", sudachipy.SplitMode.B)])
# → ['国家', '公務員']

# Aモード(最小単位)
print([m.surface() for m in tokenizer.tokenize("国家公務員", sudachipy.SplitMode.A)])
# → ['国家', '公務', '員']

Sudachiのもう一つの特徴として、辞書が一元管理されている点があります。システム辞書(SudachiDict)はIPAdic・UniDicなど複数の辞書設計を参照して構築されており、単一の辞書で幅広い語彙をカバーしています。また、ユーザー辞書の追加によるカスタマイズも容易です。

ElasticsearchなどのテキスプロジェクトでのSudachi採用事例も増えており、2020年代以降の新規開発では選択肢として有力なシステムです。

その他のツールと英語向けの手法:kuromoji・KyTea・NLTK・spaCy

ツール 種類 ひとこと
kuromoji 日本語の形態素解析(Java) Lucene/Elasticsearch系の検索で使われる日本語の解析器
KyTea 日本語などの分割・品詞付与(点予測) 文字の境界ごとに分割の可否を判定する方式
TinySegmenter 日本語の分かち書き(JavaScript) 辞書を使わず、品詞は付けない軽量な分割
NLTK・spaCy 英語などのトークン化・品詞付与 スペース区切りの言語向け。日本語は別モデルや別ツールが必要

日本語の形態素解析では、本記事のMeCab・Sudachi系が中心になります。英語など空白で区切る言語は分かち書きが不要なため、トークン化に加えて、語形を原形に戻す処理(見出し語化)と品詞付与を行うのが一般的です。

辞書とコーパスの役割

形態素解析システムを正しく使う上で、「辞書」と「コーパス」の違いと役割を理解しておくことは重要です。これらは形態素解析の品質に直結するリソースです。

自然言語処理における「辞書」

日常的に使う紙の辞書や電子辞書と概念的に近いものです。自然言語処理システムにおける辞書とは、語(単語・形態素)とその読み・品詞・原形・活用型・使用分野・類義語・対義語・用例などをまとめたデータベースです。形態素解析エンジンはこの辞書を参照しながら、入力文を形態素に分割し品詞を推定します。

特に日本語の形態素解析では辞書が非常に重要な役割を果たします。日本語は英語と異なり単語の区切りが明示されないため、辞書を用いて形態素の候補を生成し最適な分割を選択します。また、日本語では一つの単語が複数の品詞になりにくい傾向があるため、辞書による品詞情報から文法・意味の判別を効率的に行えます。

代表的な辞書としては、MeCabでよく使われるIPAdic、現代語・新語に対応したmecab-ipadic-NEologd(Neologism Dictionary)、日本語研究用の標準辞書として位置づけられるUniDicなどがあります。

コーパスとは何か

コーパス(corpus)とは、自然言語で書かれた文書に対して意味・品詞・構文などの情報を人手で付与した言語資源です。辞書が「語」の単位で情報をまとめているのに対し、コーパスは「文脈の中での語の使われ方」も情報として含んでいます。

コーパスを使った形態素解析では、文脈情報を活用できるため特定のドメイン・ジャンルのテキストに対して辞書よりも高い精度を発揮できることがあります。一方でコーパスの作成・維持には専門家による大量のアノテーション作業が必要で、コストが高くなります。

辞書とコーパスの使い分け

現実の形態素解析システムでは、辞書のコスト効率の良さと性能を活かしつつ、判別の境界が曖昧なケース(多義語・文脈依存の品詞など)についてはコーパスで情報を補完するという「辞書・コーパス併用型」が一般的です。また近年は、BERTなどの大規模事前学習言語モデルが文脈情報を内包することで、コーパスベースの役割を担うケースも増えています。

辞書とコーパスの比較
項目 辞書 コーパス
情報の単位 語単体の情報 文脈中での使われ方
作成コスト 比較的低い 高い(専門家によるアノテーション必要)
強み コスト効率、汎用性 ドメイン特化精度、文脈理解
代表例 IPAdic、UniDic、NEologd 京都コーパス、BCCWJ

前処理:文字コードと正規化で解析精度を高める

形態素解析システムを正しく動作させるには、コンピュータがテキストをどのように扱うかという基礎知識が欠かせません。文字コード・正規化方式・正規化処理の3つの観点で整理します。

文字コード:符号化文字集合と符号化方式

コンピュータは文字をそのまま扱うことができないため、各文字に番号を割り当てる「文字コード」という仕組みが必要です。文字コードは大きく「符号化文字集合」と「符号化方式」の2層構造で理解できます。

符号化文字集合とは、文字の集合(文字集合)を定義し、各文字に一対一で番号を対応づけた規則です。代表例として「ASCII」「JIS」「Unicode」があります。たとえばASCIIでは「a」は97番に対応します。ただし符号化文字集合はあくまで対応表であり、システムの実際のデータ型と直接対応しているわけではないため、そのままでは活用できません。

符号化方式は、符号化文字集合の番号をシステムが扱えるバイト列に変換(エンコード)し、またバイト列を文字に戻す(デコード)処理規則です。代表例が「UTF-8」で、Unicodeに対応した符号化方式です。UTF-8はUnicodeと組み合わせることで全世界の文字を統一的に扱うことができ、現在では日本・世界を通じて最もメジャーな文字コードの一つとなっています。Webページのほぼすべて、PythonなどのプログラミングもデフォルトでUTF-8を採用しています。

多言語処理の方式:UCS正規化とCSI

文字コードを正しく設定しただけでは多言語テキスト処理は完結しません。異なる文字コードのテキストを統一的に扱うための方式として、「UCS正規化方式」と「CSI」の2種類があります。

UCS正規化方式は、システム内部で扱う文字コードをすべて「UCS(Universal Coded Character Set)」に統一する方式です。異なる文字コードで書かれたテキストも前処理なしでそのまま処理できるメリットがあり、Unicodeとの相性が良いことからPython・Java・C#などほぼすべての主要プログラミング言語やWindows・macOSで採用されています。ただし、UCSがすべての文字コードの要素をカバーしているわけではなく、特殊な文字を変換する際に情報が失われるリスクがあります。

CSI(Character Set Independent)は、文字コードを一つに決め打ちせず、各種文字コードをそのまま直接扱う方式です。変換処理が不要なため、UCS正規化方式で起こりうる情報落ちのリスクがなく、処理速度も速い利点があります。一方で、文字列ごとに文字コードを管理する必要があり実装が複雑になります。CSIを採用している言語・OSは少なく、Rubyがその代表的な例です。

正規化処理で解析精度を高める

自然言語処理システムでは動作するだけでなく「精度」が非常に重要です。その精度向上に直結するのが「正規化」です。

たとえば人間には半角「2」と全角「2」は同じ数字に見えますが、コンピュータ上では異なる文字コードを持つ別の文字として認識されます。これをそのまま形態素解析にかけると、同じ意味の表現が別物として扱われ、解析精度が下がります。正規化によってこれらを同一の表現に統一することで、精度を大幅に向上させることができます。

PythonではUnicodeデータベースモジュール(unicodedata)を使って非常に短いコードで正規化が実現できます。以下は「①11」という3種類の「1」を含む文字列を4種類の方法で正規化する例です。

import unicodedata

text = "①11"

print(unicodedata.normalize("NFD", text))   # → '①11'
print(unicodedata.normalize("NFC", text))   # → '①11'
print(unicodedata.normalize("NFKD", text))  # → '111'
print(unicodedata.normalize("NFKC", text))  # → '111'

4種類の正規化方式のうち、自然言語処理で最もよく使われるのはNFKCです。NFKCは「互換等価性」による分解と「標準等価性」による合成を組み合わせた方式で、全角・半角の統一、丸数字「①」を通常の「1」に変換するといった処理を行い、テキストを効果的に標準形にまとめることができます。実務のNLPパイプラインでは、形態素解析の前処理として必ずNFKC正規化を挟むことが定石となっています。

日本語テキストの正規化処理イメージ:全角・半角文字が標準形に統一される様子
日本語テキストの正規化処理イメージ:全角・半角文字が標準形に統一される様子

形態素解析の応用例

形態素解析は理論的な技術にとどまらず、現代のさまざまなサービス・システムに深く組み込まれています。代表的な応用例を挙げます。

検索エンジン

GoogleやYahoo!などの検索エンジンは、ユーザーが入力した検索クエリを形態素解析によって処理しています。たとえば「テニスのラケット」と入力した場合、形態素解析によって「テニス」「の」「ラケット」に分割されます。次に、検索に不要な助詞「の」が除外され、実質的に「テニス ラケット」というキーワードで検索が行われます。

これにより、ユーザーが自然な日本語で検索しても、検索エンジンは意味のある単語だけを抽出して効率的に処理できます。また、クエリ拡張(同義語・関連語の補完)や、ウェブページのインデックス構築にも形態素解析が活用されています。

かな漢字変換・予測変換

スマートフォンやPCの日本語入力システム(IME)は、形態素解析を利用してひらがなから漢字仮名交じり文への変換を行います。入力された読み仮名列を形態素解析して文節に区切り、各文節に対して最も確率の高い漢字変換候補を提示します。予測変換機能では、入力中の文字列の文脈を形態素解析で解釈し、次に来やすい単語を確率的に予測して候補を表示します。

スマートニュースのタイトル文字組み

ニュースアプリのSmartNewsでは、記事タイトルの改行位置を決定するために形態素解析を活用しています。見出しを形態素解析することで、文節・意味のまとまりを識別し、不自然な位置で改行されないよう制御しています。たとえば「東京都知事が会見を開く」というタイトルが「東京都知事が会見を/開く」ではなく「東京都知事が/会見を開く」のように意味のある区切りで改行されるのは、この形態素解析による処理のおかげです。これにより読者がより読みやすい記事表示を実現しています。

感情分析・テキストマイニング

SNS投稿・商品レビュー・アンケート回答などの大量テキストデータから有用な情報を抽出するテキストマイニングでは、形態素解析が前処理として必須です。テキストを形態素に分割して名詞・形容詞・動詞などを抽出し、単語の出現頻度や共起関係を分析することで、顧客感情の傾向把握・トピック抽出・重要キーワードの特定などが可能になります。

機械翻訳・チャットボット

DeepLやGoogle翻訳などの機械翻訳システムでも、形態素解析は言語の前処理として機能します。また、カスタマーサポートのチャットボットや音声アシスタントでは、ユーザーの発話・入力を形態素解析して意図(インテント)を抽出し、適切な応答を生成するために利用されています。

形態素解析とLLM時代のトークナイザーの使い分け

大規模言語モデル(LLM)が普及した現在、「形態素解析はもう不要では」と考える方もいますが、これは誤解です。GPTやBERTなどのモデルは、単語を意味の最小単位である形態素ではなく、サブワード(BPEやWordPieceなどで統計的に分割した部分文字列)に分割します。そのため「東京都」が「東京」「都」ではなく「東」「京都」のように意味を無視した境界で切られることも珍しくありません。用途に応じて両者を使い分けることが実務では重要です。

観点 形態素解析(MeCab・Sudachi等) サブワードトークナイザー(BPE等)
分割の単位 言語的に正しい語・品詞境界 統計的に頻出する部分文字列
品詞・原形の取得 可能(見出し語化・活用の還元に強い) 不可(意味単位の情報は持たない)
主な用途 検索の索引語抽出・キーワード抽出・辞書照合 LLMへの入力・生成タスク
未知語・新語 辞書更新が必要(Sudachiは分割単位を可変で対応) 未知語も部分文字列で表現可能

実務上の指針は明快です。全文検索の索引作成やタグ・キーワード抽出、辞書との照合が目的なら形態素解析が適し、正規化した見出し語で表記ゆれを吸収できます。一方、文章の生成や要約、意味的な類似検索(ベクトル化)はLLM側のトークナイザーに委ねます。両者は競合ではなく役割分担の関係にあり、たとえば検索対象の文書を形態素解析で索引化しつつ、意味検索はLLMの埋め込みで補うといった併用が、日本語を扱う情報検索システムでは現実的な構成になります。

形態素解析のよくある質問

形態素解析と構文解析の違いは何ですか?

形態素解析は文を語に分けて品詞などを付ける処理で、構文解析はその語どうしの係り受け(どの語がどの語にかかるか)を調べる処理です。形態素解析が先に行われ、構文解析の入力になります。

Pythonで形態素解析を始めるには何を入れればよいですか?

最も手軽なのはjanome(pip install janome)です。MeCabを使うならfugashi(pip install ‘fugashi[unidic-lite]’)、Sudachiを使うならSudachiPyと辞書(pip install sudachipy sudachidict_core)を入れます。

形態素解析は無料で使えますか?

本記事で扱ったMeCab・Juman++・Sudachi・janome・fugashiはいずれも公開されているオープンソースのソフトウェアで、Pythonから無料で試せます。利用条件はそれぞれのライセンスを確認してください。

LLM時代でも形態素解析は必要ですか?

必要な場面があります。全文検索の索引作成、キーワード抽出、表記ゆれの吸収などは、語の境界と原形が分かる形態素解析が向いています。文章生成や意味の類似検索はLLM側に任せる使い分けが現実的です。

辞書はどれを選べばよいですか?

新語や固有名詞を含むSNS・ニュースにはmecab-ipadic-NEologd、研究用途や表記の標準的な扱いにはUniDicが向いています。Sudachiは公式の辞書(core・small・full)から選びます。

まとめ

形態素解析は、テキストを意味の最小単位(形態素)に分解し品詞などを付与する自然言語処理の基盤技術です。本記事で解説した内容を整理します。

  • 形態素とは「ある言語において意味を担う最小の単位」であり、形態素解析はこの分割と品詞付与を自動で行います。
  • 形態素解析システムを正しく動かすには、文字コード(UTF-8)の理解と、NFKC正規化による前処理が重要です。
  • 主要な日本語形態素解析システムとしてMeCab(janome)・JUMAN/Juman++・ChaSen・Sudachi(SudachiPy)があり、用途に応じて使い分けることができます。新規プロジェクトでは高速・高精度なMeCabまたは現代的な設計のSudachiが有力な選択肢です。
  • 解析精度を支えるリソースとして辞書とコーパスがあり、現実のシステムではこれらを併用するアプローチが一般的です。
  • 応用範囲は検索エンジン・IME・ニュースアプリ・テキストマイニング・機械翻訳・チャットボットと非常に広く、現代のAI・データ分析の実務で不可欠な技術です。

形態素解析はPythonとjanomeまたはSudachiPyを使えば数行のコードで始めることができます。自然言語処理・テキスト分析に取り組む際は、まずjanomeで基本的な動作を確認し、精度や速度の要件に合わせてMeCab+NEologdやSudachiへとステップアップする進め方がおすすめです。

AIの業務活用をご検討の方へ

クリスタルメソッドは、バーチャルヒューマンをはじめAIの開発・業務導入を支援しています。生成AI・AIエージェントの活用や、自社業務へのAI導入をご検討の際は、お気軽にご相談ください。

AIニュースのまとめをメールで

毎週月曜、海外AIニュースの日次ダイジェストを1週間分まとめてお届けします。無料・いつでも配信を停止できます。

監修

河合 継(クリスタルメソッド株式会社 代表取締役)

AI・ディープラーニングに関する特許16件の発明者。過去、国立がん研究センターとの共同研究や、テレビ番組でのAI解説実績を持つAI研究者として、AIの研究開発を主導している。
運営会社について | 編集方針

Read next

あわせて読みたい

  • AI全般のイメージ

    Pythonでテキストマイニングをする方法を詳しく解説します!

    テキストマイニングとは、膨大なテキストデータから価値ある情報を抽出する一連の分析作業です。基本的な概念・ツール・活用事例についてはテキストマイニングの親記事で詳...

  • エクセルを用いたテキストマイニングのやり方(無料)

    エクセルを用いたテキストマイニングのやり方(無料)

    テキストマイニングとは大量のテキストデータを分析し、単語の出現頻度や関係性から有用な知見を引き出す手法です。概要・仕組み・活用事例についてはテキストマイニングの...

  • テキストマイニングとは?やり方やツールまで解説のイメージ

    テキストマイニングとは?意味・できること・やり方・ツールを解説【2026】

    テキストマイニングとは、大量のテキストデータを自然言語処理(NLP)で解析し、有用な情報や傾向を自動的に抽出する技術です。口コミ・アンケート・問い合わせ・SNS...

View more