形態素解析

日本語文を単語に分割することができれば、 情報検索システムにおける索引語の抽出などに応用が可能である。

日本語は欧米の言語と違い、単語と単語の間に空白がないため、 単語の切り出しは容易ではない。 日本語文を単語に分割するためには形態素解析 (morphological analysis) が必要となる。

形態素解析システム

形態素解析システムと呼ばれるソフトウェアを用いると、 日本語文が単語辞書と文法規則によって正しく単語に分割される。 また、各単語の品詞情報が得られるほか、 用言 (動詞、形容詞など) の活用形を基本形(原形、終止形)に戻してくれる。

日本語形態素解析システムのリスト

形態素解析システムのうち、日本語に対応していて、 オープンソースのものを挙げる。

MeCab
最も知名度のある形態素解析システム。下記の茶筌を設計し直したもの。茶筌より高速だが、一部機能が限定されている。C++で書かれている。
茶筌 (旧サイト)
一時期最も使われていた日本語形態素解析システム。JUMANから派生した。
JUMAN++
言語モデルを利用した形態素解析システム。JUMAN,MeCab より高性能。文法・辞書・出力フォーマット等は JUMANに準ずる。C++で書かれている。Linux版のみ。
JUMAN
オープンソースの日本語形態素解析システムの先駆け。
KyTea
学習によって得られたモデルにより単語分割をするツール。比較的未知語に強い。

Java で実装されているものもある。

Sudachi
独自アルゴリズム。辞書の語彙が多い。
Javaでつくる本格形態素解析器
Elasticsearchのための新しい形態素解析器 「Sudachi」
使い方とサンプルプログラム
Lucene Kuromoji
kuromoji を検索エンジン Apache Lucene 用にラップしたもの。kuromoji とはインタフェースが異なる。
使い方とサンプルプログラム
kuromoji
独自アルゴリズム。MeCab 用の辞書を使用する。辞書が jar ファイルに内包されているので導入が容易。
Github
Java製形態素解析器「Kuromoji」を試してみる (mwsoft)
サンプルプログラム: TitleAnalyzer
lucene-gosen
MeCabをJavaに移植した Sen を元にしたもの。辞書は MeCab/茶筌と同じIPAの辞書を利用。
GoSen
lucene-gosen の前身。Sen を改良したもの。現在では保守されていない。
Sen
MeCabをJavaに移植したもの。辞書は茶筌と同じIPAの辞書を利用。現在は保守されていない。
Igo
MeCab 互換。MeCab 用の辞書を使用する。

Python の場合は以下があるが、MeCab を呼び出すことも行われている。

SudachiPy
Sudachi の Python 版。
Janome
辞書が内包されている。

本体がフリーソフトウェアであっても、 辞書や学習に用いたコーパスのライセンスは異なる場合があるので注意が必要。

形態素解析をしないという選択肢

なんらかの事情により形態素解析システムが利用できない場合には、 文字種の変化に基づいて区切る簡便な手法もある。実用性は低い。

単語切り出し自体をしないという選択肢

1文字、あるいは隣接するn文字の文字列すべてでインデックスを作る手法(n-gram)では、 単語という概念を利用しないため単語切り出しが不要である。

単語の区切りを無視するということは、 「京都」で検索して「東京都」がマッチするということである。