关键词提取就是从文本里面把跟这篇文章意义最相关的一些词语抽取出来,在文献检索、自动文摘、文本聚类/分类等方面有着重要的应用。
关键词提取算法一般分为有监督和无监督两类
有监督的关键词提取方法主要是通过分类的方式进行,通过构建一个较为丰富和完善的词表,然后判断每个文档与词表中每个词的匹配程度,以类似打标签的方式,达到关键词提取的效果。优点是精度较高,缺点是需要大批量的标注数据,人工成本过高,并且词表需要及时维护。
相比较而言,无监督的方法对数据的要求低,既不需要一张人工生成,维护的词表,也不需要人工标注语料辅助训练。目前比较常用的关键词提取算法都是基于无监督算法。如TF-IDF算法,TextRank算法和主题模型算法(包括LSA,LSI,LDA等)
1.TF-IDF算法
TF-IDF是一种数值统计方法,用于反映一个词对于预料中某篇文档的重要性,它的主要思想为:如果某个词在一篇文档中出现的频率高,即TF高;并且在其他文档中很少出现,即IDF高,则认为这个词具有很好的类别区分能力。
TF为词频,表示词t在文档d中出现的频率:tf(word)= (word在文档中出现的次数)/ (文档总词数)
IDF常用的计算公式如下:|D|为文档集中的总文档数,为文档中出现词i的文档数量。分母加1是采用了拉普拉斯平滑,避免有部分新的词没有在语料库中出现过从而导致分母为零的情况。
2.TextRank算法
此种算法的一个重要特点是可以脱离语料库的背景,仅对单篇文档进行分析就可以提取该文档的关键词。基本思想来源于Google的PageRank算法。这种算法是1997年,Google创始人拉里.佩奇和谢尔盖.布林在构建早期的搜索系统原型时提出的一种链接分析算法,基本思想有两条:
1)链接数量。一个网页被越多的其他网页链接,说明这个网页越重要
2)链接质量。一个网页被一个越高权值的网页链接,也能表明这个网页越重要
TextRank 用于关键词提取的算法如下:
(1)把给定的文本 T 按照完整句子进行分割,即:
(2)对于每个句子,进行分词和词性标注处理,并过滤掉停用词,只保留指定词性的单词,如名词、动词、形容词,其中
ti,j 是保留后的候选关键词。
(3)构建候选关键词图 G = (V,E),其中 V 为节点集,由(2)生成的候选关键词组成,然后采用共现关系(Co-Occurrence)构造任两点之间的边,两个节点之间存在边仅当它们对应的词汇在长度为 K 的窗口中共现,K 表示窗口大小,即最多共现 K 个单词。
(4)根据 TextRank 的公式,迭代传播各节点的权重,直至收敛。
(5)对节点权重进行倒序排序,从而得到最重要的 T 个单词,作为候选关键词。
(6)由(5)得到最重要的 T 个单词,在原始文本中进行标记,若形成相邻词组,则组合成多词关键词。
下面主要通过jieba包里的analyse函数实现这两种关键词提取算法:
1
2
3
4
5
6
7
8
9
10 1
2jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())
3sentence:待提取的文本语料
4
5topK:返回 TF/IDF 权重最大的关键词个数,默认值为 20
6
7withWeight:是否需要返回关键词权重值,默认值为 False
8
9allowPOS:仅包括指定词性的词,默认值为空,即不筛选
10
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 1#简易版
2from jieba import analyse
3
4tfidf = analyse.extract_tags
5#加载停用词
6analyse.set_stop_words('stopword.txt')
7text = '6月19日,《2012年度“中国爱心城市”公益活动新闻发布会》在京举行。' + \
8 '中华社会救助基金会理事长许嘉璐到会讲话。基金会高级顾问朱发忠,全国老龄' + \
9 '办副主任朱勇,民政部社会救助司助理巡视员周萍,中华社会救助基金会副理事长耿志远,' + \
10 '重庆市民政局巡视员谭明政。晋江市人大常委会主任陈健倩,以及10余个省、市、自治区民政局' + \
11 '领导及四十多家媒体参加了发布会。中华社会救助基金会秘书长时正新介绍本年度“中国爱心城' + \
12 '市”公益活动将以“爱心城市宣传、孤老关爱救助项目及第二届中国爱心城市大会”为主要内容,重庆市' + \
13 '、呼和浩特市、长沙市、太原市、蚌埠市、南昌市、汕头市、沧州市、晋江市及遵化市将会积极参加' + \
14 '这一公益活动。中国雅虎副总编张银生和凤凰网城市频道总监赵耀分别以各自媒体优势介绍了活动' + \
15 '的宣传方案。会上,中华社会救助基金会与“第二届中国爱心城市大会”承办方晋江市签约,许嘉璐理' + \
16 '事长接受晋江市参与“百万孤老关爱行动”向国家重点扶贫地区捐赠的价值400万元的款物。晋江市人大' + \
17 '常委会主任陈健倩介绍了大会的筹备情况。'
18keywords = tfidf(text, topK=10, withWeight=False, allowPOS=())
19print('结果为:')
20print([keyword for keyword in keywords])
21
22结果为:
23['晋江市', '救助', '爱心', '基金会', '公益活动', '城市', '中华', '许嘉璐', '陈健倩', '孤老']
24
下面是函数版本:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 1from jieba import analyse
2
3def textrank_extract(text,keyword_num=10):
4 textrank = analyse.textrank
5 analyse.set_stop_words('stopword.txt')
6 keywords = textrank(text, keyword_num)
7 # 输出抽取出的关键词
8 for keyword in keywords:
9 print(keyword + "/ ", end='')
10 print()
11
12def tfidf_extract(text,keyword_num=10):
13 tfidf = analyse.extract_tags
14 analyse.set_stop_words('stopword.txt')
15 keywords = tfidf(text, keyword_num)
16 # 输出抽取出的关键词
17 for keyword in keywords:
18 print(keyword + "/ ", end='')
19 print()
20
21if __name__ == '__main__':
22 text = '6月19日,《2012年度“中国爱心城市”公益活动新闻发布会》在京举行。' + \
23 '中华社会救助基金会理事长许嘉璐到会讲话。基金会高级顾问朱发忠,全国老龄' + \
24 '办副主任朱勇,民政部社会救助司助理巡视员周萍,中华社会救助基金会副理事长耿志远,' + \
25 '重庆市民政局巡视员谭明政。晋江市人大常委会主任陈健倩,以及10余个省、市、自治区民政局' + \
26 '领导及四十多家媒体参加了发布会。中华社会救助基金会秘书长时正新介绍本年度“中国爱心城' + \
27 '市”公益活动将以“爱心城市宣传、孤老关爱救助项目及第二届中国爱心城市大会”为主要内容,重庆市' + \
28 '、呼和浩特市、长沙市、太原市、蚌埠市、南昌市、汕头市、沧州市、晋江市及遵化市将会积极参加' + \
29 '这一公益活动。中国雅虎副总编张银生和凤凰网城市频道总监赵耀分别以各自媒体优势介绍了活动' + \
30 '的宣传方案。会上,中华社会救助基金会与“第二届中国爱心城市大会”承办方晋江市签约,许嘉璐理' + \
31 '事长接受晋江市参与“百万孤老关爱行动”向国家重点扶贫地区捐赠的价值400万元的款物。晋江市人大' + \
32 '常委会主任陈健倩介绍了大会的筹备情况。'
33
34 print('TF-IDF模型结果:')
35 tfidf_extract(text)
36 print('TextRank模型结果:')
37 textrank_extract(text)
38
39TF - IDF模型结果:
40晋江市 / 救助 / 爱心 / 基金会 / 公益活动 / 城市 / 中华 / 许嘉璐 / 陈健倩 / 孤老 /
41TextRank模型结果:
42城市 / 爱心 / 救助 / 中国 / 社会 / 晋江市 / 基金会 / 大会 / 介绍 / 公益活动 /
43