Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1110753
  • 博文数量: 165
  • 博客积分: 3900
  • 博客等级: 中校
  • 技术积分: 1887
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-06 15:15
文章分类

全部博文(165)

文章存档

2020年(3)

2019年(8)

2017年(2)

2016年(8)

2015年(14)

2013年(15)

2012年(32)

2011年(11)

2010年(14)

2009年(7)

2008年(20)

2007年(31)

分类: 大数据

2017-10-27 00:00:57

gensim的doc2bow实现词袋模型

词袋模型不做过多介绍,直接来个案例

from gensim import corpora, models, similarities
raw_documents = [ '0无偿居间介绍买卖毒品的行为应如何定性', '1吸毒男动态持有大量毒品的行为该如何认定', '2如何区分是非法种植毒品原植物罪还是非法制造毒品罪', '3为毒贩贩卖毒品提供帮助构成贩卖毒品罪', '4将自己吸食的毒品原价转让给朋友吸食的行为该如何认定', '5为获报酬帮人购买毒品的行为该如何认定', '6毒贩出狱后再次够买毒品途中被抓的行为认定', '7虚夸毒品功效劝人吸食毒品的行为该如何认定', '8妻子下落不明丈夫又与他人登记结婚是否为无效婚姻', '9一方未签字办理的结婚登记是否有效', '10夫妻双方1990年按农村习俗举办婚礼没有结婚证 一方可否起诉离婚', '11结婚前对方父母出资购买的住房写我们二人的名字有效吗', '12身份证被别人冒用无法登记结婚怎么办?', '13同居后又与他人登记结婚是否构成重婚罪', '14未办登记只举办结婚仪式可起诉离婚吗', '15同居多年未办理结婚登记,是否可以向法院起诉要求离婚' ] 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

载入中文数据以及对应的包,corpora是构造词典的, similarities求相似性可以用得到。

texts = [[word for word in jieba.cut(document, cut_all=True)] for document in raw_documents] 
  • 1
  • 2

将词语进行分词,并进行存储。

dictionary = corpora.Dictionary(texts)
  • 1

寻找整篇语料的词典、所有词,corpora.Dictionary。

corpus = [dictionary.doc2bow(text) for text in texts]
  • 1

建立语料之后,分支一:BOW词袋模型;分支二:建立TFIDF。 
.

分之一:BOW词袋模型

由doc2bow变为词袋,输出的格式为:

[[(0, 1), (1, 1), (2, 1), (3, 1), (4, 1), (5, 1), (6, 1)], [(0, 1), (4, 1), (5, 1), (7, 1), (8, 1), (9, 2), (10, 1)], [(0, 1), (3, 1), (4, 1), (5, 1), (6, 1), (7, 1), (10, 1)]]
  • 1

例如(9,2)这个元素代表第二篇文档中id为9的单词“silver”出现了2次。 
.

分支二:建立TFIDF

tfidf = models.TfidfModel(corpus)
  • 1

使用tf-idf 模型得出该评论集的tf-idf 模型

corpus_tfidf = tfidf[corpus] 
  • 1

此处已经计算得出所有评论的tf-idf 值

在TFIDF的基础上,进行相似性检索。

similarity = similarities.Similarity('Similarity-tfidf-index', corpus_tfidf, num_features=600) 
  • 1

然后进行similarity检索。

print(similarity[test_corpus_tfidf_1]) # 返回最相似的样本材料,(index_of_document, similarity) tuples 
  • 1

当然其中的test_corpus_tfidf_1需要进行预先处理。先变为dow2bow,然后tfidf 
.

情况一:新的句子

new_sensence = "16通过下面一句得到语料中每一篇文档对应的稀疏向量" test_corpus_1 = dictionary.doc2bow(jieba.cut(raw_documents[1], cut_all=True)) vec_tfidf = tfidf[test_corpus_1]
  • 1
  • 2
  • 3

利用doc2bow对其进行分割,然后求tfidf模型。输出的结果即为:

vec_tfidf Out[82]: 
[(1, 0.09586155438319434),
 (5, 0.1356476941913782),
 (6, 0.09586155438319434),
 (8, 0.1356476941913782),
 (11, 0.19172310876638868),
 (12, 0.38344621753277736),
 (13, 0.38344621753277736),
 (14, 0.38344621753277736),
 (15, 0.16086258119086566),
 (16, 0.38344621753277736),
 (17, 0.38344621753277736),
 (18, 0.38344621753277736)]
阅读(6118) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~