jieba gensim 相似度实现
Posted liangsha0
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jieba gensim 相似度实现相关的知识,希望对你有一定的参考价值。
import jieba from gensim import corpora # (语料库) from gensim import models # 训练模型 from gensim import similarities # 相似度处理 # 总体思路; # 1.先遍历语法库,jieba.cut(每一个句子),生成[[‘你‘, ‘今年‘, ‘几岁‘, ‘了‘],[],[]]形式的all_doc_list # 2.制作语料库,dictionary=corpora.Dictionary(all_doc_list),词袋 # 3.corpus = [dictionary.doc2bow(doc) for doc in all_doc_list] 制作成[ [(0, 1), (4, 1)], [(1, 1), (10, 1)] ] # 解释:doc2bow([‘你‘, ‘今年‘, ‘几岁‘, ‘了‘]) 把句子变成这个样子[(1, 1), (5, 1), (6, 1)] # 4.制作训练模型 lsi = models.LsiModel(corpus) # 5.稀疏矩阵相似度 index = similarities.SparseMatrixSimilarity(lsi[corpus], num_features=len(dictionary.keys())) # 6.筛选后掉下来的1:sim = index[lsi[测试词袋]] [0.29518965 0.9900962 0.46673587 0.46673578] # 7.对结果由大到小排序 cc = sorted(enumerate(sim), key=lambda item: -item[1]) # 8.取出第一个text = l1[cc[0][0]] #cc[0][0] 等于排序后的索引数字 l1 = ["你的名字是什么", "你今年几岁了", "你有多高你胸多大", "你胸多大"] a = "你今年多大了" # 结巴分词之后,制作成[[],[],[]]形式,doc每个词,每个词都要结巴cut一下,jieba之后生成的是生成器 all_doc_list = [] for doc in l1: word_l = list(jieba.cut(doc)) all_doc_list.append(word_l) # 做词袋 分 词库词袋 和 测试词袋 dictionary = corpora.Dictionary(all_doc_list) # 词库词袋 corpus = [dictionary.doc2bow(doc) for doc in all_doc_list] # 词库词袋数字对应关系 test_doc = list(jieba.cut(a)) test = dictionary.doc2bow(test_doc) # 测试匹配词库词袋之后的 词袋数字对应关系[(1, 1), (5, 1), (6, 1)] # 制作训练模型 lsi = models.LsiModel(corpus) # 相似度处理 index = similarities.SparseMatrixSimilarity(lsi[corpus], num_features=len(dictionary)) simi = index[lsi[test]] # 排序 取值 after_order = sorted(enumerate(simi), key=lambda x:x[1], reverse=True) text = l1[after_order[0][0]] print(a, text)
以上是关于jieba gensim 相似度实现的主要内容,如果未能解决你的问题,请参考以下文章