前提・実現したいこと
juman++で形態素解析した内容を連想概念辞書で連想語と刺激語に分けている
その連想語と刺激語を参照してWord2Vecで一番類似度が高い単語を出力したい
発生している問題・エラーメッセージ
Word2Vecで一番類似度が高い単語が出力できない
該当のソースコード
python
from pyknp import KNP
import re
from gensim.models.word2vec import Word2Vec
model_path = 'word2vec.gensim.model'
model = Word2Vec.load(model_path)
When = []
Where = []
What = []
Why = []
Who = []
How = []
nani = ['ガ','ヲ','ノ', 'ニ'] #Whatの後に続く助詞
text = ("先生は今日は来ません")
knp = KNP(option='-tab') # Default is JUMAN++. If you use JUMAN, use KNP(jumanpp=False)
result = knp.parse(text)
for mrph in result.mrph_list(): # 各形態素へのアクセス
so_f = re.split("[-:]", mrph.imis) #feature分割
if mrph.bunrui == '地名' or '場所' in so_f:
Where.append(mrph.midasi)
elif '時間' in so_f:
When.append(mrph.midasi)
elif '人' in so_f or '人名' in so_f:
Who.append(mrph.midasi)
for bnst in result.bnst_list(): # 各文節へのアクセス
setu_f = re.split("[><]", bnst.fstring)
del setu_f[::2]
if '主節' in setu_f:
How.append("".join(mrph.midasi for mrph in bnst.mrph_list()))
how_id = bnst.bnst_id
for bnst in result.bnst_list(): # 各文節へのアクセス
setu_f = re.split("[><]", bnst.fstring)
del setu_f[::2]
for c in nani:
if bnst.parent_id == how_id and '格要素' in setu_f and c in setu_f:
What.append("".join(mrph.midasi for mrph in bnst.mrph_list()))
break
print(text)
print()
print("推定前")
print('Who:%s' %(Who))
print('Where:%s' %(Where))
print('When:%s' %(When))
print('What:%s' %(What))
print('How:%s' %(How))
print("------------------------------------------------------------------------------------")
print("推定後")
print("")
Shigeki = "shigekigo-10.txt"
Lensou = "dictlist-10.txt"
with open(Shigeki,'r', encoding="shift_jis") as f:
shigekigo = [s.strip() for s in f.readlines()]
with open(Lensou, 'r', encoding="shift_jis") as f:
lensougo = [s.split() for s in f.readlines()]
lensou = [[] for i in range(len(lensougo))]
for count in range(len(lensougo)):
for i in range(7):
lensou[count].append(lensougo[count][i].strip(','))
for mrph in result.mrph_list():
text1 = (mrph.midasi)
for countS in range(len(shigekigo)):
if text1 == shigekigo[countS]:
TextFlag = False
for countL in range(len(lensougo)):
if lensou[countL][0] == text1:
print("刺激語:"+text1 + " " + "連想語:"+lensou[countL][2])
print("連想後:"+lensou[countL][2])
print()
text2 = (lensou[countL][2]) result2 = knp.parse(text2) for mrph in result2.mrph_list(): so_f = re.split("[-:]", mrph.imis) #feature分割 if mrph.bunrui == '地名' or '場所' in so_f: for i in range(len(mrph.midasi)): w = model.wv.similarity(text1, mrph.midasi) m = 0 if m <= w: m = w else: if m >= w: mm = mrph.midasi Where.append(mm) else: break elif '時間' in so_f: for i in range(len(mrph.midasi)): w = model.wv.similarity(text1, mrph.midasi) m = 0.6 if m <= w: mm = mrph.midasi When.append(mrph.midasi) else: break elif '人' in so_f or '人名' in so_f: for i in range(len(mrph.midasi)): w = model.wv.similarity(text1, mrph.midasi) m = 0.6 if m <= w: mm = mrph.midasi Who.append(mm) else: break
print('Who:%s' %(Who))
print('Where:%s' %(Where))
print('When:%s' %(When))
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
あなたの回答
tips
プレビュー