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

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

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

 于是将其分词以后查询

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

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值