关键词摘取
关键词提取就是从文本里面把跟这篇文章意义最相关的一些词语抽取出来。这个可以追溯到文献检索初期,关键词是为了文献标引工作,从报告、论文中选取出来用以表示全文主题内容信息的单词或术语,在现在的报告和论文中,我们依然可以看到关键词这一项。因此,关键词在文献检索、自动文摘、文本聚类/分类等方面有着重要的应用,它不仅是进行这些工作不可或缺的基础和前提,也是互联网上信息建库的一项重要工作
本文介绍的是在文本中获取关键词的俩种方法
1.TF-IDF
2.Text-Rank
下面介绍一些关于关键词抽取的常用和经典的算法实现。
基于 TF-IDF 算法进行关键词提取
在信息检索理论中,TF-IDF 是 Term Frequency - Inverse Document Frequency 的简写。TF-IDF 是一种数值统计,用于反映一个词对于语料中某篇文档的重要性。在信息检索和文本挖掘领域,它经常用于因子加权。
因此,TF-IDF 倾向于过滤掉常见的词语,保留重要的词语。例如,某一特定文件内的高频率词语,以及该词语在整个文件集合中的低文件频率,可以产生出高权重的 TF-IDF。
好在 jieba 已经实现了基于 TF-IDF 算法的关键词抽取,通过命令 import jieba.analyse 引入,函数参数解释如下:
jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())
sentence:待提取的文本语料;
topK:返回 TF/IDF 权重最大的关键词个数,默认值为 20;
withWeight:是否需要返回关键词权重值,默认值为 False;
allowPOS:仅包括指定词性的词,默认值为空,即不筛选。
接下来看例子,我采用的语料来自于百度百科对自然语言处理的定义,获取 Top20 关键字,用空格隔开打印:
import jieba.analyse
sentence = "自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理是一门融语言学、计算机科学、数学于一体的科学。因此,这一领域的研究将涉及自然语言,即人们日常使用的语言,所以它与语言学的研究有着密切的联系,但又有重要的区别。自然语言处理并不是一般地研究自然语言,而在于研制能有效地实现自然语言通信的计算机系统,特别是其中的软件系统。因而它是计算机科学的一部分。"
keywords = " ".join(jieba.analyse.extract_tags(sentence , topK=20, withWeight=False, allowPOS=()))
'''
sentence:待提取的文本语料;
topK=20 :返回 TF/IDF 权重最大的关键词个数,默认值为 20;
withWeight=False :是否需要返回关键词权重值,默认值为 False
allowPOS=() :仅包括指定词性的词,默认值为空,即不筛选。
'''
print(keywords)
import jieba.analyse
sentence = "自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理是一门融语言学、计算机科学、数学于一体的科学。因此,这一领域的研究将涉及自然语言,即人们日常使用的语言,所以它与语言学的研究有着密切的联系,但又有重要的区别。自然语言处理并不是一般地研究自然语言,而在于研制能有效地实现自然语言通信的计算机系统,特别是其中的软件系统。因而它是计算机科学的一部分。"
keywords =(jieba.analyse.extract_tags(sentence , topK=10, withWeight=True, allowPOS=(['n','v'])))
print(keywords)
from jieba import analyse
tfidf = analyse.extract_tags
# 加载停用词
analyse.set_stop_words('stopword.txt')
text = '6月19日,《2012年度“中国爱心城市”公益活动新闻发布会》在京举行。' + \
'中华社会救助基金会理事长许嘉璐到会讲话。基金会高级顾问朱发忠,全国老龄' + \
'办副主任朱勇,民政部社会救助司助理巡视员周萍,中华社会救助基金会副理事长耿志远,' + \
'重庆市民政局巡视员谭明政。晋江市人大常委会主任陈健倩,以及10余个省、市、自治区民政局' + \
'领导及四十多家媒体参加了发布会。中华社会救助基金会秘书长时正新介绍本年度“中国爱心城' + \
'市”公益活动将以“爱心城市宣传、孤老关爱救助项目及第二届中国爱心城市大会”为主要内容,重庆市' + \
'、呼和浩特市、长沙市、太原市、蚌埠市、南昌市、汕头市、沧州市、晋江市及遵化市将会积极参加' + \
'这一公益活动。中国雅虎副总编张银生和凤凰网城市频道总监赵耀分别以各自媒体优势介绍了活动' + \
'的宣传方案。会上,中华社会救助基金会与“第二届中国爱心城市大会”承办方晋江市签约,许嘉璐理' + \
'事长接受晋江市参与“百万孤老关爱行动”向国家重点扶贫地区捐赠的价值400万元的款物。晋江市人大' + \
'常委会主任陈健倩介绍了大会的筹备情况。'
keywords = tfidf(text, topK=10, withWeight=False, allowPOS=())
print('结果为:')
print([keyword for keyword in keywords])在这里插入代码片
E:\python\python.exe F:/untitled3/NLP自然语言学习/get_key_words/TF-IDF-get-keywords.py
Building prefix dict from the default dictionary ...
Loading model from cache C:\Users\p'c\AppData\Local\Temp\jieba.cache
Loading model cost 0.990 seconds.
Prefix dict has been built successfully.
自然语言 计算机科学 语言学 研究 领域 处理 通信 有效 软件系统 人工智能 实现 计算机系统 重要 一体 一门 日常 计算机 密切 数学 研制
[('计算机科学', 0.944278347636774), ('语言学', 0.5780022728625807), ('领域', 0.5237705363622581), ('处理', 0.5236311926477419), ('人工智能', 0.30509762566096776), ('实现', 0.30172453397354837), ('计算机系统', 0.293973739006129), ('一体', 0.23797146276870967), ('计算机', 0.2195091751896774), ('数学', 0.21317227341290323)]
结果为:
['晋江市', '救助', '爱心', '基金会', '公益活动', '城市', '中华', '许嘉璐', '陈健倩', '孤老']
Process finished with exit code 0
以上是代码实现的TF-IDF关键词摘取的demo,和打印出来的结果。
2.基于 Text-Rank 算法进行关键词提取
import jieba.analyse
sentence = "自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理是一门融语言学、计算机科学、数学于一体的科学。因此,这一领域的研究将涉及自然语言,即人们日常使用的语言,所以它与语言学的研究有着密切的联系,但又有重要的区别。自然语言处理并不是一般地研究自然语言,而在于研制能有效地实现自然语言通信的计算机系统,特别是其中的软件系统。因而它是计算机科学的一部分。"
#tf-idf
keywords = " ".join(jieba.analyse.extract_tags(sentence , topK=20, withWeight=False, allowPOS=()))
'''
sentence:待提取的文本语料;
topK=20 :返回 TF/IDF 权重最大的关键词个数,默认值为 20;
withWeight=False :是否需要返回关键词权重值,默认值为 False
allowPOS=() :仅包括指定词性的词,默认值为空,即不筛选。
'''
print(keywords)
#textrank
print("-------")
result = " ".join(jieba.analyse.textrank(sentence, topK=20, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v')))
'''
sentence:待提取的文本语料;
topK=20 :返回 TF/IDF 权重最大的关键词个数,默认值为 20;
withWeight=False :是否需要返回关键词权重值,默认值为 False
allowPOS=() :仅包括指定词性的词,默认值为空,即不筛选。
'''
print(result)
from jieba import analyse
def textrank_extract(text, keyword_num=10):
textrank = analyse.textrank
analyse.set_stop_words('stopword.txt')
keywords = textrank(text, keyword_num)
# 输出抽取出的关键词
for keyword in keywords:
print(keyword + "/ ", end='')
print()
def tfidf_extract(text, keyword_num=10):
tfidf = analyse.extract_tags
analyse.set_stop_words('stopword.txt')
keywords = tfidf(text, keyword_num)
# 输出抽取出的关键词
for keyword in keywords:
print(keyword + "/ ", end='')
print()
if __name__ == '__main__':
text = '6月19日,《2012年度“中国爱心城市”公益活动新闻发布会》在京举行。' + \
'中华社会救助基金会理事长许嘉璐到会讲话。基金会高级顾问朱发忠,全国老龄' + \
'办副主任朱勇,民政部社会救助司助理巡视员周萍,中华社会救助基金会副理事长耿志远,' + \
'重庆市民政局巡视员谭明政。晋江市人大常委会主任陈健倩,以及10余个省、市、自治区民政局' + \
'领导及四十多家媒体参加了发布会。中华社会救助基金会秘书长时正新介绍本年度“中国爱心城' + \
'市”公益活动将以“爱心城市宣传、孤老关爱救助项目及第二届中国爱心城市大会”为主要内容,重庆市' + \
'、呼和浩特市、长沙市、太原市、蚌埠市、南昌市、汕头市、沧州市、晋江市及遵化市将会积极参加' + \
'这一公益活动。中国雅虎副总编张银生和凤凰网城市频道总监赵耀分别以各自媒体优势介绍了活动' + \
'的宣传方案。会上,中华社会救助基金会与“第二届中国爱心城市大会”承办方晋江市签约,许嘉璐理' + \
'事长接受晋江市参与“百万孤老关爱行动”向国家重点扶贫地区捐赠的价值400万元的款物。晋江市人大' + \
'常委会主任陈健倩介绍了大会的筹备情况。'
print('TF-IDF模型结果:')
tfidf_extract(text)
print('TextRank模型结果:')
textrank_extract(text)
E:\python\python.exe F:/untitled3/NLP自然语言学习/get_key_words/TEXTRANK-get-keywords.py
Building prefix dict from the default dictionary ...
Loading model from cache C:\Users\p'c\AppData\Local\Temp\jieba.cache
Loading model cost 0.850 seconds.
Prefix dict has been built successfully.
自然语言 计算机科学 语言学 研究 领域 处理 通信 有效 软件系统 人工智能 实现 计算机系统 重要 一体 一门 日常 计算机 密切 数学 研制
-------
研究 领域 计算机科学 实现 处理 语言学 数学 人们 计算机 涉及 有着 一体 方法 语言 研制 使用 人工智能 在于 联系 科学
TF-IDF模型结果:
晋江市/ 救助/ 爱心/ 基金会/ 公益活动/ 城市/ 中华/ 许嘉璐/ 陈健倩/ 孤老/
TextRank模型结果:
城市/ 爱心/ 救助/ 中国/ 社会/ 晋江市/ 基金会/ 大会/ 介绍/ 公益活动/
Process finished with exit code 0
以上是代码实现的Text-Rank实现关键词摘取的demo,和打印出来的结果。
这就是这次的内容,下次写一下序列标注的的知识和demo。
欢迎持续观看 我也会持续更新的。。。。。