Pythonで自然言語処理(NLP)を行う際、最初のステップとして欠かせないのが「形態素解析」です。
文章を単語ごとに分割し、「名詞」「動詞」といった品詞を特定するこの技術は、AIチャットボットの開発から口コミの感情分析まで、あらゆるテキストマイニングの基礎となります。
この記事では、Pythonで利用できる主要な形態素解析ライブラリの特徴を比較し、それぞれの導入方法から具体的なコード例までを徹底解説します。
英語の解析や、高速化のための最新ツールについても触れていますので、ぜひプロジェクト選定の参考にしてください。
![]() 執筆者:マヒロ |
|
- OS:Windows 11 / macOS Sequoia
- IDE:Visual Studio / VS Code / IntelliJ IDEA
- その他:Chrome DevTools / 各言語最新安定版
※本メディアでは、上記環境にてコードの動作と情報の正確性を検証済みです。
Pythonの形態素解析ライブラリ比較(2026年版)
まずは、代表的なライブラリの特徴を一覧で比較してみましょう。
「手軽さ」「処理速度」「精度の高さ」など、何を重視するかで選ぶべきツールが変わります。
| ライブラリ名 | 特徴 | 速度 | 導入 難易度 |
おすすめ用途 |
|---|---|---|---|---|
| Janome | Pure Python製でインストールが超簡単。 | 遅め | ★ | 初学習、小規模なスクリプト |
| MeCab | 圧倒的な速度と実績。業界標準。 | 爆速 | ★★★ | 大量データ処理、実務全般 |
| GiNZA | spaCyベースで高精度。依存関係解析も可能。 | 普通 | ★★ | 高度なNLP、深層学習の前処理 |
| SudachiPy | 複数の分割モード(A/B/C)を持つ現代的な辞書。 | 速い | ★★ | 検索エンジン、表記揺れ対応 |
| Vibrato | Rust製の高速なMeCab互換ツール。 | 爆速 | ★★ | MeCabよりさらに速度を求める場合 |
とりあえず動かしてみたいならJanome、実務で速度が必要ならMeCab(またはVibrato)、高度な分析をしたいならGiNZAがおすすめです。
手軽さNo.1!「Janome」の使い方
Janomeは、C++などのコンパイラを必要とせず、pip だけでインストールが完結するPure Python製のライブラリです。
環境構築でつまづきたくない初心者の方に最適です。
インストール
pip install janome
Janomeによる分かち書きのコード例
from janome.tokenizer import Tokenizer
# インスタンス生成
t = Tokenizer()
text = "Pythonで形態素解析を始めましょう。"
# 形態素解析を実行
for token in t.tokenize(text):
# 表層形(単語そのもの)と、品詞情報を表示
print(f"{token.surface} : {token.part_of_speech}")
実行結果
Python : 名詞,固有名詞,組織,*,*,*
で : 助詞,格助詞,一般,*,*,*
形態素 : 名詞,一般,*,*,*,*
解析 : 名詞,サ変接続,*,*,*,*
を : 助詞,格助詞,一般,*,*,*
始め : 動詞,自立,*,*,一段,連用形
ましょ : 助動詞,*,*,*,特殊・マス,未然形
う : 助動詞,*,*,*,不変化型,基本形
。 : 記号,句点,*,*,*,*
Tokenizer クラスのインスタンスを作成し、tokenize メソッドにテキストを渡すだけで解析できます。
token.surface で単語の表記、token.part_of_speech で品詞などの詳細情報が取得できます。
手軽ですが、長文の処理には時間がかかる点に注意が必要です。
速度と実績の定番「MeCab」の使い方
MeCab(メカブ)は、非常に高速な処理が可能なオープンソースの形態素解析エンジンです。
Pythonから利用するには、MeCab本体のインストールと、Pythonバインディング(mecab-python3)の導入が必要です。
インストール(Windows/Mac)
Windowsの場合、現在はバイナリ込みのホイールが提供されているため、pipだけで入ることが多いですが、エラーが出る場合は公式サイトからMeCab本体(exe)をインストールし、環境変数PATHを通す必要があります。
pip install mecab-python3
pip install unidic-lite
※ unidic-lite は辞書データです。これを入れるだけで辞書設定が不要になります。
Mac (Homebrew) の場合は以下の通りです。
brew install mecab
brew install mecab-ipadic
pip install mecab-python3
MeCabによる解析コード例
import MeCab
# 辞書を指定せずに初期化(unidic-liteが入っていれば自動で使用)
wakati = MeCab.Tagger()
text = "すもももももももものうち"
# 解析結果を文字列として取得
result = wakati.parse(text)
print(result)
実行結果
すもも 名詞,普通名詞,一般,*,*,*,スモモ,李,すもも,スモモ,すもも,スモモ,和,*,*,*,*
も 助詞,係助詞,*,*,*,*,モ,も,も,モ,も,モ,和,*,*,*,*
もも 名詞,普通名詞,一般,*,*,*,モモ,桃,もも,モモ,もも,モモ,和,*,*,*,*
...
EOS
MeCab.Tagger() で解析器を作成し、parse メソッドで解析します。
結果はタブ区切りの文字列として返ってくるため、プログラムで利用する場合は split() などで分割して処理する必要があります。
圧倒的な処理速度を誇るため、数万行のテキストデータを処理する場合などはMeCab一択です。
高精度でモダンな「GiNZA」の使い方
GiNZAは、世界的に有名なNLPライブラリ「spaCy」を利用した日本語解析モデルです。
文の係り受け解析(どの単語がどの単語を修飾しているか)など、高度な分析が可能です。
インストール
pip install -U ginza ja-ginza
GiNZAによる解析コード例
import spacy
# GiNZAモデルのロード
nlp = spacy.load("ja_ginza")
text = "国家公務員は、全体の奉仕者であって、一部の奉仕者ではない。"
doc = nlp(text)
for token in doc:
# テキスト、品詞タグ、依存関係ラベル
print(f"{token.text}, {token.tag_}, {token.dep_}")
実行結果
国家公務員, 名詞-普通名詞-一般, nsubj
は, 助詞-係助詞, case
、, 補助記号-読点, punct
全体, 名詞-普通名詞-副詞可能, nmod
の, 助詞-格助詞, case
奉仕者, 名詞-普通名詞-一般, advcl
...
spacy.load("ja_ginza") でモデルを読み込みます。
単なる品詞分解だけでなく、文法的な構造(主語や目的語など)も解析できるため、AIモデルの学習データ作成などに適しています。
英語の形態素解析なら「NLTK」か「spaCy」
英語はスペースで単語が区切られているため、日本語のような複雑な分かち書きは不要ですが、品詞の特定やステミング(語幹化)にはライブラリが必要です。
NLTK (Natural Language Toolkit)
学術研究や教育用途で広く使われるライブラリです。
import nltk
# 初回のみデータのダウンロードが必要
# nltk.download('punkt')
# nltk.download('averaged_perceptron_tagger')
text = "Python is a programming language."
tokens = nltk.word_tokenize(text)
tagged = nltk.pos_tag(tokens)
print(tagged)
# [('Python', 'NNP'), ('is', 'VBZ'), ('a', 'DT'), ...]
英語の解析では、spaCy(前述のGiNZAのベース)も非常に高速で優秀なため、実務ではspaCyの英語モデル(en_core_web_sm)を使うことも多いです。
実践:頻出単語の抽出(名詞だけ取り出す)
形態素解析の応用として、テキストから「名詞」だけを抜き出してリストにする処理を実装してみましょう。
これはワードクラウドの作成や、トレンドワード分析の前処理として頻繁に使われます。
Janomeを使った名詞抽出
from janome.tokenizer import Tokenizer
def extract_nouns(text):
t = Tokenizer()
nouns = []
for token in t.tokenize(text):
# 品詞が「名詞」のものだけ抽出
if token.part_of_speech.split(',')[0] == '名詞':
nouns.append(token.surface)
return nouns
sample_text = "私は昨日、東京の美味しいラーメン屋に行きました。"
print(extract_nouns(sample_text))
実行結果
['私', '昨日', '東京', 'ラーメン', '屋']
token.part_of_speech は「名詞,一般,,…」のようなカンマ区切りの文字列なので、split(',')[0] で最初の要素を取り出し、それが「名詞」であるかを判定しています。
「形容詞」や「動詞」も含めたい場合は条件式を変更してください。
Pythonのスキルを活かして年収を上げる方法
以上、Pythonでの形態素解析のおすすめライブラリについて解説してきました。
Pythonエンジニアの需要は非常に高いため、転職によって数十万円の年収アップはザラで、100万円以上年収が上がることも珍しくありません。
なお、転職によって年収を上げたい場合は、エンジニア専門の転職エージェントサービスを利用するのが最適です。
転職エージェントも副業エージェントも、登録・利用は完全無料なので、どんな求人や副業案件があるのか気になる方は、気軽に利用してみるとよいでしょう。
| 年収アップにこだわりたい方 (平均アップ額138万円の実績) | テックゴー |
| 未経験・経験者問わず幅広く探したい方 | ユニゾンキャリア |
| 業界に精通した担当者に相談したい方 | キッカケエージェント |
| ゲーム業界への転職を志望する方 | ファミキャリ |
| エンジニア未経験からキャリアを築く方 | イーチキャリア |



