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简单的爬虫操作(requests和etree)

    关于python简单的爬虫操作(requests和etree)

    这篇文章主要介绍了关于python简单的爬虫操作(requests和etree),文中提供了实现代码,需要的朋友可以参考下
    2023-04-04
  • Python变量名详细规则详细变量值介绍

    Python变量名详细规则详细变量值介绍

    这篇文章主要介绍了Python变量名详细规则详细变量值,Python需要使用标识符给变量命名,其实标识符就是用于给程序中变量、类、方法命名的符号(简单来说,标识符就是合法的名称,下面葛小编一起进入文章里哦阿姐更多详细内容吧
    2022-01-01
  • Python正则表达式和re库知识点总结

    Python正则表达式和re库知识点总结

    在本篇文章中小编给大家分享了关于Python正则表达式和re库知识点内容,有兴趣的朋友们学习下。
    2019-02-02
  • python os.listdir()乱码解决方案

    python os.listdir()乱码解决方案

    在本篇文章里小编给大家整理的是一篇关于python os.listdir()乱码解决方案,对此有兴趣的朋友们可以学习下。
    2021-01-01
  • Python算法之图的遍历

    Python算法之图的遍历

    这篇文章主要介绍了Python算法之图的遍历,涉及遍历算法BFS和DFS,以及寻找图的(强)连通分量的算法等相关内容,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • python学习之读取配置文件

    python学习之读取配置文件

    这篇文章主要介绍了python学习之读取配置文件,文章基于python的相关资料展开对主题的详细介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-04-04
  •  分享4款Python 自动数据分析神器

     分享4款Python 自动数据分析神器

    这篇文章主要给大家分享的是4款Python 自动数据分析神器,我给大家分享 4 款常用的EDA工具,它们可以自动产出统计数据和图表,为我们节省大量时间,需要的朋友可以参考一下
    2022-03-03
  • Python数据结构之链表详解

    Python数据结构之链表详解

    在顺序存储方式中,根据数据元素的序号就可随机存取表中任何一个元素,但同时在插入和删除运算需要移动大量的元素,造成算法效率较低。解决此缺陷的一个办法是:对线性表采用链式存储方式。本文将介绍链式存储结构的特点以及各种基本操作的实现。需要的可以参考一下
    2022-01-01
  • Python真题案例之最长回文子串 周期串详解

    Python真题案例之最长回文子串 周期串详解

    今天来记录一下字符串处理中常见到的回文子串与周期串问题。使用的语言是Python优雅的处理字符串是程序员不可或缺的技能,快来一起学习吧
    2022-03-03
  • python脚本之一键移动自定格式文件方法实例

    python脚本之一键移动自定格式文件方法实例

    这篇文章主要给大家介绍了关于python脚本之一键移动自定格式文件的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用python具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09

最新评论