(纯属为了记录自己学习的点滴过程,引用资料都附在参考列表)

1 基本概念

什么是关键词(是什么)
大略的讲就是文章中重要的单词,而不限于词语的新鲜程度。
什么样的单词是重要的单词,恐怕这是个见仁见智的问题,所以可以根据用户需求,合理设计先验知识融进模型进行建模,本文讨论的是最易于理解、最常见的几种度量“重要”的方式,也可以理解为几种常见理解“关键词”的观点。

2 问题

提取一篇文章的关键词;

3 解决思路

3.1 词频统计

先验知识:一方面,关键词通常在文章中反复出现,为了解释关键词,作者通常会反复提及它们;另一方面,反复出现的词语不一定是关键词,根据齐夫定律,一些词频高的往往是标点符号和助词’的‘等,它们显然不是关键词。
算法:根据先验知识,算法模型如下:

  1. 分词;
  2. 停用词过滤;
  3. 按词频提取前n个;

缺点:用词频来提取关键词有一个缺陷,那就是高频词并不等价于关键词。比如在一个体育网站中,所有文章都是奥运会报道,导致“奥运会”词频最高,用户希望通过关键词看到每篇文章的特色。此时,TF-IDF 就派上用场了。

3.2 IF-IDF

先验知识:如果某个词在一篇文档中出现的频率高,并且在其它文档中很少出现,则认为这个词有很好的类别区分能力。

TF-IDF的数学表达
TF−IDF(t,d)=TF(t,d)DF(t)=TF(t,d)×IDF(t)TF-IDF(t,d) = \frac{TF(t, d)}{DF(t)} \\ =TF(t, d) \times IDF(t) TF−IDF(t,d)=DF(t)TF(t,d)​=TF(t,d)×IDF(t)
其中,t 代表单词,d 代表文档,TF(t,d) 代表 t 在 d 中出现频次,DF(t) 代表有多少篇文档包含 t。DF 的倒数称为IDF,这也是 TF-IDF 得名的由来,这个数学式子正式上面基本思想的刻画。

改进:TF-IDF在大型语料库上的统计类似于一种学习过程,假如我们没有这么大型的语料库或者存储IDF的内存,同时又想改善词频统计的效果该怎么办呢?此时可以使用TextRank算法。

3.3 TextRank

基本思想:TextRank是大名鼎鼎的PageRank算法在文本上的应用。
Google用它来体现网页的相关性和重要性,在搜索引擎优化操作中是经常被用来评估网页优化的成效因素之一。
即对于某个网页A而言,该网页PageRank值的计算基于以下两个假设:

  1. 数量假设,如果越多的网页指向A,即A的入链数量越多,则该网页越重要;
  2. 质量假设,如果指向A的网页质量越高,则A越重要,即权重因素不同。

(PageRank的数学细节参考李航《统计学习方法》);
将 PageRank 应用到关键词提取,无非是将单词视作节点而已,另外,每个单词的外链来自自身前后固定大小的窗口内的所有单词。

4 实现

4.1 基于词频统计

  • 这只是一个针对词频统计算法的演示性代码,也易于改成批处理的代码;
  • 词频统计属于单文档算法,就是根据一篇文章(不借助其它文章)就可以分析该文章的关键词;
# -*- coding:utf-8 -*-from pyhanlp import *TermFrequency = JClass('com.hankcs.hanlp.corpus.occurrence.TermFrequency')
TermFrequencyCounter = JClass('com.hankcs.hanlp.mining.word.TermFrequencyCounter')if __name__ == '__main__':counter = TermFrequencyCounter()counter.add("加油加油中国队!")  # 第一个文档counter.add("中国观众高呼加油中国")  # 第二个文档for termFrequency in counter:  # 遍历每个词与词频print("%s=%d" % (termFrequency.getTerm(), termFrequency.getFrequency()))print(counter.top(2))  # 取 top N#  根据词频提取关键词print(TermFrequencyCounter.getKeywordList("女排夺冠,观众欢呼女排女排女排!", 3))

运行结果:

中国=2
中国队=1
加油=3
观众=1
高呼=1
[加油=3, 中国=2]
[女排, 观众, 欢呼]

4.2 基于TF-IDF

  • TF-IDF是基于多文档的统计量,所以要输入多篇文档后才能开始计算;
  • 统计TF-IDF同样涉及分词和停用词过滤;
# -*- coding:utf-8 -*-from pyhanlp import *TfIdfCounter = JClass('com.hankcs.hanlp.mining.word.TfIdfCounter')if __name__ == '__main__':counter = TfIdfCounter()counter.add("《女排夺冠》", "女排北京奥运会夺冠")  # 输入多篇文档counter.add("《羽毛球男单》", "北京奥运会的羽毛球男单决赛")counter.add("《女排》", "中国队女排夺北京奥运会金牌重返巅峰,观众欢呼女排女排女排!")counter.compute()  # 输入完毕for id in counter.documents():print(id + " : " + counter.getKeywordsOf(id, 3).toString())  # 根据每篇文档的TF-IDF提取关键词# 根据语料库已有的IDF信息为语料库之外的新文档提取关键词print(counter.getKeywords("奥运会反兴奋剂", 2))

运行结果:

女排》 : [女排=5.150728289807123, 重返=1.6931471805599454, 巅峰=1.6931471805599454]
《女排夺冠》 : [夺冠=1.6931471805599454, 女排=1.2876820724517808, 奥运会=1.0]
《羽毛球男单》 : [决赛=1.6931471805599454, 羽毛球=1.6931471805599454, 男单=1.6931471805599454]
[反, 兴奋剂]

4.3 基于TextRank

  • 词频统计属于单文档算法;
from pyhanlp import *""" 关键词提取"""
content = (
"程序员(英文Programmer)是从事程序开发、维护的专业人员。"
"一般将程序员分为程序设计人员和程序编码人员,"
"但两者的界限并不非常清楚,特别是在中国。"
"软件从业人员分为初级程序员、高级程序员、系统"
"分析员和项目经理四大类。")TextRankKeyword = JClass("com.hankcs.hanlp.summary.TextRankKeyword")
keyword_list = HanLP.extractKeyword(content, 5)
print(keyword_list)

运行结果:

 [程序员, 程序, 分为, 人员, 软件]

5 参考文献

  1. https://www.jianshu.com/p/f6d66ab97332 《PageRank算法核心思想及数学支撑》;
  2. 何晗《自然语言处理入门》;
  3. 宗成庆《统计自然语言处理》;
  4. 李航《统计学习方法》;

6 需要解决的问题

  1. PageRank算法数学细节;

信息抽取--关键词提取相关推荐

  1. 信息抽取--新词提取

    (纯属为了记录自己学习的点滴过程,引用资料都附在参考列表) 1 基本概念 什么是新词(是什么) 新词是一个相对的概念,每个人的标准都不一样,所以我们这里定义: 词典之外的词语(OOV)称作新词. 为什 ...

  2. tfidf关键词提取_基于深度学习的个性化商品评论标签提取

    商品评论标签提取作为商品评论中的一个比较有意思的问题.评论标签提取的主要任务是从评论中了解到用户对产品的哪些功能.属性进行了怎样的评论,并抽取成简短有效的信息. 关键词提取Vs评论标签提取 商品标签提 ...

  3. python提取关键词分类_用Py做文本分析5:关键词提取

    1.关键词提取 关键词指的是原始文档的和核心信息,关键词提取在文本聚类.分类.自动摘要等领域中有着重要的作用. 针对一篇语段,在不加人工干预的情况下提取出其关键词 首先进行分词处理 关键词分配:事先给 ...

  4. 《自然语言处理实战入门》 信息抽取 ---- 信息抽取初探

    文章目录 基本介绍 一.传统信息抽取 关键词抽取 TF-IDF TextRank 关键句子抽取 二.深度学习信息抽取 总结 参考文档 基本介绍 信息抽取 (Information Extraction ...

  5. 揭开知识库问答KB-QA的面纱3·信息抽取篇

    内容速览 你是如何通过知识库回答问题的 如何确定候选答案 如何对问题进行信息抽取 如何筛选候选答案 论文实验与总结 本期我们将介绍KB-QA传统方法之一的信息抽取(Information Extrac ...

  6. KB-QA:如何对问题进行信息抽取?

    向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程   公众号:datayx 内容速览 你是如何通过知识库回答问题的 如何确定候选答案 如何对问题进行信息抽取 如何筛选候选 ...

  7. python关键词提取源码_Python 结巴分词 关键词抽取分析

    关键词抽取就是从文本里面把跟这篇文档意义最相关的一些词抽取出来.这个可以追溯到文献检索初期,当时还不支持全文搜索的时候,关键词就可以作为搜索这篇论文的词语.因此,目前依然可以在论文中看到关键词这一项. ...

  8. python医疗发票 信息抽取_PYTHON网络爬虫与信息提取[信息的组织与提取](单元五)...

    1 三种信息类型的简介 xml : extensible markup language 与html非常相似 现有html后有xml xml是html发展来的 扩展 通用 json  类型 javas ...

  9. 关于NLP相关技术全部在这里:预训练模型、图神经网络、模型压缩、知识图谱、信息抽取、序列模型、深度学习、语法分析、文本处理...

    NLP近几年非常火,且发展特别快.像BERT.GPT-3.图神经网络.知识图谱等技术应运而生. 我们正处在信息爆炸的时代.面对每天铺天盖地的网络资源和论文.很多时候我们面临的问题并不是缺资源,而是找准 ...

最新文章

  1. OPPO A59s手机系统时间停止运行
  2. SQL编程题-----1
  3. Android 项目在Eclipse中的目录结构
  4. mysql 复制方式_MySQL复制方法
  5. 阿里数加大数据平台发布,将培养5万大数据科学家
  6. 【干货】推荐系统的商业价值:如何量化?怎么提升?
  7. 从入门到入土:机器学习part01|python|代码分析|初步学习
  8. 内存不能为read故障分析
  9. Windows XP sp3上可以安装SQL Server 2008企业版?
  10. 小波同态滤波 matlab,matlab同态滤波程序
  11. 不需要mysql的php博客_几款免费的不用数据库的php的cms
  12. linux系统管理员用户名为admin,Linux创建系统管理员用户
  13. 公司英文名称及部门大全
  14. 学习Linux/Unix这么久了,你真的知道什么是终端吗?
  15. 苹果将于18日举行新品发布会
  16. 自建游戏加速器教程(国内玩家联机)
  17. 要在某一房间中两台计算机之间,关于局域网、广域网和互联网的组建和因特网的接入,回答下列问题。要在某一房间中两台计算机之间实现网络通信,下列方法不可行的是...
  18. DAY19-20 PX4入坑成功
  19. PPP链路IPCP动态协商获取IP地址抓包分析(比细狗还细)
  20. OCR表格识别—企业应用的技术新秀

热门文章

  1. 前端学习(1168):构造函数方法(转换为真正数组)
  2. 前端学习(175):弹窗
  3. CubeMx 生成的FreeRTOS 代码在ARM compiler6 编译__forceinline 报错的解决方法
  4. linux6添加chkconfig管理,10、14 Linux系统服务管理工具-chkconfig
  5. Linux与C++11多线程编程(学习笔记)
  6. 计算机专业自然辩证法期末论文,清华大学自然辩证法-期末论文.docx
  7. html5 支持音频格式,html5中audio支持音频格式
  8. Apache Curator之分布式锁原理(二)
  9. C++11: final与override
  10. 【卡法电子商务】-常用手机屏幕尺寸 ★★★★★