码迷,mamicode.com
首页 > 其他好文 > 详细

初始gensim

时间:2018-09-27 00:10:30      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:sem   x11   需要   print   rev   word   sim   nump   list   

 1 import jieba
 2 import gensim
 3 from gensim import corpora
 4 from gensim import models
 5 from gensim import similarities
 6 
 7 l1 = ["你的名字是什么", "你今年几岁了", "你有多高你胸多大", "你胸多大"]
 8 a = "你今年多大了"
 9 
10 all_doc_list = []
11 for doc in l1:
12     doc_list = [word for word in jieba.cut(doc)]
13     all_doc_list.append(doc_list)
14 
15 print(all_doc_list)
16 doc_test_list = [word for word in jieba.cut(a)]
17 
18 # 制作语料库
19 dictionary = corpora.Dictionary(all_doc_list)  # 制作词袋
20 # 词袋的理解
21 # 词袋就是将很多很多的词,进行排列形成一个 词(key) 与一个 标志位(value) 的字典
22 # 例如: {‘什么‘: 0, ‘你‘: 1, ‘名字‘: 2, ‘是‘: 3, ‘的‘: 4, ‘了‘: 5, ‘今年‘: 6, ‘几岁‘: 7, ‘多‘: 8, ‘有‘: 9, ‘胸多大‘: 10, ‘高‘: 11}
23 # 至于它是做什么用的,带着问题往下看
24 
25 print("token2id", dictionary.token2id)
26 print("dictionary", dictionary, type(dictionary))
27 
28 corpus = [dictionary.doc2bow(doc) for doc in all_doc_list]
29 # 语料库:
30 # 这里是将all_doc_list 中的每一个列表中的词语 与 dictionary 中的Key进行匹配
31 # 得到一个匹配后的结果,例如[‘你‘, ‘今年‘, ‘几岁‘, ‘了‘]
32 # 就可以得到 [(1, 1), (5, 1), (6, 1), (7, 1)]
33 # 1代表的的是 你 1代表出现一次, 5代表的是 了  1代表出现了一次, 以此类推 6 = 今年 , 7 = 几岁
34 print("corpus", corpus, type(corpus))
35 
36 # 将需要寻找相似度的分词列表 做成 语料库 doc_test_vec
37 doc_test_vec = dictionary.doc2bow(doc_test_list)
38 print("doc_test_vec", doc_test_vec, type(doc_test_vec))
39 
40 # 将corpus语料库(初识语料库) 使用Lsi模型进行训练
41 lsi = models.LsiModel(corpus)
42 # 这里的只是需要学习Lsi模型来了解的,这里不做阐述
43 print("lsi", lsi, type(lsi))
44 # 语料库corpus的训练结果
45 print("lsi[corpus]", lsi[corpus])
46 # 获得语料库doc_test_vec 在 语料库corpus的训练结果 中的 向量表示
47 print("lsi[doc_test_vec]", lsi[doc_test_vec])
48 
49 # 文本相似度
50 # 稀疏矩阵相似度 将 主 语料库corpus的训练结果 作为初始值
51 index = similarities.SparseMatrixSimilarity(lsi[corpus], num_features=len(dictionary.keys()))
52 print("index", index, type(index))
53 
54 # 将 语料库doc_test_vec 在 语料库corpus的训练结果 中的 向量表示 与 语料库corpus的 向量表示 做矩阵相似度计算
55 sim = index[lsi[doc_test_vec]]
56 
57 print("sim", sim, type(sim))
58 
59 # 对下标和相似度结果进行一个排序,拿出相似度最高的结果
60 # cc = sorted(enumerate(sim), key=lambda item: item[1],reverse=True)
61 cc = sorted(enumerate(sim), key=lambda item: -item[1])
62 print(cc)
63 
64 text = l1[cc[0][0]]
65 
66 print(a,text)
67 
68

输出结果:

all_doc_list>>>>[[, , 名字, , 什么], [, 今年, 几岁, ], [, , , , , 胸多大], [, 胸多大]]
token2id >>>>>{什么: 0, : 1, 名字: 2, : 3, : 4, : 5, 今年: 6, 几岁: 7, : 8, : 9, 胸多大: 10, : 11}
dictionary Dictionary(12 unique tokens: [什么, , 名字, , ]...) <class gensim.corpora.dictionary.Dictionary>

corpus>>>>> [[(0, 1), (1, 1), (2, 1), (3, 1), (4, 1)], [(1, 1), (5, 1), (6, 1), (7, 1)], [(1, 2), (8, 1), (9, 1), (10, 1), (11, 1)], [(1, 1), (10, 1)]] <class list>

doc_test_vec>>>>> [(1, 1), (5, 1), (6, 1)] <class list>
lsi LsiModel(num_terms=12, num_topics=200, decay=1.0, chunksize=20000) <class gensim.models.lsimodel.LsiModel>
lsi[corpus] <gensim.interfaces.TransformedCorpus object at 0x113e07550>
lsi[doc_test_vec] [(0, -0.991031294885469), (1, -0.06777365757876222), (2, 1.143786647872063), (3, -0.015934342901802782)]
index <gensim.similarities.docsim.SparseMatrixSimilarity object at 0x113e07550> <class gensim.similarities.docsim.SparseMatrixSimilarity>
sim [0.29518965 0.9900962  0.46673587 0.46673578] <class numpy.ndarray>
[(1, 0.9900962), (2, 0.46673587), (3, 0.46673578), (0, 0.29518965)]
你今年多大了 你今年几岁了

 

初始gensim

标签:sem   x11   需要   print   rev   word   sim   nump   list   

原文地址:https://www.cnblogs.com/yangbinqiji/p/9710635.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!