python-文本相似度计算库-gensim

1、功能说明

1、对各个文档数据先生成总量的词袋,  
2、根据总量的词袋,各个文档数据构造各自的词向量
3、根据总量的词袋,生成待查找数据的向量,
3、通过TF-IDF模型,生成各个文档数据与待查找数据的相似度
4、通过LSI模型,生成各个文档数据与待查找数据的相似度

2、安装所需要的python库

     2.1、分词库        

pip3 install jieba

     2.2、生成总词袋,词袋向量,TF-IDF模型,LSI模型库         

pip3 install gensim

3、代码

# -*- coding: utf-8 -*- 
import jieba
import gensim

if __name__ == "__main__":
    source_texts = [
        '苹果,葡萄,柚子',
        '这周,我想出去玩了',
        '苹果,葡萄,柚子,爱吃,香蕉还行',
    ]

    query_s = '苹果,柚子,葡萄'

    #源数据
    source_words = [jieba.lcut(text) for text in source_texts]
    
    #建立词袋模型,提取所有的去重的字,赋予其序号
    dictionary = gensim.corpora.Dictionary(source_words)
    #for k,v in dictionary.items():
    #    print(k,v)
    
    #根据前面的词袋,构造各个语句的词向量
    source_vectors = [dictionary.doc2bow(text) for text in source_words]
    #for i,v in enumerate(source_vectors):
    #    print(i,v)
    
    #查询数据
    query_words = jieba.lcut(query_s)
    #根据之前生成的总量词袋数据,生成查找的词袋向量
    query_vector = dictionary.doc2bow(query_words)
    
    def get_match_result(my_model,source_vectors,query_vector):
        sim_source = my_model[source_vectors]
        sim_query = my_model[query_vector]
    
        index = gensim.similarities.MatrixSimilarity(sim_source) #得到源数据所有的索引数据
        sims = index[sim_query] #查询的数据与源数据相似度匹配
     
        result = []
        for i,elem in enumerate(sims):
            result.append([elem, source_texts[i]])
     
        result.sort(key=(lambda l: l[0]), reverse = True)
        return result


    #TF-IDF模型
    tf_model = gensim.models.TfidfModel(source_vectors)
    result = get_match_result(tf_model,source_vectors = source_vectors,query_vector = query_vector)
    print("tf-查找数据:%s\n"%query_s,"\n".join([u"相识度:'%s',源数据:'%s'"%(k,v) for k,v in result]))
    
    #LSI主题模型
    lsi_model = gensim.models.LsiModel(source_vectors, id2word=dictionary, num_topics=2)
    result = get_match_result(lsi_model,source_vectors = source_vectors,query_vector = query_vector)
    print("\nlsi-查找数据:%s\n"%query_s,"\n".join([u"相识度:'%s',源数据:'%s'"%(k,v) for k,v in result]))
     
   

4、执行结果

[xx@xxxxxxxxxx words]$ python3 similar.py 
Building prefix dict from the default dictionary ...
Loading model from cache /tmp/jieba.cache
Loading model cost 0.962 seconds.
Prefix dict has been built successfully.
tf-源数据:苹果,柚子,葡萄
 相识度:'0.99999994',数据:'苹果,葡萄,柚子'
相识度:'0.25251475',数据:'苹果,葡萄,柚子,爱吃,香蕉还行'
相识度:'0.0',数据:'这周,我想出去玩了'


lsi-源数据:苹果,柚子,葡萄
 相识度:'1.0',数据:'苹果,葡萄,柚子'
相识度:'0.9970355',数据:'苹果,葡萄,柚子,爱吃,香蕉还行'
相识度:'0.3389639',数据:'这周,我想出去玩了'

 

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值