Windows環境においてPythonでMeCabを利用する場合、まず本家サイトからMeCabのインストーラをダウンロード&実行したから、pip で mecab-python3 もしくは mecabu-python3-windows をインストールしなければなりません。
また、MeCabには公式の32bit版と、非公式の64bit版が存在しており、インストールの組み合わせによっては追加でunidicの辞書をダウンロードしなければならないなど、場合によってはツボにハマってしまう場合があります。
そこで、簡単に形態素解析を試したいという方のために、今回は janome を取り上げたいと思います。
janome は他のライブラリとの依存関係が無いため janomeだけをインストールすれば良く、内部にMeCabと同じIPADICが同梱されているため、解析結果もMeCabと同等です。
形態素解析をちょこっと使いたい方は、是非この記事をご活用下さい。
janome とは
冒頭でも軽く触れましたが、janome はアプリケーションに組み込むことを目的として作成された形態素解析ライブラリで。
公式サイトに詳しく記載されていますが、おおよそ以下の特徴があります。
- 依存ライブラリなしで簡単にインストールが可能
- 形態素結果はMeCabと同等
- 処理速度はMeCabより遅い(10倍くらい)
- 文字の正規化などの前処理クラス(CharFilter)が用意されている
- 品詞のフィルタリング等の後処理クラス(TokenFilter)が用意されている
- 前処理、形態素解析、後処理のフローを制御するクラス(Analyzer)が用意されている
処理速度が10倍遅いことを除けば、かなり使い勝手が良いライブラリです。
特に形態素解析を行うための前処理や、特定品詞の抽出などは、特にプログラムを書かなくてもクラスを利用するだけで済んでしまいます。
詳しくはこちらにチュートリアルがあるので、興味のある方はご一読いただければと思います。
チュートリアルに移動すると下記のページが表示されるので、文字のある部分をクリックして、読み進めて下さい。
インストール方法
インストールは簡単で、次のコマンドを実行するだけです。
pip install janome
ちなみに、janome をインストールすると、コマンドプロンプトから janome を使うことが出来るようになります。
使い方
janomeには前処理、後処理を含め色々な機能がありますが、ここでは基本的な使い方として、形態素解析、分かち書き、品詞の種類によるフィルタリングについて解説しておきます。
形態素解析
形態素解析を行う場合は次の様に記述します。
from janome.tokenizer import Tokenizer tokenizer = Tokenizer() result = tokenizer.tokenize('スタートレック・ピカードのシーズン2は面白かった') for tkn in result: print(tkn)
実行すると、下記の内容が表示されます。
フォーマットは MeCab と同様で、表層形(形態素)と品詞の間はタブコード、他はカンマで区切られています。
順番 | 内容 | 記述例 |
---|---|---|
1 | 表層形(形態素) | 面白かっ |
2 | 品詞 | 名詞 |
3 | 品詞細分類1 | 形容詞 |
4 | 品詞細分類2 | 自立 |
5 | 品詞細分類3 | * |
6 | 活用型 | 形容詞・アウオ段 |
7 | 活用形 | 連用タ接続 |
8 | 基本形 | 面白い |
9 | 読み | オモシロカッ |
10 | 発音 | オモシロカッ |
tokenizer.tokenize()の戻り値は、str 関数を使って文字列に変換することでテキストとして取り出す事が可能です。
取り出したテキストはタブとカンマで区切られていますので、次の処理により個々の要素を分割し、リストに格納することが可能です。
import re res = [re.split('[,\t]',str(x)) for x in result] print(res)
実行結果は以下の様になります。
分かち書き
janome で分かち書きをする場合、Tokenizerの引数に wakati=True を指定します。
tokenizer = Tokenizer(wakati=True)
分かち書きを指定して tokenizer.tokenize() メソッドを呼び出すと、表層形(形態素)のみが文字列として返されます。
下記は先ほどのプログラムに対して、Tokenizerの引数に wakati=True を指定しただけです。
from janome.tokenizer import Tokenizer import re tokenizer = Tokenizer(wakati=True) result = tokenizer.tokenize('スタートレック・ピカードのシーズン2は面白かった') for tkn in result: print(tkn)
結果は以下の様になります。
MeCabの分かち書きは1つの文字列として返って来ましたので、janome の結果もそれに合わせるなら、半角スペースで結合します。
from janome.tokenizer import Tokenizer import re tokenizer = Tokenizer(wakati=True) result = tokenizer.tokenize('スタートレック・ピカードのシーズン2は面白かった') print(' '.join(result))
結果は以下の様になります。
品詞の種類でフィルタリングする
MeCabの場合は、ParsToNode メソッドでノード(品詞ごとの付随情報)を取り出すことが出来ましたが、janome の場合は tokenizeメソッドからの戻値をループで回すだけでノードとして取り出せます。
タブとカンマで分割すると、1番目(tkn[0])の要素には表層形(形態素)、2番目(tkn[1])の要素には品詞の種類、3番目(tkn[2])の要素には更に細かい品詞の種類が格納されます。
従って、tkn[1]とtkn[2]を使って必要な品詞を分類すればOKです。
from janome.tokenizer import Tokenizer import re tokenizer = Tokenizer() result = tokenizer.tokenize('スタートレック・ピカードのシーズン2は面白かった') for node in result: tkn = re.split('\t|,', str(node)) # 名詞のみ対象 if tkn[1] in ['名詞'] and tkn[2] in ['一般', '固有名詞']: print(tkn[0])
まとめ
今回は気軽に形態素解析が行える janome について、インストール方法と使い方について解説しました。
janome は pip コマンドだけで簡単にインストールが行える点がポイントです。
MeCabの場合は使うまでにいくつかの手順が必要ですが、janome はいたって単純です。
MeCabに比べて解析時間が10倍程度遅いという欠点はあるものの、大量の文書を形態素解析するのでなければ、十分な処理速度があります。
形態素解析を気軽に試したい方は、是非 janome を利用してみて下さい。