Ubuntu上使用gensim计算文档间的相似度

来源:互联网 发布:mac如何解密外置硬盘 编辑:程序博客网 时间:2024/06/05 21:16

暑期学习的过程中有幸接触了gensim中的lsi模型计算文档间的相似度,接下来将把我的所学整理一下~
详细的可见gensim的英文官方文档:http://radimrehurek.com/gensim/tutorial.html

关于gensim

gensim是一个相当专业的主题模型Python工具包,常应用于文本处理中挖掘文本间的相似度,它能够将文档根据TF-IDF, LDA, LSI 等模型转化成向量模式,以便进行进一步的处理。此外,gensim还实现了word2vec功能,能够将单词转化为词向量。

Ubuntu上gensim的安装

gensim依赖NumPy和SciPy这两大Python科学计算工具包,因此也需安装这两个依赖库~
(1)安装numpy和scipy

sudo apt-get install python-numpysudo apt-get install python-scipy

(2)安装gensim

sudo pip install --upgrade gensim

如果会报错的话可以尝试

sudo easy_install --upgrade gensim

gensim的使用

首先介绍几个概念:
(1)语料corpora就是一系列文档的集合,其中的词已经使用了字典进行相应的转换,成为一个个数字,我们可以通过字典的对应关系从数字找到对应的词。
(2)我们的输入是一个document list,每个文档是列表的一份子

from gensim import corpora, models, similarities# 先获取文档进行切词存于list中便于后续工作def get_class():    documents = []    data_path = '../task/'    for i in range(len(interest)):        each_path = os.path.join(data_path, interest[i]+'/')        filename = os.listdir(each_path)        for name in filename:            title_class = ''            f_path = os.path.join(each_path, name)            lines = linecache.getlines(f_path)            line = jieba.cut(lines[2])            for word in line:                if word not in stopwords:                    title_class = title_class + word + ' '                else:                    continue            documents.append(title_class)    return documentsif __name__ == '__main__':    documents = get_class()    # 对文档进行处理    texts = [[word for word in document.lower().split()] for document in documents]    # 构建词典    dictionary = corpora.Dictionary(texts)    # 将用字符串表示的文档转换为用id表示的文档向量    corpus = [dictionary.doc2bow(text) for text in texts]    # 基于“训练文档”计算一个TF-IDF“模型”    tfidf = models.TfidfModel(corpus)    corpus_tfidf = tfidf[corpus]    # 建立lsi模型    lsi = models.LsiModel(corpus_tfidf, id2word=dictionary, num_topics=3) # 这里的topic数需要自行调整达到最好的效果    # 或者建立lda模型    # lda = models.LdaModel(copurs_tfidf, id2word=dictionary, num_topics=2)    # 构建索引便于后面的查询    index = similarities.MatrixSimilarity(lsi[corpus])    # 进行查询    query = "某一篇文档"    # 将其向量化    query_bow = dictionary.doc2bow(query.lower().split())    # 使用之前建立的lsi模型将向量映射topic空间    query_lsi = lsi[query_bow]    # 计算查询与训练文档的余弦相似度    sims = index[query_lsi]    # 进行排序即可看到效果    sort_sims = sorted(enumerate(sims), key=lambda item: -item[1])

参考资料:
1.gensim的官方文档
2.我爱自然语言处理(强烈推荐此系列文档)

原创粉丝点击