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)
操作步骤

 

posted on 2019-07-26 17:54  LiangShaoY  阅读(222)  评论(0编辑  收藏  举报