(这部分,因为自己的知识不足,实在是没有看得太懂,无奈强迫症,求一个完整,所以还是写出来了!)
下面我们在来讲关键词提取,其实关键词提取可以当作获取特征的一种方式。具体获得关键词的方式有很多种,我们依次介绍一下:
1 基于特征统计
- 词频:一般来说,一个词在文本中出现次数越多,表明作者越想表达这个词,因此可以通过对词频的简单统计便可以评估出词语的重要性。
- TF-IDF(term frequency–inverse document frequency):综合考虑了词在文本中的词频以及普遍重要性,直观地说,一个词在其它文本中出现越少,在本文本中出现越多,那么对此文本的重要性越强。
- 位置特征(开头或结束)
- 词跨度:指的是一个词在文本中首次与末次出现的距离(跨度越大,一般越重要)
- 词的固有属性:包括一系列特征,词长、词性、对应的句法成分、开头大小写、是否全部大小写、词缀等。
2 基于主题模型
关于LDA主题模型的核心假设是,存在隐含变量,即文本主题,决定了文本中词汇的出现情况。它假设语料库中蕴含了多个主题,而每个主题下面对应了一系列的词语。当作者在书写某篇文章时,是先设定某个主题再从中选择某个词的过程。
在具体运算中,首先需要指定主题的数目,一般需要根据实验结果多次调节,主题模型根据文本中词的出现频率情况即词袋模型去学习两类概率分布。每个主题下概率较大的词汇可认为是关键词。
假设有M篇文章,K个主题,N个单词,那我们所求的是:
• 文档-主题分布:M个维度为K的多项式分布
• 主题-单词分布:K个维度为N的多项式分布
3.基于图模型
基于图提取关键词的一大重要算法便是TextRank,这种算法是源自于谷歌搜索的核心算法PageRank.
TextRank的思想是由PageRank起源的,PageRank,网页排名,Google用 它来体现网页的相关性和重要性,在搜索引擎优化操作中是经常被用来评估网页优化的成效因素之一。如果一个网页被很多其他网页链接到,说明这个网页比较重要,也就是PageRank值会相对较高。如果一个PageRank值很高的网页链接到一个其他的网页,那么被链接到的网页的PageRank值会相应地因此而提高。
TextRank是PageRank在文本上的应用,核心思想如下:
• 如果一个单词出现在很多单词边上,说明这个单词比较重要。
• 一个TextRank值很高的单词边上的单词,TextRank值会相应地因此而提高。
在我们应用的时候,可以用半径为2进行边的构造,如下所示:
这种做法就天然的认为距离越近的单词关系越大,但是实际情况中并不全是这样的,可能两个相似度很高的单词在一个句子中距离较远(例如两个人名),这里我们可以用依存句法分析进行优化,改善连接关系:
最后以书上的一个小案例来实现以下关键词的抽取。
from jieba import analyse
#引入TextRank关键词抽取接口
textrank = analyse.textrank
#文本
text = "度:节点的度是指和该节点相关联的边的条数,又称关联度,表明了节点的影响能力。\
特别地,对于有向图,节点的的度又分为入度和出度,\
分别表示指向该节点的边的条数和从该节点出发的边的条数。这就好比越是重要城市,\
与周边城市的铁路连接率越高。\
接近中心性:每个结点到其它结点的最短路的平均长度。\
对于一个结点而言,它距离其它结点越近,那么它的中心度越高。\
比如一个城市的中心地带往往是出行方便,离各个公共设施比较近的。"
#对文本进行TextRank算法处理
keywords = textrank(text)
#按重要性输出抽取出的关键词
print("\nkeywords by textrank:")
for keyword in keywords:
print(keyword)
结果如下:
keywords by textrank:
节点
结点
条数
中心
中心地带
城市
表明
分为
关联度
铁路
连接
周边城市
短路
比如
影响
又称
距离
出度
入度
好比