Wikipediaのテキストから学習したWord2Vecのモデルを以下からダウンロード
https://github.com/Kyubyong/wordvectors
の下の方のjapanes(w) -> ja.zipをダウンロード -> dataフォルダ下に配置
類義語というよりはカテゴリが似ている語が出力されている
DBpediaやWordNetはベースを人が作成するため、使いたい語が登録されていない場合もある
多くの同義語を取得したい場合はWord2Vecの方が適している
Word2Vecのモデルに含まれない語はベクトルが呼び出せず、KeyErrorになる
自分で例外処理を追加し、空ののリストを返すようしよう
word2vec.py
import gensim
model = gensim.models.Word2Vec.load('./data/ja.bin')
def get_synonyms(text):
results = []
try:
for word, sim in model.most_similar(text, topn=10):
results.append({'term': word, 'similarity': sim})
except:
pass
return results
results = []
try:
for word, sim in model.most_similar(text, topn=10):
results.append({'term': word, 'similarity': sim})
except:
pass
return results
def calc_similarity(text1, text2):
try:
sim = model.similarity(text1, text2)
except:
pass
return sim
def analogy(X_Y, x):
X, Y = X_Y
results = []
try:
for word, sim in model.most_similar(positive=[Y, x], negative=[X], topn=10):
results.append({'term': word, 'similarity': sim})
except:
pass
return results
結果
[
{
"term": "イギリス",
"similarity": 0.7778580188751221
},
{
"term": "カナダ",
"similarity": 0.7089664936065674
},
{
"term": "オーストラリア",
"similarity": 0.6960539221763611
},
{
"term": "イギリスアメリカ",
"similarity": 0.671729564666748
},
{
"term": "アルゼンチン",
"similarity": 0.6481400728225708
},
{
"term": "メキシコ",
"similarity": 0.6394719481468201
},
{
"term": "ブラジル",
"similarity": 0.6384978890419006
},
{
"term": "ドイツ",
"similarity": 0.6304243206977844
},
{
"term": "フランス",
"similarity": 0.6301647424697876
},
{
"term": "ニュージーランド",
"similarity": 0.6216776967048645
}
]
{
"term": "イギリス",
"similarity": 0.7778580188751221
},
{
"term": "カナダ",
"similarity": 0.7089664936065674
},
{
"term": "オーストラリア",
"similarity": 0.6960539221763611
},
{
"term": "イギリスアメリカ",
"similarity": 0.671729564666748
},
{
"term": "アルゼンチン",
"similarity": 0.6481400728225708
},
{
"term": "メキシコ",
"similarity": 0.6394719481468201
},
{
"term": "ブラジル",
"similarity": 0.6384978890419006
},
{
"term": "ドイツ",
"similarity": 0.6304243206977844
},
{
"term": "フランス",
"similarity": 0.6301647424697876
},
{
"term": "ニュージーランド",
"similarity": 0.6216776967048645
}
]
入力するテキストを『健康』に変更
結果
[
{
"term": "衛生",
"similarity": 0.5829343795776367
},
{
"term": "心身",
"similarity": 0.5055597424507141
},
{
"term": "福祉",
"similarity": 0.48429426550865173
},
{
"term": "保健",
"similarity": 0.4675716161727905
},
{
"term": "介護",
"similarity": 0.46678638458251953
},
{
"term": "ケア",
"similarity": 0.4635636508464813
},
{
"term": "環境",
"similarity": 0.44540971517562866
},
{
"term": "精神",
"similarity": 0.43922868371009827
},
{
"term": "疾病",
"similarity": 0.43444526195526123
},
{
"term": "リハビリテーション",
"similarity": 0.426738977432251
}
]
{
"term": "衛生",
"similarity": 0.5829343795776367
},
{
"term": "心身",
"similarity": 0.5055597424507141
},
{
"term": "福祉",
"similarity": 0.48429426550865173
},
{
"term": "保健",
"similarity": 0.4675716161727905
},
{
"term": "介護",
"similarity": 0.46678638458251953
},
{
"term": "ケア",
"similarity": 0.4635636508464813
},
{
"term": "環境",
"similarity": 0.44540971517562866
},
{
"term": "精神",
"similarity": 0.43922868371009827
},
{
"term": "疾病",
"similarity": 0.43444526195526123
},
{
"term": "リハビリテーション",
"similarity": 0.426738977432251
}
]