gensim 实现 TF-IDF;textRank 关键词提取

news2024/10/2 17:16:59

目录

TF-IDF 提取关键词

介绍

代码

textRAnk 提取关键词 


这里只写了两种简单的提取方法,不需要理解上下文,如果需要基于一些语义提取关键词用 LDA:TF-IDF,textRank,LSI_LDA 关键词提取-CSDN博客

TF-IDF 提取关键词

介绍

TF-IDF(Term Frequency-Inverse Document Frequency)

含义:

  • TF (Term Frequency): 词频,是指一个词语在当前文档中出现的次数。它衡量的是词语在文档内部的重要性,直观上讲,一个词语在文档中出现越频繁,表明它对该文档内容描述的贡献越大。

  • IDF (Inverse Document Frequency): 逆文档频率,是一个词语在整个文档集合中的稀有度度量。IDF值由所有文档的数量除以包含该词语的文档数量,然后取对数得出。一个词语在越多的文档中出现,其IDF值就越小,反之,出现在少数文档中的词语IDF值较大,表示这个词具有更高的鉴别力。

TF-IDF计算公式:

TF-IDF = TF(t, d) * IDF(t)

其中,t是词语,d是文档。

优点:

  1. 突出重点:通过结合词频和逆文档频率,TF-IDF可以较好地突出文档中重要的、有代表性的词语,抑制常见但不具备独特意义的词语。

  2. 适应性强:适用于多种应用场景,如信息检索、文本分类、关键词提取等,能够在一定程度上消除文档长度差异对结果的影响。

  3. 计算简洁:基于简单的数学模型,易于理解和实现。

  4. 单篇文档也可以用:对于单篇可以吧文档分割为多个段落,以字数,句号等分割,这样就形成了多篇文档,再用就可以了。

缺点:

  1. 忽视上下文:TF-IDF仅仅考虑了词语在文档内部和文档集合之间的相对重要性,但没有考虑词语间的关联性和语义关系,容易忽略词序和短语结构等信息。

代码

提取一段文本中的关键词,需要先分为对文本分割,一是怕文本太长,而是可能会影响结果;

再对每个句子分词,再开始词袋及下面模型;

这里没有踢掉停用词啥的

import jieba
from gensim import corpora, models

# 文本预处理,将文档分为句子
text = '6月19日,《2012年度“中国爱心城市”公益活动新闻发布会》在京举行。' + \
       '中华社会救助基金会理事长许嘉璐到会讲话。基金会高级顾问朱发忠,全国老龄' + \
       '办副主任朱勇,民政部社会救助司助理巡视员周萍,中华社会救助基金会副理事长耿志远,' + \
       '重庆市民政局巡视员谭明政。晋江市人大常委会主任陈健倩,以及10余个省、市、自治区民政局' + \
       '领导及四十多家媒体参加了发布会。中华社会救助基金会秘书长时正新介绍本年度“中国爱心城' + \
       '市”公益活动将以“爱心城市宣传、孤老关爱救助项目及第二届中国爱心城市大会”为主要内容,重庆市' + \
       '、呼和浩特市、长沙市、太原市、蚌埠市、南昌市、汕头市、沧州市、晋江市及遵化市将会积极参加' + \
       '这一公益活动。中国雅虎副总编张银生和凤凰网城市频道总监赵耀分别以各自媒体优势介绍了活动' + \
       '的宣传方案。会上,中华社会救助基金会与“第二届中国爱心城市大会”承办方晋江市签约,许嘉璐理' + \
       '事长接受晋江市参与“百万孤老关爱行动”向国家重点扶贫地区捐赠的价值400万元的款物。晋江市人大' + \
       '常委会主任陈健倩介绍了大会的筹备情况。'
sentences = [sentence.strip() for sentence in text.split('。') if sentence.strip()]

# 对每个句子进行分词
tokenized_sentences = [list(jieba.cut(sentence)) for sentence in sentences]

# 创建词典并转化为词袋表示
dictionary = corpora.Dictionary(tokenized_sentences)
corpus = [dictionary.doc2bow(sentence) for sentence in tokenized_sentences]

# 训练TF-IDF模型
tfidf = models.TfidfModel(corpus)

# 计算TF-IDF值并提取关键词
keywords_freq = {}
for bow in tfidf[corpus]:
    for id, freq in bow:
        if dictionary[id] in keywords_freq:
            keywords_freq[dictionary[id]] = keywords_freq[dictionary[id]] + freq
        else:
            keywords_freq[dictionary[id]] = freq

# 结合词典信息,按TF-IDF值排序
keywords_tfidf = sorted(keywords_freq.items(), key=lambda x: x[1], reverse=True)

# 提取前N个关键词
N = 10
print(keywords_tfidf[:N])

textRAnk 提取关键词 

TextRank算法是一种轻量级、易于实现的关键词提取和文本摘要方法,可用与单篇文档关键词提取,主要根据句子间的关联性对词进行分割关键词提取。

jieba 库有实现封装好的,有这么几个参数:

topK=10 选择前几个关键词
withWeight=True 是否显示权重分数
allowPOS=('v') 限制关键词词性,值保留括号中的词性的词,默认为('ns', 'n', 'vn', 'v')
withFlag=True 为 true 那返回格式为 [pair(word1, weirght1),..] 列表
from jieba import analyse

text = '6月19日,《2012年度“中国爱心城市”公益活动新闻发布会》在京举行。' + \
       '中华社会救助基金会理事长许嘉璐到会讲话。基金会高级顾问朱发忠,全国老龄' + \
       '办副主任朱勇,民政部社会救助司助理巡视员周萍,中华社会救助基金会副理事长耿志远,' + \
       '重庆市民政局巡视员谭明政。晋江市人大常委会主任陈健倩,以及10余个省、市、自治区民政局' + \
       '领导及四十多家媒体参加了发布会。中华社会救助基金会秘书长时正新介绍本年度“中国爱心城' + \
       '市”公益活动将以“爱心城市宣传、孤老关爱救助项目及第二届中国爱心城市大会”为主要内容,重庆市' + \
       '、呼和浩特市、长沙市、太原市、蚌埠市、南昌市、汕头市、沧州市、晋江市及遵化市将会积极参加' + \
       '这一公益活动。中国雅虎副总编张银生和凤凰网城市频道总监赵耀分别以各自媒体优势介绍了活动' + \
       '的宣传方案。会上,中华社会救助基金会与“第二届中国爱心城市大会”承办方晋江市签约,许嘉璐理' + \
       '事长接受晋江市参与“百万孤老关爱行动”向国家重点扶贫地区捐赠的价值400万元的款物。晋江市人大' + \
       '常委会主任陈健倩介绍了大会的筹备情况。'
textrank = analyse.textrank
keywords = textrank(text, topK=10)
# 输出抽取出的关键词
print(keywords)

textrank = analyse.textrank
keywords = textrank(text)
# 输出抽取出的关键词
print(keywords)

textrank = analyse.textrank
keywords = textrank(text, topK=10, withWeight=True)
# 输出抽取出的关键词
print(keywords)

textrank = analyse.textrank
keywords = textrank(text, topK=10, withWeight=True, allowPOS=('v'))
# 输出抽取出的关键词
print(keywords)

textrank = analyse.textrank
keywords = textrank(text, topK=10, allowPOS=('v'), withFlag=True)
# 输出抽取出的关键词
print(keywords)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1505141.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaEE进阶(15)Spring原理:Bean的作用域、Bean的生命周期、Spring Boot自动配置(加载Bean、SpringBoot原理分析)

接上次博客:JavaEE进阶(14)Linux基本使用和程序部署(博客系统部署)-CSDN博客 目录 关于Bean的作用域 概念 Bean的作用域 Bean的生命周期 源码阅读 Spring Boot自动配置 Spring 加载Bean 问题描述 原因分析 …

【stm32】hal库学习笔记--定时器输出PWM波

【stm32】hal库学习笔记–定时器输出PWM波 PWM波原理 输出比较 输入捕获 驱动函数 定时器驱动函数 PWM波驱动函数 定时器基本不使用DMA方式 定时器中断处理通用函数 HAL_TIM_IRQHandler实验一:输出固定占空比PWM波 时钟树配置 PF9 改为tim14CH1 tim14配置 开启tim14全局中…

基础GamePlay知识-矩形碰撞检测

主要介绍AABB碰撞检测下,矩形该如何和矩形进行碰撞检测/和圆形进行碰撞检测。 直接看图,主要是比较两个矩形的边界线的前后关系。 效果 分析什么时候重合 分析什么时候不重合 完整代码 矩形身上挂载 public class Rectangle : MonoBehaviour {public …

MES数据采集设备

在智能制造日益盛行的今天,MES(制造执行系统)作为连接计划与生产现场的关键环节,其重要性不言而喻。而MES数据采集设备则是MES系统的核心组件,负责实时、准确地获取生产现场的各种数据,为企业的生产决策提供…

内存卡损坏打不开:数据恢复全攻略

在我们的日常生活中,内存卡作为一种常见的存储设备,广泛应用于手机、相机、平板电脑等电子设备中。然而,有时我们会遇到内存卡损坏打不开的问题,导致重要的照片、视频或文件无法读取。面对这种情况,我们该如何应对呢&a…

mac电脑总卡蓝屏是怎么回事,苹果电脑老卡蓝屏怎么办

电脑老卡蓝屏是比较常见的电脑故障之一,导致这一问题的出现很可能是电脑本身的硬件,或电脑上的驱动安装错误,没法运行,当然也不排除其他的一些因素。虽说电脑蓝屏是电脑几乎都会出现的小毛病,不足以致命,但…

短视频文案素材哪里找?推荐几个既好看又好用的素材网站

我们在做短视频的同时,一般需要一些视频,文案,图片,音频,来添加短视频的突出点,那么这些短视频文案去哪里找呢? 蛙学网 想要做出容易上热门的短视频文案,你一定要找到合适的短视频素材&#…

【个人开发】llama2部署实践(三)——python部署llama服务(基于GPU加速)

1.python环境准备 注:llama-cpp-python安装一定要带上前面的参数安装,如果仅用pip install装,启动服务时并没将模型加载到GPU里面。 # CMAKE_ARGS"-DLLAMA_METALon" FORCE_CMAKE1 pip install llama-cpp-python CMAKE_ARGS"…

【C语言】深入理解指针(进阶篇)

一、数组名的理解 数组名就是地址&#xff0c;而且是数组首元素的地址。 任务&#xff1a;运行以下代码&#xff0c;看数组名是否是地址。 #include <stdio.h> int main() {int arr[] { 1,2,3,4,5,6,7,8,9,0 };printf("&arr[0] %p\n", &arr[0]);pri…

PMP-项目管理十大知识领域学习和理解

项目管理十大知识领域&#xff1a; 整合、范围、进度、成本、 质量、资源、沟通、风险、采购、干系人 十大知识领域的理解 十大知识领域裁剪情况&#xff1a; 十大知识领域: 硬技能和软技能

flink 总结

flink 流式api checkpoint state 状态分类 Managed State 和 Raw State Managed State Flink 自己管理&#xff0c;支持多种数据结构 Raw State 用户自己管理&#xff0c; 只支持byte Managed Staste 分为 Keyed State 和 operator State Managed State 只能在Keyed Str…

沁恒CH32V307VCT6开发板记录---kalrry

沁恒CH32V307VCT6开发板记录---kalrry 一、官网申请开发板二、环境准备图一 一、官网申请开发板 1.沁恒官网 二、环境准备 1.数据手册&#xff1a;CH32V307DS0.PDF&#xff0c;CH32FV2x_V3xRM.PDF 2.CH32V307评估板说明及参考应用例程&#xff1a;CH32V307EVT_ZIP 3.集成开…

Ubuntu18.04 下使用 Pybind11实现 C++ 调用 Python 函数和类的示例

Pybind11 是一个轻量级的库&#xff0c;它提供了在 C 中无缝集成 Python 代码的能力。使用 Pybind11&#xff0c;你可以很容易地从 C 调用 Python 代码&#xff0c;反之亦然。下面我将通过一个简单的例子来展示如何在 Ubuntu 系统上使用 Pybind11 从 C 调用 Python 接口。 安装…

上位机图像处理和嵌入式模块部署(qmacvisual二维码识别)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 如果说条形码在商品上使用比较多的话&#xff0c;那么二维码识别是一个更加使用频繁的场合。为什么使用这样频繁&#xff0c;我想很多一部分原因来…

Java开发:对象间复制属性,方法归纳

在Java开发中&#xff0c;对象间复制属性是一项常见的任务&#xff0c;特别是在处理层&#xff08;如控制器层&#xff09;与服务层或数据传输对象&#xff08;DTOs&#xff09;之间的数据转换时。有多种方法可以实现User对象到UserDTO对象的属性复制&#xff0c;下面列举了几种…

Ubuntu 安装谷歌拼音输入法

一、Fcitx 安装 在Ubuntu 下&#xff0c;谷歌拼音输入法是基于Fcitx输入法的。所以&#xff0c;首先需要安装Fcitx。一般来说&#xff0c;Ubuntu最新版中都默认安装了Fcitx&#xff0c;但是为了确保一下&#xff0c;我们可以在系统终端中运行如下命令&#xff1a; sudo apt ins…

Matlab|【EI复现】电动汽车集群并网的分布式鲁棒优化调度模型

目录 1 内容简介 2 关键知识点 2.1 三类电动汽车模型 3 程序结果 4 下载链接 1 内容简介 电动汽车的数据模型种类繁多&#xff0c;但是用到比较高阶数学方法的并不多&#xff0c;本次分享的程序是下图所示的文章。 采用分布鲁棒优化模型&#xff0c;用到鲁棒对等转换&…

latex绘图中\begin{figure}[htbp]中的htbp什么意思

在LaTeX中&#xff0c;\begin{figure}[htbp] 用来开始一个图形环境&#xff0c;其中 [htbp] 是一个位置参数&#xff0c;用来指导LaTeX如何放置这个图形。 具体来说&#xff0c;[htbp] 中的每个字母代表一个放置选项&#xff1a; h&#xff1a;代表“here”&#xff0c;意味着…

vscode 配置 c 语言 问题解决

1.VS code调试时显示Unable to start debugging.The value of miDebuggerPath is invalid。 解决方法: VS code调试时显示Unable to start debugging.The value of miDebuggerPath is invalid_unable to start debugging. the value of midebugger-CSDN博客 2.VSCode运行C终端…

数据库系统原理实验报告1 | E-R图设计

整理自博主2021级专业课《数据库系统原理》自己完成的实验报告。 目录 一、实验目的 二、实验内容 1、某个学校有若干个系 2、某工厂生产若干产品 3、某学校的田径运动会中设置了各类比赛 4、自己调查一个需要提供开发数据库应用系统的单位 三、实验结果总结 四、实验结…