質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

392閲覧

Word2Vecの類似度の一番高いものを出力する

puchan

総合スコア4

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/12/10 05:53

編集2020/12/11 02:05

前提・実現したいこと

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/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jbpb0

2020/12/11 04:12 編集

pythonのコードの一番最後の行のすぐ下に ``` だけの行を追加してください 現状だと、pythonコードのインデントが消えてるので、とても見辛いです 「一番最後の行」というのは、「print('When:%s' %(When))」のことです それの下に「```」だけの行を追加してください また、pythonのコードの一番最初の行「from pyknp import KNP」のすぐ前には、「```python」という行があるようにしてください もしかしたら現状は、「```python」の行の次に「```」だけの行があり、さらにその下にpythonのコードを書いてませんでしょうか? もしそうなっていたら、pythonコードの前の「```」だけの行は不要です
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問