句子相似度实现算法

句子相似度–顾名思义就是两个句子之间相似的程度。
$ $
句子相似度在NLP中有很大的用处,譬如文本分类、信息检索、语义分析等,它可以为我们提供检索信息更快的方式,并且得到的信息更加准确。
$ $
基于传统的相似度算法,可以分为以下几个步骤:
1、分词
2、去除停用词
3、词向量的生成
4、相似度分析
5、生成相似度分数
相似度算法有很多,TF-IDF算法、余弦相似度算法、gensim算法、逻辑算法等等,有很多可以进行尝试。而且每种算法的准确性都不一致,下面给出的是gensim算法,通过jieba进行分词,已经应用到实际的项目中,希望能够给大家帮助。

# -*- coding: utf-8 -*-

import jieba
from gensim import corpora, models, similarities
from QASolution.DataList import get_question

def tfidf_similar(question):
    data = get_question()#得到需要进行匹配的数据列表或者字典
    #对多个结果分词
    all_cut = []
    for i in data.keys():
        all = []
        all.append(i)
        for j in all:
            j_cut = [word for word in jieba.cut(j)]
        all_cut.append(j_cut)
    #print(all_cut)
    #对输入分词
    test_cut = [word for word in jieba.cut(question)]
    #用dictionary方法获取词袋(bag-of-words)
    dictionary = corpora.Dictionary(all_cut)
    #词袋中用数字对所有词进行编号
    dictionary.keys()
    #编号与词间的对应关系
    dictionary.token2id
    #doc2bow制作语料库,语料库是一组向量,向量中的元素是一个二元组(编号、频次数)
    corpus = [dictionary.doc2bow(doc) for doc in all_cut]
    #输入转换成二元组向量
    test_vec = dictionary.doc2bow(test_cut)
    #tfidf相似度分析
    tfidf = models.TfidfModel(corpus)

    index = similarities.SparseMatrixSimilarity(tfidf[corpus],num_features=len(dictionary.keys()))
    sim = index[tfidf[test_vec]]
    question_list = sorted(enumerate(sim),key=lambda item: -item[1])
    old = question_list[:5]
    new = all_cut
    data = {}
    for each in old:
        p = each[1]#得到概率
        name = "".join(new[each[0]])#得到每个概率对应的疾病名称
        data[name] = p
    return data


(1)、如果您在阅读博客时遇到问题或者不理解的地方,可以联系我,互相交流、互相进步;
(2)、本人业余时间可以承接毕业设计和各种小项目,如系统构建、成立网站、数据挖掘、机器学习、深度学习等。有需要的加QQ:1143948594,备注“csdn项目”。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值