Python基于Gensim实现文本相似度/匹配/查重

 更新时间:2024年03月08日 10:30:51   作者:小龙在山东  
Gensim是基于Python语言的自然语言处理库,用来主题建模、文本相似度等文本处理任务,下面我们就来看看如何使用Gensim实现文本相似度/匹配/查重等操作吧

Gensim是基于Python语言的自然语言处理库,用来主题建模、文本相似度等文本处理任务。

Gensim的工作流程包括:分词、生成词典、向量化、模型训练等。

LSI模型

import jieba
from gensim import corpora, models, similarities

# 文本数据集
data = ['张文宏谈为何这个冬天总生病',
        '“为什么这个冬天我们好像一直在生病?”张文宏这样说→']

# 分词
token_list = []
for sentence in data:
    tokens = [word for word in jieba.lcut(sentence)]
    token_list.append(tokens)
print(token_list)

# 词典,单词映射唯一ID
dic = corpora.Dictionary(token_list)

# 文本转化为文档-词袋(document-term)表示
corpus = [dic.doc2bow(doc) for doc in token_list]
print(corpus)

# 生成模型
lda_model = models.LsiModel(corpus, num_topics=2, id2word=dic)

# 主题及其词汇
for topic in lda_model.print_topics():
    print(topic)

# 索引
index = similarities.MatrixSimilarity(lda_model[corpus])

query = '为什么这个冬天我们好像一直在生病'

# 预处理
query_bow = dic.doc2bow(jieba.lcut(query))

# 相似性得分
sims = index[lda_model[query_bow]]

sims = sorted(enumerate(sims), key=lambda item: -item[1])

for document_id, similarity in sims:
    print(document_id, similarity)

TFIDF

方案一

import jieba
from gensim import corpora, models, similarities
if __name__ == '__main__':
    base_data = [
        "好雨知时节,当春乃发生。随风潜入夜,润物细无声。野径云俱黑,江船火独明。晓看红湿处,花重锦官城。",
        "君问归期未有期,巴山夜雨涨秋池。何当共剪西窗烛,却话巴山夜雨时。",
        "莫听穿林打叶声,何妨吟啸且徐行。竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生。料峭春风吹酒醒,微冷,山头斜照却相迎。回首向来萧瑟处,归去,也无风雨也无晴。",
        "天街小雨润如酥,草色遥看近却无。最是一年春好处,绝胜烟柳满皇都。",
        "古木阴中系短篷,杖藜扶我过桥东。沾衣欲湿杏花雨,吹面不寒杨柳风。",
        "少年听雨歌楼上。红烛昏罗帐。壮年听雨客舟中。江阔云低、断雁叫西风。 而今听雨僧庐下。鬓已星星也。悲欢离合总无情。一任阶前、点滴到天明。",
        "雨里鸡鸣一两家,竹溪村路板桥斜。妇姑相唤浴蚕去,闲看中庭栀子花。",
        "一夕轻雷落万丝,霁光浮瓦碧参差。有情芍药含春泪,无力蔷薇卧晓枝。"
    ]
    # 1.将base_data中的数据进行遍历后分词
    base_items = [[i for i in jieba.lcut(item)] for item in base_data]
    print(base_items)
    # 2.生成词典
    dictionary = corpora.Dictionary(base_items)
    # 3.通过doc2bow稀疏向量生成语料库
    corpus = [dictionary.doc2bow(item) for item in base_items]
    # 4.通过TF模型算法,计算出tf值
    tf = models.TfidfModel(corpus)
    # 5.通过token2id得到特征数(字典里面的键的个数)
    num_features = len(dictionary.token2id.keys())
    # 6.计算稀疏矩阵相似度,建立一个索引
    index = similarities.MatrixSimilarity(tf[corpus], num_features=num_features)
    # 7.处理测试数据
    test_text = "风雨凄凄,鸡鸣喈喈。既见君子,云胡不夷。风雨潇潇,鸡鸣胶胶。既见君子,云胡不瘳。风雨如晦,鸡鸣不已。既见君子,云胡不喜。"
    test_words = [word for word in jieba.cut(test_text)]
    print(test_words)
    # 8.新的稀疏向量
    new_vec = dictionary.doc2bow(test_words)
    # 9.算出相似度
    sims = index[tf[new_vec]]
    print(list(sims))

方案二

from jieba import lcut
from gensim.similarities import SparseMatrixSimilarity
from gensim.corpora import Dictionary
from gensim.models import TfidfModel
# 文本集和搜索词
texts = ['吃鸡这里所谓的吃鸡并不是真的吃鸡,也不是谐音词刺激的意思',
         '而是出自策略射击游戏《绝地求生:大逃杀》里的台词',
         '我吃鸡翅,你吃鸡腿']
keyword = '玩过吃鸡?今晚一起吃鸡'
# 1、将【文本集】生成【分词列表】
texts = [lcut(text) for text in texts]
# 2、基于文本集建立【词典】,并获得词典特征数
dictionary = Dictionary(texts)
num_features = len(dictionary.token2id)
# 3.1、基于词典,将【分词列表集】转换成【稀疏向量集】,称作【语料库】
corpus = [dictionary.doc2bow(text) for text in texts]
# 3.2、同理,用【词典】把【搜索词】也转换为【稀疏向量】
kw_vector = dictionary.doc2bow(lcut(keyword))
# 4、创建【TF-IDF模型】,传入【语料库】来训练
tfidf = TfidfModel(corpus)
# 5、用训练好的【TF-IDF模型】处理【被检索文本】和【搜索词】
tf_texts = tfidf[corpus]  # 此处将【语料库】用作【被检索文本】
tf_kw = tfidf[kw_vector]
# 6、相似度计算
sparse_matrix = SparseMatrixSimilarity(tf_texts, num_features)
similarities = sparse_matrix.get_similarities(tf_kw)
for e, s in enumerate(similarities, 1):
    print('kw 与 text%d 相似度为:%.2f' % (e, s))

方案三

from gensim import corpora, models, similarities
import jieba
text1 = '无痛人流并非无痛'
text2 = '北方人流浪到南方'
texts = [text1, text2]
keyword = '无痛人流'
texts = [jieba.lcut(text) for text in texts]
dictionary = corpora.Dictionary(texts)
num_features = len(dictionary.token2id)
corpus = [dictionary.doc2bow(text) for text in texts]
tfidf = models.TfidfModel(corpus)
new_vec = dictionary.doc2bow(jieba.lcut(keyword))
# 相似度计算
index = similarities.SparseMatrixSimilarity(tfidf[corpus], num_features)
print('\nTF-IDF模型的稀疏向量集:')
for i in tfidf[corpus]:
    print(i)
print('\nTF-IDF模型的keyword稀疏向量:')
print(tfidf[new_vec])
print('\n相似度计算:')
sim = index[tfidf[new_vec]]
for i in range(len(sim)):
    print('第', i+1, '句话的相似度为:', sim[i])

到此这篇关于Python基于Gensim实现文本相似度/匹配/查重的文章就介绍到这了,更多相关Python Gensim内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python爬取十篇新闻统计TF-IDF

    Python爬取十篇新闻统计TF-IDF

    这篇文章主要为大家详细介绍了Python爬取十篇新闻统计TF-IDF的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • python广度搜索解决八数码难题

    python广度搜索解决八数码难题

    这篇文章主要介绍了python广度搜索解决八数码难题。想了解算法和数据结构的同学,一定要看一下
    2021-04-04
  • selenium2.0中常用的python函数汇总

    selenium2.0中常用的python函数汇总

    这篇文章主要介绍了selenium2.0中常用的python函数,总结分析了selenium2.0中常用的python函数的功能、原理与基本用法,需要的朋友可以参考下
    2019-08-08
  • Python查找算法之插补查找算法的实现

    Python查找算法之插补查找算法的实现

    这篇文章主要介绍了Python查找算法之插补查找算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Pycharm 解决自动格式化冲突的设置操作

    Pycharm 解决自动格式化冲突的设置操作

    这篇文章主要介绍了Pycharm 解决自动格式化冲突的设置操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • 初步认识Python中的列表与位运算符

    初步认识Python中的列表与位运算符

    这篇文章主要介绍了Python中的列表与位运算符,是Python入门学习中的基础知识,需要的朋友可以参考下
    2015-10-10
  • Python 操作 MongoDB 讲解详细

    Python 操作 MongoDB 讲解详细

    MongoDB是一款开源的、基于分布式的、面向文档存储的非关系型数据库。拥有高性能、高可用,易扩展的优点,并且支持丰富的查询语言来支持读写操作以及更复杂的查询等。接下来我们来看一下如何使用Python操作MongoDB数据库
    2021-09-09
  • Python反爬实战掌握酷狗音乐排行榜加密规则

    Python反爬实战掌握酷狗音乐排行榜加密规则

    最新的酷狗音乐反爬来袭,本文介绍如何利用Python掌握酷狗排行榜加密规则,本章内容只限学习,切勿用作其他用途!!!!! 有需要的朋友可以借鉴参考下
    2021-10-10
  • 在Python中使用turtle绘制多个同心圆示例

    在Python中使用turtle绘制多个同心圆示例

    今天小编就为大家分享一篇在Python中使用turtle绘制多个同心圆示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • Python3基础之基本数据类型概述

    Python3基础之基本数据类型概述

    这篇文章主要介绍了Python3的基本数据类型,需要的朋友可以参考下
    2014-08-08

最新评论