前提・実現したいこと
Word2Vecを使った単語間の類似度算出をしようとしています。
配列に入っている単語それぞれの類似度を算出します。
Word2Vecに関する参考記事
発生している問題・エラーメッセージ
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-4-c36bec344767> in <module>() 3 for i in data: 4 for j in data: ----> 5 print(data[i] + '-' + data[j] + str(word2vec_model.similarity(data[i], data[j]))) TypeError: list indices must be integers or slices, not str
該当のソースコード
python
1import gensim 2word2vec_model = gensim.models.KeyedVectors.load_word2vec_format('model.vec', binary=False) 3data = ['あくび', '寝言', '寝不足', '消しカス', '消しゴム'] 4 5for i in data: 6 for j in data: 7 simNum = word2vec_model.similarity(data[i], data[j]) 8 if simNum > 0: 9 print(data[i] + '-' + data[j] + str()) 10 else: 11 pass
試したこと
以下のように配列からデータを取得せずに、類似度計算をしたところ、
vocabraryにない単語が入力された場合にエラーが出たため、
この例外処理も実現したいことのコードで実装する必要があります。
しかし、現状のコードでは例外処理の前にエラーが出ているため、
この部分が正しく動作するかわかっていない状況です。
import gensim word2vec_model = gensim.models.KeyedVectors.load_word2vec_format('model.vec', binary=False) import pprint pprint.pprint(word2vec_model.similarity('あくび', '寝不足')) pprint.pprint(word2vec_model.similarity('消しカス', '消しゴム'))
出力
0.38836078794177425 略 KeyError: "word '消しカス' not in vocabulary"
###ご回答を受けて試したことと問題
ボキャブラリーにない単語の例外処理が現在のコードでは適切に行われておらず、
エラーが表示されてしまいました。
python
1import gensim 2word2vec_model = gensim.models.KeyedVectors.load_word2vec_format('model.vec', binary=False) 3 4data = ['あくび', '寝言', '寝不足', '消しカス', '消しゴム'] 5 6for i in range (len(data)): 7 for j in range (len(data)): 8 simNum = word2vec_model.similarity(data[i], data[j]) 9 if simNum > 0: 10 print(data[i] + '-' + data[j] + str()) 11 else: 12 pass
出力
あくび-あくび1.0 あくび-寝言0.419536248055 あくび-寝不足0.388360787942 KeyError: "word '消しカス' not in vocabulary"
補足情報(FW/ツールのバージョンなど)
Python 3.6.3
Mac OS High Sierra
Jupyter notebook 5.0.
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/29 06:18
2018/06/29 06:21
退会済みユーザー
2018/07/01 04:41