用gensim的API实现Word2Vec和WMD

搭建的模型分为3步。
第一步实现对文本的处理,包括分词、去停用词
第二步用WordsVec实现文本的向量化
第三步实现相似度计算。
第一步的实现代码如下所示:

def load_stopwords():
    stopwords = []
    with open('F:\\Code\\text_similarity\\stopword.txt', encoding='UTF-8') as f:
        for line in f:
            line = line.replace('\n', '')
            stopwords.append(line)
    return stopwords


def participle(docl, multi):
    docs = []
    stopwords = load_stopwords()
    if multi is True:
        for i in docl:
            temp = jieba.cut(i)
            temp = [x for x in temp if x not in stopwords]
            docs.append(temp)
        return docs
    else:
        temp = jieba.cut(docl)
        temp = [x for x in temp if x not in stopwords]
        return temp

load_stopwords()实现载入停用词的功能,以便于participle()对文本的处理。participle()函数实现的是对文本的分词、去停用词操作。因为刚开始训练语料库的时候是多文本,后来查询的时候使用的是单个的文本,所以该函数对这两种情况分开处理。文本分词的时候使用的是jieba分词器。

第二步实现的是对文本的向量化实现代码为

model = Word2Vec(corpus, size=10, min_count=1)

其中size参数为Vector的维度,min_count参数会过滤掉频数小于它的单词,默认值为5,当语料库比较小的时候需要更改min_count的值,否则会报错说没有构建字典。

第三步实现的是WMD模型,调用的API为

instance = WmdSimilarity(corpus, model)

完整代码为

# coding=utf-8
from gensim.models import Word2Vec
from gensim.similarities import WmdSimilarity
import jieba

corpus = ['法国24小时电视台21日报道称,周六(21日),法国青年在巴黎举行气候变化抗议游行',
          '与此同时“黄背心”抗议者也掀起第45轮游行活动。巴黎出动了超过7000名警员严阵以待',
          '据俄罗斯卫星通讯社21日消息,截止发稿前,至少30名抗议者在巴黎被逮捕,法国警察',
          '还对596人进行核查审问,对4名示威者作出处罚。警方还在圣拉扎尔火车站前对抗议者使用催泪瓦斯。',
          '上周,约1800名“黄背心”示威者在南特游行,至少35人因与警方发生冲突被逮捕。3名警察和2名宪兵在冲突中受伤。']


def load_stopwords():
    stopwords = []
    with open('F:\\Code\\text_similarity\\stopword.txt', encoding='UTF-8') as f:
        for line in f:
            line = line.replace('\n', '')
            stopwords.append(line)
    return stopwords


def participle(docl, multi):
    docs = []
    stopwords = load_stopwords()
    if multi is True:
        for i in docl:
            temp = jieba.cut(i)
            temp = [x for x in temp if x not in stopwords]
            docs.append(temp)
        return docs
    else:
        temp = jieba.cut(docl)
        temp = [x for x in temp if x not in stopwords]
        return temp


if __name__ == '__main__':
    corpus = participle(corpus, True)
    print(corpus)
    #有两种调用Word2Vec类的方式,一种是先建立模型,再训练,另外一种是在建立模型的同时初始化
    # model = Word2Vec(min_count=1)
    # model.build_vocab(corpus)
    # model.train(corpus, total_examples=model.corpus_count, epochs=model.epochs,)
    model = Word2Vec(corpus, size=10, min_count=1)
    instance = WmdSimilarity(corpus, model, num_best=5)
    instance = WmdSimilarity(corpus, model)
    # print('语料库中的语料数',model.corpus_count)
    # print('合适',model.wv['合适'])
    # print('合适',model['合适'])
    while True:
        inquire = input("请输入查询的语句:")
        inquire_v = participle(inquire, False)
        sims = instance[inquire_v]
        # for i in range(5):
        #     print(sims[i][0], '的相似度为', sims[i][1])
        print(sims)  # 这样会从第一个文本开始输出相似度,上面的方式会输出相似度最高的5个
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值