-
关键词抽取
2018-07-11 20:44:24一、关键词抽取分类 关键词抽取算法可以分为两类 1.使用外部的知识库 (1).TF-IDF TF-IDF关键词提取算法就是需要保存每个词的IDF值作为外部知识库 (2).LDA模型 2.不适用外部知识库 (1).TextRank (2)....一、关键词抽取分类
关键词抽取算法可以分为两类
1.使用外部的知识库
(1).TF-IDF
TF-IDF关键词提取算法就是需要保存每个词的IDF值作为外部知识库
(2).LDA模型2.不适用外部知识库
(1).TextRank
(2).PageRank -
关键词抽取策略研究
2020-06-20 22:57:06针对传统关键词抽取方法统计特征单一,常用位置特征对文本写作结构有局限性的问题,提出了一种新的关键词抽取方法。该方法根据关键词在文中出现位置的分布特性,计算并提取出新的间距特征,更加适用于当下网络文本随意... -
NLP 关键词抽取
2020-07-23 17:59:48 -
python 关键词抽取工具
2020-11-05 15:49:58依任务需要,对多种关键词抽取工具进行比较,测试、调研。特此记录相关调用方法及最终评测结果。 1、jieba Github地址:https://github.com/fxsjy/jieba/ 安装:pip install jieba -i ...前言
依任务需要,对多种关键词抽取工具进行比较,测试、调研。特此记录相关调用方法及最终评测结果。
1、jieba
Github地址:https://github.com/fxsjy/jieba/
安装:pip install jieba -i https://pypi.douban.com/simple/
基于 TextRank 算法的关键词抽取
import jieba
def keyword_extraction(content): """TextRank关键词抽取""" keywords = jieba.analyse.textrank(content, topK=50, allowPOS=('n', 'v', 'vn')) return keywords
基于 TF-IDF 算法的关键词抽取
def keyword_tfidf(content): """tf-idf关键词抽取""" keywords = jieba.analyse.extract_tags(content, topK=50, allowPOS=('n', 'v', 'vn')) return keywords
参数说明:
- content:表示待提取文本
- topK:返回权重最大的关键词数,默认值为20
- withWeight:表示是否一并返回关键词权重值,默认值为False
- allowPOS:表示仅包括指定词性的词,默认值为空,即不筛选
2、hanlp
Github地址:https://github.com/hankcs/HanLP
安装:pip install pyhanlp -i https://pypi.douban.com/simple/
修改自定义词典方法:修改~\Anaconda3\Lib\site-packages\pyhanlp\static\data\dictionary\custom\ CustomDictionary.txt
路径下的文件from pyhanlp import *
def keyword_hanlp(content): """基于textrank算法""" keywords = HanLP.extractKeyword(content, 50) return keywords
3、snownlp
Github地址: https://github.com/isnowfy/snownlp
安装:pip install snownlp -i https://pypi.douban.com/simple/
from snownlp import SnowNLP
def keyword_snownlp(content): """textRank""" keywords = SnowNLP(content).keywords(50) return keywords
4、jiagu
Github地址:https://github.com/ownthink/Jiagu
安装:pip install -U jiagu -i https://pypi.douban.com/simple/
import jiagu
def keyword_jiagu(content): """基于BiLSTM""" keywords = jiagu.keywords(content, 50) return keywords
5、harvestText
Github地址:https://github.com/blmoistawinde/HarvestText
安装:pip install --upgrade harvesttext
from harvesttext import HarvestText ht = HarvestText()
def keyword_harvestText(content, method="tfidf"): if method == "tfidf": """调用jieba-tfidf方法""" keywords = ht.extract_keywords(content, 50, method="jieba_tfidf", allowPOS={'n', 'v', 'vn'}) elif method == "textrank": """基于networkx的textrank算法""" keywords = ht.extract_keywords(content, 50, method="textrank", allowPOS={'n', 'v', 'vn'})
6、SIFRank_zh
Github地址:https://github.com/sunyilgdx/SIFRank_zh
安装:下载GitHub源码调试,调试文件路径:~/SIFRank_zh-master/test/test.py"""基于预训练模型ELMo+句向量模型SIF""" keyphrases = SIFRank(content, SIF, zh_model, N=50, elmo_layers_weight=elmo_layers_weight) keyphrases_ = SIFRank_plus(content, SIF, zh_model, N=50, elmo_layers_weight=elmo_layers_weight)
7、macropodus
Github地址:https://github.com/yongzhuo/Macropodus
安装:python3.6下pip install macropodus -i https://pypi.douban.com/simple/
import macropodus
def keyword_macropodus(content): """基于Albert+BiLSTM+CRF""" keywords = macropodus.keyword(content) return keywords
结论
- jiagu和hanlp关键词抽取结果中包含字母、数字记忆单个字情况,且无法直接根据词性过滤掉人名和机构名。
- harvestText中引入了networkx的图与复杂网络分析算法,就测试效果而言与jieba-textrank不分伯仲。
- SIFRank做了关键词聚合(就是将几个距离比较近的关键词合为一个),在测试时发现这种合并会导致关键词不通顺,不可用。
- macropodus抽取关键词,不能设置额外参数,关键词抽取固定(改的话就得改源码了),而且有的文章抽不出关键词(很奇怪)。
- 最终试了一圈发现,还是jieba香!!!(也可能和自己处理的文本有关,大家可以自己亲自比较试试哈。)
-
Python 结巴分词实现关键词抽取分析
2020-09-21 03:04:57主要介绍了Python 结巴分词实现关键词抽取分析,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 -
Python 结巴分词实现关键词抽取分析.pdf
2020-11-22 21:50:32Python 结结巴巴分分词词实实现现关关键键词词抽抽取取分分析析 这篇文章主要介绍了Python 结巴分词实现关键词抽取分析小编觉得挺不错的现在分享给大家也给大家做个 参考一起 随小编过来看看吧 1 简介介 关键词抽取... -
论文研究-基于主题特征的关键词抽取.pdf
2019-07-22 20:40:53为了使抽取出的关键词更能...并将该特征与关键词抽取中的常用特征结合, 用装袋决策树方法构造一个关键词抽取模型。实验结果表明提出的主题特征可以提升关键词抽取的效果, 同时验证了装袋决策树在关键词抽取中的适用性。 -
关键词抽取模型
2019-03-04 17:10:21关键词抽取模型常见的算法有TF-IDF、TextRank等,本文仅在这里对这两种方法作原理的简单介绍。 1 TF-IDF算法 TF-IDF(term frequency-inverse document frequency) :一种用于资讯检索于资讯探勘的常用加权技术。是...关键词抽取模型常见的算法有TF-IDF、TextRank等,本文仅在这里对这两种方法作原理的简单介绍。
1 TF-IDF算法
TF-IDF(term frequency-inverse document frequency) :一种用于资讯检索于资讯探勘的常用加权技术。是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数呈正比地增加,但同时也会随着它在语料库中出现的频率呈反比地下降。
1.1 TF-IDF原理
主要思想:如果某个词或短语在一篇文章中出现的频率(Term Frequency,TF)高,并且在其他的文章出现得少,即反文档频率(Inverse Documnet Frequency,IDF)低,则认为此词或短语具有很好的类别区分能力,适合用来分类。
具体计算公式:
其中,
:指词i对文档j的重要程度;
:指词i在文档j中出现的次数占比。计算公式如:
其中,
指词i在文档j中出现的次数,
指文档j中所有词出现的次数之和;
:指词i的你文档频率,是指总文档数与词i所在文档数目之比,其计算公式如:
其中,
为文档总书目,
表示包含词
的文档数目。
1.2 实例及计算步骤
文档1:程序员从事程序开发、维护的专业人员。一般将程序员分为程序设计人员和程序编码人员,但两者的界限并不非常清楚,特别是在中国。软件从业人员分为初级程序员、高级程序员、系统程序员和项目经理四大类。
文档2:现在网络流行上把那程序员称为“程序猿”,女程序员称为“程序媛”。目前从事IT技术行业的大多数为男性,女性多数从事其他(如:会计、行政、人力资源等)种类的工作,在IT技术里女程序员是很受欢迎的,因此人们爱称女程序员为“程序媛”。
以上述两个文档,介绍TF-IDF的计算思路:
:对文档进行分词,将词语以空格分隔存储在一起,并对每一句话存储为一行;
:统计文档中词语出现的次数,可以以dict存储(如:{key:value}:{'程序员':5}),及文档的词语总数目;
:对指定词语i统计其出现在文档中的数目,可以以dict存储(如:程序员出现在文档1和文档2中,记为{'程序员':2});
:计算
,根据
的公式进行计算;
:计算
,根据公式计算。
1.3 TF-IDF优缺点
优点:TF-IDF的思想对于具有代表性的词语(词语出现在一类文档中,该词语具备代表性)能够很好地表示;
缺点:TF-IDF对于一些在文本中出现频率高但同样具有代表性的词语不能很好表示。例如:
1)鲜花多少钱?2)百合花多少钱?3)水仙花多少钱?4)苹果多少钱?5)橘子多少钱?
如果按照TF-IDF算法,对于5个文档,鲜花、百合花、水仙花、苹果、橘子这些主体词会成为关键词,但从语句的总体来看,它们又都属于询问价格的类型,所以“多少钱”应该成为关键词。
改进:基于TF-IDF的计算法提出的改进方法是,将多个短文本整理为一个文本,这样既可以增加TF值,又可以增加IDF值。
2 TextRank算法
TF-IDF对于多段文本的关键词提取非常有效,但是对于单篇或者文档分割较少的文本则表现的不是很好,下面介绍TextRank用于解决这一情况。
TextRank是一种基于图排序的算法。其基本思想来源于google的PageRank算法,通过把文本切分为若干组成单元(单词或者短语或者句子)并建立图模型(所谓这样的图模型,例如:今天阳光明媚,天清气爽,适合出游。所以今天去公园吧。这句话的图模型可以是:今天--阳光--明媚--天清气爽--适合--出游--所以--(折回前面的“今天”)--去--公园--吧),利用投票机制对文本中的重要程度成分进行排序(就前面的例子来说:“今天”的重要程度会比较高),仅利用单篇文档本身的信息即可实现关键词提取、做文摘。
2.1 TextRank原理
TextRank利用投票的原理,让每一个单词给它的邻居(也即窗口)投赞成票,票的权重取决于自己的票数。所以如上所述,它是一个图排序模型,我们假设每一个词是一个顶点(Vertex),那么所有的词就构成了一个网络,在这个网络里面每一个顶点会指向其他顶点的边,也会由其他顶点指向自己的边。通过计算每个顶点所连接的指向自己的顶点的权重和,最终得到该顶点的权重值。
初始值确定:因为目标的权重取决于自身的权重(通过计算每个顶点所连接的指向自己的顶点的权重和),所以这里的初始值为非0的值。
这里引入了阻尼系数的概念。在图模型中,该参数表示从某一个指定的顶点,到任意一个其他顶点的概率。所以TextRank具体公式如下:
其中,
:表示阻尼系数,一般设置为0.85(为经验值);
:表示图中的任一节点;
:表示指向顶点
的所有顶点集合;
:表示由顶点
连接出去的所有顶点集合;
:表示顶点
和
的连接权重;
:表示顶点
的最终排序权重。
2.2 实例及算法步骤
文档1:程序员从事程序开发、维护的专业人员。一般将程序员分为程序设计人员和程序编码人员,但两者的界限并不非常清楚,特别是在中国。软件从业人员分为初级程序员、高级程序员、系统程序员和项目经理四大类。
TextRank是一个图排序模型,因此我们需要构建一个图模型。如下是具体的思路步骤:
:对文本进行切分为字或词形式。
:对切分好的字或词构建图模型,也即构建一个字或词与字或词的连接矩阵;选择用滑动窗口的方式对每个单词取邻居:假设,我们取一个长度为k的滑动窗口,则
等都是一个窗口。在一个窗口中的任两个单词对应的节点之间存在一个无向无权的边;在这个邻居上面构成图,可以计算出每个单词节点的重要性。
:权重计算;1) 设定最大迭代次数,并依次进行逐步迭代;
2) 按照连出矩阵,对每一个单词节点更新其排序权重;
3) 对于连出到自身或者连出为空的单词节点不进行计算,因为这部分节点在图中属于孤立点,所以只要求保持其初始值即可;
4) 对于连出的其他词的单词节点,则按照TextRank公式,逐步更新其排序权重;
5) 同时根据前后两次迭代之间单词的权重变化值,来判断是否提前结束循环过程。
2.3 TextRank缺点
TextRank算法对于一段文本中多次出现的词,赋予更大的权重,因为它连出的节点会更多,所以当各个节点的初始权重一致的时候,则最终出现次数多的词权重会更大。这样会使类似于“的”、"你、我、他"等常用词,会出现比较大的误差,因为这些词一般没有什么特别的含义,仅仅是一个连接词或指代词。对于这种情况,可以在对文本进行切分时,去掉里面的停用词或其他符合一定规则的词语。
3 基于语义的统计语言模型
如:1)鲜花多少钱?2)百合花多少钱?3)水仙花多少钱?
在上述的3个语句中,如果希望提取的关键词更符合主题分布,那么应该是“鲜花”or“多少钱”。这里介绍LDA(Latent Dirichlet Allocation)的关键词提取算法。
其中,
1)
为主题k中的词汇概率分布,
为第m篇文档的主题概率分布,
和
服从Dirichlet分布,
和
作为多项式分布的参数分别用于生成主题和单词;
2)
和
分别为
和
的分布参数,
反映了文档集中隐含主题之间的相对强弱,
为所有隐含主题自身的概率分布;
3) K为主题数目;
4) M为文档集中文档数目;
5)
为第m篇文档的词的总数;
6)
和
分别为第m篇文档中第n个单词和其他隐含主题。
3.1 LDA原理
LDA模型中,包含词、主题、文档三层结构。该模型认为一篇文档的生成过程是:先挑选主题,再为每个主题挑选若干词语;最终由这些词语就组成了一篇文章。所以主题对于文章是服从多项分布的,同时单词对于主题也是服从多项分布。基于这样的理论,我们可以知道,如果一个单词w对于主题t非常重要,而主题t对于文章d有非常重要,那么单词w对于文章d就很重要,并在同主题的词
里面,单词w的权重也会较大。
根据上述,需要计算两个概率:单词对于主题的概率和主题对于文章的概率。我们这里采用Gibbs采样法来进行概率的计算。具体公式如下:
1)主题
下各个词
的权重计算公式:
其中
:表示单词集合中任一单词;
:表示主题集合中任一主题;
:表示在主题为k时,单词i出现的概率,简记为
;
:表示语料库中单词i被赋予主题k的次数;
:表示词汇表的大小;
:表示超参数;
2)文档
下各个词
的权重计算公式:
其中,
:表示文档集合中任一文档;
:表示主题集合中任一主题;
:表示在文档为m时,主题k出现的概率,简记为
;
:表示语料库中文档m中单词被赋予主题k的次数;
K:表示主题的数量;
:表示超参数;
3)指定文档下某主题出现的概率,以及制定主题下、某单词出现的概率计算:
基于上述公式,我们可以计算出单词i对于文档m的主题重要性。但是由于在LDA主题概率模型中,所有的词汇都会以一定的概率出现在每个主题,所以这样会导致最终计算的单词对于文档的主题重要性值区分度受影响。为避免这种情况,一般会将单词相对于主题概率小于一定阈值的概率置为0(也可根据实际情况设定).
3.2 LDA实现思路
LDA实现大致思路:1)对文本进行分词并去除非重要性词语,采用正向过滤的方法,即选定特定词性的词。
2)在得到候选表后,对语料库进行Gibbs采样,得到单词-主题,文档-主题的分布统计矩阵;
参考资料:《自然语言处理技术入门与实践》
-
cpp-THUCKE中文关键词抽取工具包
2019-08-16 05:44:10THUCKE(THU Chinese Keyphrase Extraction)由清华大学自然语言处理与社会人文计算实验室研制推出的中文关键词抽取工具包。 -
Web新闻关键词抽取与主题特征自动化构建研究
2020-01-16 03:17:10Web新闻关键词抽取与主题特征自动化构建研究,单艳雯,刘鲁,将词汇位置信息引入权重的计算过程,提出了基于位置重要性的Web新闻关键词抽取算法。进一步,将算法引入Web新闻主题特征构建框架中 -
中文文本关键词抽取的三种方法-python
2020-07-22 22:52:23目前,用于文本关键词提取的主要方法有四种:基于TF-IDF的关键词抽取、基于TextRank的关键词抽取、基于Word2Vec词聚类的关键词抽取,以及多种算法相融合的关键词抽取。笔者在使用前三种算法进行关键词抽取的学习过程... -
jieba分词关键词抽取
2019-10-08 11:45:47关键词抽取就是从文本里面把跟这篇文档意义最相关的一些词抽取出来。这个可以追溯到文献检索初期,当时还不支持全文搜索的时候,关键词就可以作为搜索这篇论文的词语。因此,目前依然可以在论文中看到关键词这一项。... -
使用 Node.js 对文本内容分词和关键词抽取
2020-10-19 19:04:13主要介绍了使用 Node.js 对文本内容分词和关键词抽取,需要的朋友可以参考下 -
关键词抽取——结巴分词
2018-03-05 15:06:311 简介关键词抽取就是从文本里面把跟这篇文档意义最相关的一些词抽取出来。这个可以追溯到文献检索初期,当时还不支持全文搜索的时候,关键词就可以作为搜索这篇论文的词语。因此,目前依然可以在论文中看到关键词这... -
结巴分词5--关键词抽取
2018-08-15 14:08:45有监督学习算法,将关键词抽取过程视为二分类问题,先抽取出候选词,然后对于每个候选词划定标签,要么是关键词,要么不是关键词,然后训练关键词抽取分类器。当新来一篇文档时,抽取出所有的候选词,然后利用训练好... -
jieba分词原理 ‖ 关键词抽取
2019-09-11 21:40:59jieba分词原理 ‖ 关键词抽取 1 简介 关键词抽取就是从文本里面把跟这篇文档意义最相关的一些词抽取出来。这个可以追溯到文献检索初期,当时还不支持全文搜索的时候,关键词就可以作为搜索这篇论文的词语。因此,... -
关键词抽取工具-THUtag 个人使用心得
2017-09-15 10:11:22THUTag是清华大学自然语言处理与社会人文计算实验室实现的,具有关键词抽取与社会标签推荐工具包,提供关键词抽取、社会标签推荐功能,包括TextRank、ExpandRank、Topical PageRank(TPR)、Tag-LDA、Word Trigger ... -
案例2: 文档关键词抽取没有提供python模块?
2020-12-01 18:20:22<div><p>貌似没有提供关键词抽取的python接口,在使用过程中关键词抽取速度快吗,好像python API目前不算很友好</p><p>该提问来源于开源项目:baidu/Familia</p></div> -
关键词抽取之TFIDF算法
2019-04-28 16:23:47原文作者:码农加油站 ...最近boss交代了一个任务,展示一个...以下小农同学要总结一下学习到的关键词抽取的算法之一TF-IDF算法。 一个容易想到的思路,就是找到出现次数最多的词。如果某个词很重要,它应该在这篇文章... -
关键词抽取与自动文摘
2017-01-26 10:42:59关键词抽取与自动文摘在自然语言处理中对于关键词抽取与自动文摘这两个主题,有着多种多样的方式去解决它们,这里将介绍一种叫做TextRank的方法,就可以解决这两个问题。我将结合具体的代码,试图将算法解释地更加... -
用java实现的关键词抽取算法
2011-07-01 13:12:12基于种子的一种关键词抽取算法,并用java实现 -
结巴分词关键词相似度_结巴分词5--关键词抽取
2020-12-30 16:27:141 简介关键词抽取就是从文本里面把跟这篇文档意义最相关的一些词抽取出来。这个可以追溯到文献检索初期,当时还不支持全文搜索的时候,关键词就可以作为搜索这篇论文的词语。因此,目前依然可以在论文中看到关键词这...
-
node爬取数据并解析写入文件
-
【数据分析-随到随学】量化交易策略模型
-
聊天室类PHP源码[无名轻聊]
-
2020年总结与展望.zip
-
微电子电路实验仿真代码
-
OpenGl 3.0 3.1
-
行业分类 职业分类 职务分类 单位性质。
-
微服务系列第七十一季-Introducing Spring Boot
-
16最接近的三数之和 21
-
2020-11-11ces
-
xomap0.9.1.0.rar
-
MTA软件连线使用说明书
-
Games102_lecture12几何建模与处理基础_曲面重建
-
c#编程最佳实践:使用Stringbuilder代替String, 少用format
-
Sublime Text 3.rar
-
soul源码阅读(四)Sofa RPC应用示例运行
-
JWT工具类
-
9000题库-上.iso
-
【2021】UI自动化测试框架(Selenium3)
-
shell 获取网卡IP地址 子网掩码 默认网关 广播地址