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

暑期学习的过程中有幸接触了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-numpy
sudo 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 documents
if __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.我爱自然语言处理(强烈推荐此系列文档)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值