信息抽取--关键词提取

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

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) TFIDF(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算法数学细节;

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

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

相关文章

h5离线缓存

html5离线缓存1. 简介1.1 什么是离线缓存1.2 优点1.3 针对对象2. 实现方式2.1 使用3. window.applicationCache对象相关api3.1 属性3.2 事件3.3 方法1. 简介 1.1 什么是离线缓存 HTML5中引入了应用程序缓存,意味着Web应用可以进行数据缓存,并可以在没有…

3389爆破DUBrute_2.1

3389专业爆破 DUBrute_2.1.zip http://pan.baidu.com/s/1pJE0t5L转载于:https://www.cnblogs.com/lieyan/p/3859696.html

信息抽取--短语提取

(纯属为了记录自己学习的点滴过程,引用资料都附在参考列表) 1 基本概念 短语提取 在信息抽取领域,另一项重要的任务就是提取中文短语,也即固定多字词表达串的识别。短语提取经常用于搜索引擎的自动推荐,文…

ACM1598并查集方法

find the most comfortable road Problem DescriptionXX星有许多城市,城市之间通过一种奇怪的高速公路SARS(Super Air Roam Structure---超级空中漫游结构)进行交流,每条SARS都对行驶在上面的Flycar限制了固定的Speed,同时XX星人对…

h5 server send event(sse)

1. sse概述 概念: H5支持使用JS脚本不间断的访问服务器(推送)轮询: 页面使用js的定时器,定时发送请求查询最新数据 使用js将最新数据加载至页面 每发送一次数据,需要建立新的连接 时间间隔由客户端决定 优点:不需要刷新页面、实…

信息抽取--关键句提取

(纯属为了记录自己学习的点滴过程,引用资料都附在参考列表) 1 基本概念 关键句提取 在一些场合,关键词或关键短语依然显得碎片化,不足以表达完整的主题。这时通常提取中心句子作为文章的简短摘要。 2 问题 关键句提…

Netty 中 IOException: Connection reset by peer 与 java.nio.channels.ClosedChannelException: null

最近发现系统中出现了很多 IOException: Connection reset by peer 与 ClosedChannelException: null 深入看了看代码, 做了些测试, 发现 Connection reset 会在客户端不知道 channel 被关闭的情况下, 触发了 eventloop 的 unsafe.read() 操作抛出 而 ClosedChannelException 一…

注解方式实现aop

aop注解实现spring配置文件目标接口&#xff0c;目标实现类&#xff0c;切面类 注解写法使用spring-test测试spring配置文件 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmln…

文本聚类

&#xff08;纯属为了记录自己学习的点滴过程&#xff0c;引用资料都附在参考列表&#xff09; 1 基本概念 聚类(cluster analysis )指的是将给定对象的集合划分为不同子集的过程&#xff0c;目标是使得每个子集内部的元素尽量相似&#xff0c;不同子集间的元素尽量不相似。 …

sublime text3下BracketHighlighter的配置方法

st3的配置方法和st2是有区别的&#xff0c;所以网上搜索到的方法大多不能用&#xff0c;我google之后总结了一下。 一、 1、在st3中按preferences-->package settings-->Bracket highlighter-->Bracket settings-Default打开配置文件。 2、将配置文件信息全选复制一份…

利用spring注解创建bean

spring注解spring 原始注解1.1 Component注解1.2 Controller,Service,Repository同上1.3 注解方式依赖注入spring 新注解1. 用来解析配置类&#xff0c;利用配置类替代xml注解代替了xml的繁琐配置 spring 原始注解 1.1 Component注解 <!--spring 使用注解创建对象 compone…

文本分类--普通分类

1 基本概念 文本分类 文本分类&#xff08;text classification&#xff09;&#xff0c;指的是将一个文档归类到一个或多个类别的自然语言处理任务。文本分类的应用场景非常广泛&#xff0c;包括垃圾邮件过滤、自动打标等任何需要自动归档文本的场合。 文本分类在机器学习中属…

hdoj 2041 超级阶梯

代码&#xff1a; #include <stdio.h>int main(){int n;int i;int m;int count;int dp[50];while(scanf("%d",&n)!EOF){dp[1]1;dp[2]1;dp[3]2;while(n--){count0;scanf("%d",&m);for(i4; i<m; i){dp[i]dp[i-1]dp[i-2];}printf("%d\n…

文本分类--情感分析

&#xff08;纯属为了记录自己学习的点滴过程&#xff0c;引用资料都附在参考列表&#xff09; 1 基本概念 情感分析 对于情感分析而言&#xff0c;只需要准备标注了正负情感的大量文档&#xff0c;就能将其视作普通的文本分类任务来解决。此外&#xff0c;一些带有评分的电影…

websocket使用

websocket1. 概述2. websocket的用法3. js代码实现4. 服务器端代码实现maven下载地址&#xff1a;https://mvnrepository.com/artifact/org.java-websocket/Java-WebSocket 1. 概述 什么是websocket - WebSocket是一种网络传输协议&#xff0c; 可在单个TCP连接上进行全双工…

深度学习与自然语言处理

&#xff08;纯属为了记录自己学习的点滴过程&#xff0c;引用资料都附在参考列表&#xff09; 1 传统方法的局限 1.1 传统方法的套路 传统方法的处理流程简单来说就是&#xff1a;特征提取传统机器学习模型训练&#xff1b; 特征提取&#xff1a; 使用了特征模板、TF-IDF、…