環境を作る
過去に記事を書いているのでそちらを参考に環境を構築してください。
https://qiita.com/TakayoshiK/items/2fed43b2ed4e6433ab1b
今回の背景
普通にJUMAN++を呼び出して実行すると形態素解析の結果を得ることができます。
しかし、形態素解析のパターンは複数考えられ、考えられるパターンを知りたいというシーンもあるかと思います。
Media of Langueのデータを作成する過程で私もこの複数パターンを取り出したいと考え調べたのでメモとして残します。
JUMAN++を詳細モードで準備する
JUMAN++を詳細モードで準備します。
ここではs-5で上位5個のパターンを取得するように指定しています。
タイムアウトを防ぎたいため念の為タイムアウトの時間も伸ばしています。
from pyknp import Juman
jumanpp_detail = Juman(timeout=300, jumanpp=True, option='-s 5')
情報を取り出し、並べる
出力がなぜかテキストでされるのでその情報を分解してランキング順に並び替えます。
juman_mrph_l = jumanpp_detail.analysis("あなたはいい人ですね").mrph_list()
ranking_l = [[],[],[],[],[]]
for mrph_detail in juman_mrph_l:
mrph_l = mrph_detail.midasi.split("\t")
detail_l = mrph_l[-1].split("|")
ranks = detail_l[-1].replace("ランク:","").split(";")
for rank in ranks:
try:
rank = int(rank)
info_dict = {
"midasi": mrph_l[5],
"repname": mrph_l[6],
"hinsi": mrph_l[9],
"bunrui": mrph_l[11],
"katuyou1": mrph_l[13],
"genkei": mrph_l[7]
}
ranking_l[rank-1].append(info_dict)
except Exception as e:
print(e)
pass
print(ranking_l)
[[{'midasi': 'あなた', 'repname': 'あなた/あなた', 'hinsi': '名詞', 'bunrui': '普通名詞', 'katuyou1': '*', 'genkei': 'あなた'}, {'midasi': 'は', 'repname': 'は/は', 'hinsi': '助詞', 'bunrui': '副助詞', 'katuyou1': '*', 'genkei': 'は'}, {'midasi': 'いい', 'repname': '良い/よい', 'hinsi': '形容詞', 'bunrui': '*', 'katuyou1': 'イ形容詞イ段', 'genkei': 'いい'}, {'midasi': '人', 'repname': '人/ひと', 'hinsi': '名詞', 'bunrui': '普通名詞', 'katuyou1': '*', 'genkei': 'ひと'}, {'midasi': 'です', 'repname': 'だ/です', 'hinsi': '判定詞', 'bunrui': '*', 'katuyou1': '判定詞', 'genkei': 'です'}, {'midasi': 'ね', 'repname': 'ね/ね', 'hinsi': '助詞', 'bunrui': '終助詞', 'katuyou1': '*', 'genkei': 'ね'}],
[{'midasi': 'あなた', 'repname': 'あなた/あなた', 'hinsi': '名詞', 'bunrui': '普通名詞', 'katuyou1': '*', 'genkei': 'あなた'}, {'midasi': 'は', 'repname': 'は/は', 'hinsi': '助詞', 'bunrui': '副助詞', 'katuyou1': '*', 'genkei': 'は'}, {'midasi': 'いい', 'repname': '良い/よい', 'hinsi': '形容詞', 'bunrui': '*', 'katuyou1': 'イ形容詞イ段', 'genkei': 'いい'}, {'midasi': '人', 'repname': '人/じん', 'hinsi': '名詞', 'bunrui': '普通名詞', 'katuyou1': '*', 'genkei': 'じん'}, {'midasi': 'です', 'repname': 'だ/です', 'hinsi': '判定詞', 'bunrui': '*', 'katuyou1': '判定詞', 'genkei': 'です'}, {'midasi': 'ね', 'repname': 'ね/ね', 'hinsi': '助詞', 'bunrui': '終助詞', 'katuyou1': '*', 'genkei': 'ね'}],
[{'midasi': 'あなた', 'repname': 'あなた/あなた', 'hinsi': '名詞', 'bunrui': '普通名詞', 'katuyou1': '*', 'genkei': 'あなた'}, {'midasi': 'は', 'repname': 'は/は', 'hinsi': '助詞', 'bunrui': '副助詞', 'katuyou1': '*', 'genkei': 'は'}, {'midasi': 'いい', 'repname': '言い/いいv', 'hinsi': '名詞', 'bunrui': '普通名詞', 'katuyou1': '*', 'genkei': 'いい'}, {'midasi': '人', 'repname': '人/じん', 'hinsi': '名詞', 'bunrui': '普通名詞', 'katuyou1': '*', 'genkei': 'じん'}, {'midasi': 'です', 'repname': 'だ/です', 'hinsi': '判定詞', 'bunrui': '*', 'katuyou1': '判定詞', 'genkei': 'です'}, {'midasi': 'ね', 'repname': 'ね/ね', 'hinsi': '助詞', 'bunrui': '終助詞', 'katuyou1': '*', 'genkei': 'ね'}],
[{'midasi': 'あなた', 'repname': 'あなた/あなた', 'hinsi': '名詞', 'bunrui': '普通名詞', 'katuyou1': '*', 'genkei': 'あなた'}, {'midasi': 'は', 'repname': 'は/は', 'hinsi': '助詞', 'bunrui': '副助詞', 'katuyou1': '*', 'genkei': 'は'}, {'midasi': 'いい', 'repname': '良い/よい', 'hinsi': '形容詞', 'bunrui': '*', 'katuyou1': 'イ形容詞イ段', 'genkei': 'いい'}, {'midasi': '人', 'repname': '人/ひと', 'hinsi': '名詞', 'bunrui': '普通名詞', 'katuyou1': '*', 'genkei': 'ひと'}, {'midasi': 'で', 'repname': 'で/で', 'hinsi': '助詞', 'bunrui': '格助詞', 'katuyou1': '*', 'genkei': 'で'}, {'midasi': 'すね', 'repname': '臑/すね', 'hinsi': '名詞', 'bunrui': '普通名詞', 'katuyou1': '*', 'genkei': 'すね'}],
[{'midasi': 'あなた', 'repname': 'あなた/あなた', 'hinsi': '名詞', 'bunrui': '普通名詞', 'katuyou1': '*', 'genkei': 'あなた'}, {'midasi': 'は', 'repname': 'は/は', 'hinsi': '助詞', 'bunrui': '副助詞', 'katuyou1': '*', 'genkei': 'は'}, {'midasi': 'いい', 'repname': '良い/よい', 'hinsi': '形容詞', 'bunrui': '*', 'katuyou1': 'イ形容詞イ段', 'genkei': 'いい'}, {'midasi': '人', 'repname': '人/じん', 'hinsi': '名詞', 'bunrui': '普通名詞', 'katuyou1': '*', 'genkei': 'じん'}, {'midasi': 'で', 'repname': 'で/で', 'hinsi': '助詞', 'bunrui': '格助詞', 'katuyou1': '*', 'genkei': 'で'}, {'midasi': 'すね', 'repname': '拗ねる/すねる', 'hinsi': '動詞', 'bunrui': '*', 'katuyou1': '母音動詞', 'genkei': 'すね'}]]
最後に
誰かが詰まった時の助けになれば幸いです。
Media of Langueプロジェクトでも私が代表をしているEngineeでもエンジニアを探しています。