
理系さん
前回はspeakerモジュールを使って喋れるようにしました。
しかし喋る内容がオウム返しのままでは面白くないので、オウム返し以外の返答をさせます。
今回はその前段階として、今回は「品詞分解」をさせてみます。
janome-takenizer
品詞分解をさせるのは超簡単。
janome-takenizerを使います。
janome-takenizerは文章を単語ごとに区切り、品詞も特定してくれる優れもの。
まずは毎度のごとくコマンドプロンプトでpipにてjanome-takenizerをインストール。
pip install janome
インストールできたら早速プログラムを組んでいきます。
analyzer.py
品詞分解をするモジュールとして、analyzer.pyというファイルを新たに作成します。
import re
from janome.tokenizer import Tokenizer
def parse(text):
t = Tokenizer()
tokens = t.tokenize(text)
result = []
for token in tokens:
result.append(token.surface)
return (result)
文章を単語ごとに区切る関数parse()を作りました。
まずは6行目でTokenizer()をインスタンス化。
7行目、「tokens = t.tokenize(text)」で引数の文章を品詞分解すると、tokensには分解した単語の情報が代入されます。
品詞解析をした結果をresultというリストにforループで追加していきます。
ここで、token.surfaceには単語そのものが格納されています。
(ちなみにtoken.part_of_speechにはその品詞名が格納されています。)
返り値はresultです。
main.py
そろそろオウム返しを卒業したいので前回までrepeat.pyとしていたものをmain.pyに改名し、中身を次のように編集します。
import voicein
import speaker
import analyzer
#text=voicein.voicein()
text="今日はいい天気ですね"
parse=analyzer.parse(text)
print(parse)
#speaker.jtalk(text)
これでmain.pyを実行して動作を確認してみると、
['今日', 'は', 'いい', '天気', 'です', 'ね']
ちゃんと品詞分解されていますね。
コメント