word2vec查询中文词向量同义词

总体思路:

由于我在查询同义词的时候,发现很多专业词语都可能不在这个词向量训练模型里面,于是我想到了可以写成,输入一个词,查询这个库中有没有词表示,如果没有就把它分词后查询。

先导入库

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))

比如查询”人口学”这个词语得到结果如下

但是查询一些专有名词,如果不在词向量里面会报错

word2vec查询中文词向量同义词_第1张图片

 于是将其分词以后查询

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分词,第二次直接分成一个一个字)

word2vec查询中文词向量同义词_第2张图片

 完整代码如下(可能还有字不在词向量里面,还需改进):

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))

你可能感兴趣的:(word2vec)