見出し画像

janomeでstream オプションが使えない?

最近Udemyで購入した「自然言語処理とチャットボット:AIによる文章生成と会話エンジン開発」を学んでいるのですが、形態素解析でjanomeを使っていてつまづいた箇所があったので、メモとして残しておきます。
また、同じ講座を購入した方で同じつまづきをした方の参考になればと思います!

つまづきポイント
tokenize()メソッドのオプションにwakati=Trueとしたとき、結果がリストとして返らず、ジェネレータが返ってくる
同じく
tokenize()メソッドのstreamオプションを指定するとエラーが返ってくる


1. janomeのインストールと簡単な使い方

形態素解析のライブラリにjanomeを使用するのはpipで簡単にインストールが可能です。

pip install janome

ドキュメント通りに日本語を解析して結果を表示してみます。

from janome.tokenizer import Tokenizer

t = Tokenizer()

s = '私は学生です。'

for token in t.tokenize(s):
   print(token)

スクリーンショット 2020-09-02 0.14.27

左から順に基本形、品詞、表層形、読み、発音が形態素情報として表示されます。

2. 分かち書きモード

tokenize()メソッドのオプションとしてwakatiがあり、wakati=Trueに指定したとき、分かち書きモードとして動作し、表層形のみが表示されます。

t = Tokenizer()
tokens = t.tokenize('私は学生です。', wakati=True)
tokens 
#<generator object Tokenizer.__tokenize_stream at 0x7fe7b5083f50> 

そうすると結果としてリストが返ってくると解説があったのですが、自身の環境で確認してみると、ジェネレータが返ってきます。

3. 解決方法

「streamオプションも指定するとエラーが返ってくるし、何かがおかしいぞ・・・」と感じ、ネットの記事をあさるとjanomeの最新バージョンv0.4.0の変更点の記事を見つけました。

・Tokenizer はストリームモードのみサポートするように変更
本バージョンより,Tokenizer は,メモリリークが起こりにくいストリームモードのみサポートします。具体的には,tokenize() メソッドの戻り値はリストではなくイテレータ(generator)のみとなり,また stream オプションは廃止となります。

自身がダウンロードしたjanomeのバージョンを確認してみると・・・

pip list | grep Janome
# Janome                             0.4.0

ということで、ジェネレータが返ってきていたのですね。
ですので、講座(Udemy)や記事と同じ結果にしたい場合は、バージョンをv0.3.xに変更すれば問題ないと思います。


この記事が気に入ったらサポートをしてみませんか?