csdn博客推荐系统实战-6关键词提取-TF-IDF,TEXTRANK

2023-11-07 01:20

本文主要是介绍csdn博客推荐系统实战-6关键词提取-TF-IDF,TEXTRANK,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前面几篇写了相似度计算和话题模型,都是怎么找到相似的文章。2篇文章用各种方法向量化,然后余弦计算相似度,或者同在一个话题的2篇文章,把一整篇文章切成很多很多的词,有的模型或算法还要尽量在词多的情况下计算才准确。

人类有归纳总结的能力,看了一篇英超曼城对曼联比赛的报道,会总结几个出几个关键词,英超 曼联 曼城 得比,看了关键词就能知道这篇文章大概的内容,如果机器也能做到,那该多好啊!!!能,当然能,就是今天要介绍的关键词提取

关键词提取就是从文本里面把跟这篇文档意义最相关的一些词抽取出来。在文献检索领域,依然可以在论文中看到关键词这一项。
关键词还可以在文本聚类、分类、自动摘要等领域中有着重要的作用。比如在聚类时将关键词相似的几篇文档看成一个团簇,可以大大提高聚类算法的收敛速度;从某天所有的新闻中提取出这些新闻的关键词,就可以大致了解那天发生了什么事情;或者将某段时间内几个人的微博拼成一篇长文本,然后抽取关键词就可以知道他们主要在讨论什么话题。
算法上分为2种,有监督和无监督,有监督算法需要标注数据,人工成本很大,今天我主要说的是无监督算法。
无监督提取关键词算法有很多,今天讲TF-IDF,TEXTRANK提取关键词。

TF-IDF

前面我介绍过TF-IDF模型,怎么提取关键词呢?取整篇文章切词后TF-IDF值最高的N个词做为这篇文章的关键词!很简单吧,就是这么简单!。

1. 预处理,首先进行分词和词性标注,去掉停用词,将满足指定词性的词作为候选词;
2. 分别计算每个词的TF-IDF值;
3. 根据每个词的TF-IDF值降序排列,并输出指定个数的词汇作为可能的关键词;

TextRank

TextRank算法是由google的PageRank算法转化而来的。PR(PageRank简称,下同)算法简单点说2句话,一个网页被很多网页链接时,排名就好;排名高的网页权重更高一个网页的排名是由链接这个网页的数量及质量(排名的高低)决定的

PR公式


TextRank公式

TextRank中没有链接的概念,用窗口来代替链接的概念,窗口就是词距,一般取5,表示与某个词的词距不大于5的集合。

TF-IDF和TextRank算法原理都不难,也有很多实现,我这次主要用jieba来实现这2种算法。

代码见https://github.com/worry1613/csdn-blog-recommend/blob/master/code/keyword.py ,jupyter上也有,在jupyter目录下。我说一下最后的结论吧:
1.和文章作者人工写的标签相比,不管是TF-IDF,还是TEXTRANK提取关键词的效果都不好,达到我个人认为还行的标准的比例也就在10%左右,100篇也就有10篇左右用算法提取的关键词还行,如果是100W篇的话,能不能达到10%还未知。
2.算法提取的关键词中,有很少的词有意义,剩下的几个大部分都无意义。
3.英文词,甚至代码中的关键词被提取出来。

下面我取出了其中的一小部分,用户标签|| TF-IDF标签 || TEXTRANK标签。

internet  产品  apple  blackberry  nokia  服务器  ||PC Internet 2003 PDA Apple Intel 产品 iPod||市场 产品 领域 技术 应用 没有 设备 计算
读书  出版  教育  设计模式  语言  java  ||教材 书籍 教学 技术 课堂 学生 教科书 习题||教材 技术 书籍 学生 教学 方法 知识 市场
report  ||设置 LaTeX 0pt fancyhead renewcommand 页眉 字号 1ex||设置 显示 缩进 页脚 包来 纸张 习惯 字号
工作  企业应用  算法  申诉  微软  浏览器  ||项目 软件 队伍 领导 油田 分数 系统 考核||项目 队伍 领导 软件 油田 系统 企业 公司
腾讯  创业  qq  互联网  网络  游戏  ||腾讯 QQ OICQ MIH 移动梦网 马化腾 SP 服务||服务 业务 互联网 用户 注册 收入 移动梦网 游戏
医疗  服务器  技术人  网络  产品  internet  ||医院 信息系统 服务器 信息化 建设 医疗 系统 PC||医院 信息系统 系统 建设 信息化 医疗 服务器 网络
华为  工作  生活  报表  数据库  制造  ||干部 改进 流程 批判 自我 人均 管理 一定||干部 公司 管理 不能 流程 批判 改进 没有
创业  工作  生活  融资  平台  ||创业 软件产业 软件 软件业 几百万 成功 不是 一个||创业 软件 发展 过程 速度 产业 收入 政策
java  j2me  嵌入式  平台  j2se  linux  ||Java com http 嵌入式 java 程序 类别 sun||程序 平台 类别 执行 函式 装置 审核 预先
工作  审查  体育  招聘  活动  ||工作 职员 待遇 老板 了解 简历 能力 变动||工作 能力 实际 公司 没有 可能 变动 获得
constructor  os  class  c++  reference  library  ||Complex operator real imaginary const return ostream os||应该 函数 风格 成员 操作 内容 说明 翻译
function  class  iostream  string  struct  dependencies  ||include std class ostream 头文件 list private public||头文件 需要 代码 使用 程序 函数 成员 类型
c++  microsoft  游戏  语言  borland  pascal  ||50 C++ Kingofark PV Learning Points View kingofark||编程 观点 学习 简称
汇编  c++  语言  工作  c  ||kingofark 五评 推荐 学过 com impossible 一点点 本文||推荐 团体 技术 条款 初学者 个人 喜爱 学院
asp.net  web服务  button  textbox  asp  脚本编程语言  ||控件 Greeter Web NET aspx 页面 ASP Button||控件 页面 服务器端 生成 应用程序 文件 验证 数据
设计模式  java  出版  uml  读书  工具  ||乐趣 模式 读者 这本 设计模式 或许 入门 2003||模式 读者 设计模式 教材 作品 入门 没有 标题
applet  java  jdk  程序开发  网络  sun  ||保护 许可 线程 应用程序 一个 调用 系统 访问||保护 系统 访问 应用程序 线程 调用 可能 方法
url  applet  solaris  windows  java  扩展  ||java 许可 security FilePermission 文件 com home 策略||文件 策略 代码 属性 指定 密钥 入口 系统
classloader  applet  java  jdk  虚拟机  语言  ||装载 一个 Java 授权 子类 类时 AppletClassLoader 虚拟机||授权 使用 创建 可能 原始 提供 用户 运行
工具  jdk  java  applet  solaris  windows  ||storetype keystore 管理器 security Djava keytool storepass SecurityManager||工具 策略 使用 文件 管理器 证书 调用 用户
algorithm  算法  object  java  存储  string  ||GuardedObject 签字 Guard 对象 线程 访问控制 一个 SignedObject||对象 签字 线程 访问控制 消费者 方法 资源 获得
applet  jar  jdk  文档  java  加密  ||签字 子域 许可 一个 代码 密钥 com JAR||签字 使用 子域 保护 代码 概念 资源 认证
编程  语言  加密  工作  产品  c  ||程序员 程序 修养 编程 函数 我要 语句 一个||程序员 程序 修养 函数 进行 语句 编程 没有
语言  pascal  fortran  unix  scheme  c++  ||GDB 调试 language 命令 set 程序 Use 函数||命令 调试 程序 语言 函数 环境 执行 功能
就这样了?还能再提高一些成功率吗?我个人认为还是有可能的,那怎么做呢?

1.专业领域要有专业的关键词表,这样就不会把专业词分成几个普通词了。
2.停用词,太重要了,必须下功夫好好整理整理。
3.预处理太重要了,文章内包括有代码的,是不是要把代码分离出去,有英文翻译的,是不是要把英文分离出去,要保证语料库的质量,质量,质量!!!!

当然,提取关键词还有很多其它的算法,可以试试其它算法,或者是其它算法和以上2种算法的混合。
今天2种算法的测试都不成功,等以后有时间了,我再做更深一步的测试。

这篇关于csdn博客推荐系统实战-6关键词提取-TF-IDF,TEXTRANK的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/360298

相关文章

PowerShell中15个提升运维效率关键命令实战指南

《PowerShell中15个提升运维效率关键命令实战指南》作为网络安全专业人员的必备技能,PowerShell在系统管理、日志分析、威胁检测和自动化响应方面展现出强大能力,下面我们就来看看15个提升... 目录一、PowerShell在网络安全中的战略价值二、网络安全关键场景命令实战1. 系统安全基线核查

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

《Knife4j+Axios+Redis前后端分离架构下的API管理与会话方案(最新推荐)》本文主要介绍了Swagger与Knife4j的配置要点、前后端对接方法以及分布式Session实现原理,... 目录一、Swagger 与 Knife4j 的深度理解及配置要点Knife4j 配置关键要点1.Spri

Qt QCustomPlot库简介(最新推荐)

《QtQCustomPlot库简介(最新推荐)》QCustomPlot是一款基于Qt的高性能C++绘图库,专为二维数据可视化设计,它具有轻量级、实时处理百万级数据和多图层支持等特点,适用于科学计算、... 目录核心特性概览核心组件解析1.绘图核心 (QCustomPlot类)2.数据容器 (QCPDataC

Java内存分配与JVM参数详解(推荐)

《Java内存分配与JVM参数详解(推荐)》本文详解JVM内存结构与参数调整,涵盖堆分代、元空间、GC选择及优化策略,帮助开发者提升性能、避免内存泄漏,本文给大家介绍Java内存分配与JVM参数详解,... 目录引言JVM内存结构JVM参数概述堆内存分配年轻代与老年代调整堆内存大小调整年轻代与老年代比例元空

深度解析Java DTO(最新推荐)

《深度解析JavaDTO(最新推荐)》DTO(DataTransferObject)是一种用于在不同层(如Controller层、Service层)之间传输数据的对象设计模式,其核心目的是封装数据,... 目录一、什么是DTO?DTO的核心特点:二、为什么需要DTO?(对比Entity)三、实际应用场景解析

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

Go语言中nil判断的注意事项(最新推荐)

《Go语言中nil判断的注意事项(最新推荐)》本文给大家介绍Go语言中nil判断的注意事项,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.接口变量的特殊行为2.nil的合法类型3.nil值的实用行为4.自定义类型与nil5.反射判断nil6.函数返回的

Java MQTT实战应用

《JavaMQTT实战应用》本文详解MQTT协议,涵盖其发布/订阅机制、低功耗高效特性、三种服务质量等级(QoS0/1/2),以及客户端、代理、主题的核心概念,最后提供Linux部署教程、Sprin... 目录一、MQTT协议二、MQTT优点三、三种服务质量等级四、客户端、代理、主题1. 客户端(Clien

在Spring Boot中集成RabbitMQ的实战记录

《在SpringBoot中集成RabbitMQ的实战记录》本文介绍SpringBoot集成RabbitMQ的步骤,涵盖配置连接、消息发送与接收,并对比两种定义Exchange与队列的方式:手动声明(... 目录前言准备工作1. 安装 RabbitMQ2. 消息发送者(Producer)配置1. 创建 Spr

深度解析Spring Boot拦截器Interceptor与过滤器Filter的区别与实战指南

《深度解析SpringBoot拦截器Interceptor与过滤器Filter的区别与实战指南》本文深度解析SpringBoot中拦截器与过滤器的区别,涵盖执行顺序、依赖关系、异常处理等核心差异,并... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现