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

news/2024/7/20 14:59:32 标签: tf-idf, 人工智能

目录

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.niftyadmin.cn/n/5419187.html

相关文章

Docker完整版(一)

Docker完整版(一) 一、Docker概述1.1、Docker简介1.2、Docker的用途1.3、容器与虚拟机的区别1.4、Docker系统架构1.5、Docker仓库 二、Docker引擎2.1、Docker引擎架构2.2、Docker引擎分类2.3、Docker引擎的安装2.4、Docker镜像加速器 三、Docker镜像3.1、…

windows cmake简单使用

下载mingw,可以直接去github下载最新版本下载cmake,去官网下在Windows设定mingw和cmake的环境变量(一般是.exe所在的目录,像mingw在bin文件夹,其他博客说得很详细了,这里不写了)在源文件同级目录…

python基础总复习

Python基础班总复习 一、Python基础语法 1、注释概念 单行注释 # 多行注释 注释内容 ,支持换行 > 在实际工作中,主要用于实现函数说明文档 2、变量的概念 场景:保存数据,所以理论上有数据的地方都有变量! 变…

rust开发100问?

Rust如何管理内存?Rust的所有权是什么?生命周期在Rust中如何工作?什么是借用在Rust中?如何在Rust中创建枚举类型?Rust中的trait是什么?如何定义并实现一个结构体(struct)的方法&…

【STM32】STM32F4中USART的使用方法和Printf的重定义(基于CubeMX和Keil)

文章目录 一、前言二、STM32CubeMX生成代码2.1 选择芯片2.2 配置相关模式2.3 生成代码 三、Keil重定义Printf3.1 勾选“UseMicroLIB”3.2 添加头文件和修改fputc和fgetc 四、测试Printf的效果4.1 字符串测试4.2 格式化输出测试 五、存在问题的解决方法5.1 检查串口号是否一致5.…

Java学习笔记NO.18

T1.理工超市 &#xff08;1&#xff09;题目描述 编写一个程序&#xff0c;设计理工超市功能菜单并完成注册和登录功能的实现。显示完菜单后&#xff0c;提示用户输入菜单项序号。当用户输入<注册>和<登录>菜单序号时模拟完成注册和登录功能&#xff0c;最后提示…

14 FIFO IP核

FIFO IP 简介 FIFO&#xff08;First In First Out&#xff0c;即先入先出&#xff09;是一种数据缓存器&#xff0c;用来实现数据先入先出的读写方式。FIFO由 RAM 加读写控制逻辑构成&#xff0c;其与普通 RAM 的区别在于 FIFO 没有外部读写地址线&#xff0c;使用起来非常简…

springboot不太常用注解

1.ConditionalOnProperty 该注解主要是根据配置文件的布尔值来判断是否加载该类。 相关链接文件&#xff1a; SpringBoot教程(7) ConditionalOnProperty 详细讲解和示例-CSDN博客 2.