总体思路:
由于我在查询同义词的时候,发现很多专业词语都可能不在这个词向量训练模型里面,于是我想到了可以写成,输入一个词,查询这个库中有没有词表示,如果没有就把它分词后查询。
先导入库
import jieba
import gensim
import numpy as np
再导入已经训练好的词向量模型(我这里设置limit为1000000,总共有600多万个词)
word_vectors=gensim.models.KeyedVectors.load_word2vec_format('D:\\BAIKE/baike_26g_news_13g_novel_229g.bin', binary=True,limit=1000000)
输入查询同义词
if word in word_vectors:
print(word_vectors.most_similar(positive = [word], topn = 5))
比如查询”人口学”这个词语得到结果如下
但是查询一些专有名词,如果不在词向量里面会报错
于是将其分词以后查询
else:
wordcut = jieba.lcut(word)
print("第一次分词结果")
print(wordcut)
for i in wordcut:
if i in word_vectors:
print(i)
print(word_vectors.most_similar(positive = [i], topn = 5))
else:
c=[one for one in i]
print("第二次分为一个一个字")
print(c)
for j in c:
print(j)
print(word_vectors.most_similar(positive = [j], topn = 5))
得到结果如下:(我使用两次分词,第一次jieba分词,第二次直接分成一个一个字)
完整代码如下(可能还有字不在词向量里面,还需改进):
import jieba
import gensim
import numpy as np
word=input()
word_vectors=gensim.models.KeyedVectors.load_word2vec_format('D:\\BAIKE/baike_26g_news_13g_novel_229g.bin', binary=True,limit=1000000)
if word in word_vectors:
print(word_vectors.most_similar(positive = [word], topn = 5))
else:
wordcut = jieba.lcut(word)
print("第一次分词结果")
print(wordcut)
for i in wordcut:
if i in word_vectors:
print(i)
print(word_vectors.most_similar(positive = [i], topn = 5))
else:
c=[one for one in i]
print("第二次分为一个一个字")
print(c)
for j in c:
print(j)
print(word_vectors.most_similar(positive = [j], topn = 5))