Welcome

gensim学习

gensim 学习记录

起因

最近做了一个文本相似度检查的东西

联想

文本相似度检查可以利用在很多的地方,例如是:

  • 相关文章或者产品的推荐
  • 相同文本的检查
  • 更加“高级”的去重工作

现在python已经提供了一个好用的模块,叫做gensim
因为gensim的文档里边已经介绍得很详细了,所以我现在就不重复说这些东西了,接下来我是直接记录我在使用过程中的一些问题,
为了配合gensim的使用,还会使用到一个强大的中文分词工具,叫做jieba

我在我的linux主机下装好了全部的依赖之后,现在就差数据了,这个比较简单,可以写一个简单的爬虫爬取相关的网站的数据,
因为我测试的时候是用到了汽车的资讯,所以写了一个小爬虫去爬取了汽车之家的汽车资讯文章,爬了两千多条之后差不多就够了,

数据爬下来之后可以开始使用jieba中文分词工具来对内容进行分词

1
2
3
4
5
6
7
8
9
10
11
12
13
# encoding=utf-8
import jieba
from gensim import corpora,models,similarities,
train_set=[]
all_text_file = open('./data/all.txt')
for line in all_text_file:
word_list = jieba.cut(line, cut_all=False)
train_set.append(word_list)
all_text_file.close()

我这边只是做一个简单地实例代码,在实际情况中根据自身的需求进行改动。
最后得到的train_set 算是语料了(可以设置一些去停词来过滤掉一些无关的词语)
现在可以通过语料来生成自己的词语字典了(就和新华字典的概念差不多,一个词语给一个编号,可以通过这个编号来标记这个词语)

1
2
3
4
5
#生成字典
dictionary = corpora.Dictionary(train_set)
# 保存到文件中,以提供以后使用
dictionary.save("dictionary.dic")

现在有了字典之后,可以把内容都转换成编号来表示了

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

现在可以将数字语料转换成TFIDF了(关于什么是TFIDF网上搜一下)

1
2
3
4
5
6
7
#使用数字语料生成TFIDF模型
tfidfModel = models.TfidfModel(corpus)
#把全部语料向量化成TFIDF模式,这个tfidfModel可以传入二维数组
tfidfVectors = tfidfModel[corpus]
indexTfidf = similarities.MatrixSimilarity(tfidfVectors)

现在已经做好了基本工作了,来测试一下结果

1
2
3
4
5
doc_bow = dictionary.doc2bow(query)
doc_tfidf = tfidf[doc_bow]
sims = indexTfidf[doc_tfidf]
pprint(list(sims))

最后打印出来就是当前查询的文本和历史的文本的相似度的情况,如果是完全相似的话是1.0,如果是完全无关的0.0

写在最后

多总结多总结…