一个从 中文自然语言文本 中抽取 关键短语 的工具
需要调用的话,请直接进入github查看调用方法:
⭐源码地址:ckpe
⭐戳这里 => 在线直接试用 关键短语抽取在线版
应用场景 Application scenario
1.抽取关键短语
- 在很多关键词提取任务中,使用tfidf、textrank等方法提取得到的仅仅是若干零碎词汇。
- 这样的零碎词汇无法真正的表达文章的原本含义,我们并不想要它。
>>> text = '朝鲜确认金正恩出访俄罗斯 将与普京举行会谈...'
>>> keywords = ['俄罗斯', '朝鲜', '普京', '金正恩', '俄方']
- 在很多时候,我们往往需要更细化的短语描述,来作为文本的关键信息展示。这样的需求在生成词云、提供摘要阅读、关键信息检索等任务中都非常重要。
>>> phrases = ['俄罗斯克里姆林宫', '邀请金正恩访俄', '最高司令官金正恩',
'朝方转交普京', '举行会谈']
⭐将关键短语做成词云,效果非常好哦!
功能介绍 Function introduction
为解决以上问题,基于北大分词器 pkuseg 工具,开发了一个关键短语抽取器,它可以方便地从文本中找出表达完成意思的关键短语。
使用方法 Usage
安装 Installation
- 仅支持 python3
- 自动安装 pkuseg 依赖包
$ git clone https://github.com/dongrixinyu/chinese_keyphrase_extractor
$ cd ~/chinese_keyphrase_extractor
$ pip install .
示例代码 Sample code
- 输入必须为 utf-8 编码字符串
- 仅支持中文
- 具体函数参数见代码
1.抽取关键短语
import ckpe
ckpe_obj = ckpe.ckpe()
# 初次导入时会自动下载北大词性标注模型包,自动加载入内存(50M)
# 若由于网速原因下载失败,请参考 https://github.com/lancopku/pkuseg-python 如何安装下载 pkuseg 默认模型
text = '法国媒体最新披露,巴黎圣母院火灾当晚,第一次消防警报响起时,负责查验的保安找错了位置,因而可能贻误了救火的最佳时机。...'
key_phrases = ckpe_obj.extract_keyphrase(text)
print(key_phrases)
print(ckpe_obj.extract_keyphrase.__doc__)
2.扩展类型短语
- 该项功能主要为特定短语抽取服务
- 有时产品和客户给定了一些词汇列表,比如化工经营业务词汇“聚氯乙烯”、“塑料”、“切割”、“金刚石”等。想要找到跟这些词汇相关的短语。
- 在做NER命名实体识别任务的时候,我们需要从文本中,将已有的类型词汇做扩充,如“机构”类别,但我们仅知道机构的一些特征,如常以“局”、“法院”、“办公室”等特征词结尾。
- 在下面的使用样例中,给出了上述两种需求的扩展短语识别的方法。
text = '聚氯乙烯树脂、塑料制品、切割工具、人造革、人造金刚石、农药(不含危险化学品)、针纺织品自产自销。...'
word_dict = {'聚氯乙烯': 1, '塑料': 1, '切割': 1, '金刚石': 1} # 词汇: 词频(词频若未知可全设 1)
key_phrases = ckpe_obj.extract_keyphrase(text, top_k=-1, specified_words=word_dict)
print(key_phrases)
3.NER任务的短语扩充
text = '国务院下发通知,山西省法院、陕西省检察院、四川省法院、成都市教育局。...'
word_dict = {'局': 1, '国务院': 1, '检察院': 1, '法院': 1}
key_phrases = ckpe_obj.extract_keyphrase(text, top_k=-1, specified_words=word_dict,
remove_phrases_list=['麻将局'])
print(key_phrases)
原理 Principle of algorithm
- 首先基于 pkuseg 工具做分词和词性标注,再使用 tfidf 计算文本的关键词权重,
- 关键词提取算法找出碎片化的关键词,然后再根据相邻关键碎片词进行融合,重新计算权重,去除相似词汇。得到的融合的多个关键碎片即为关键短语。
- 短语的 token 长度不超过 12
- 短语中不可出现超过1个虚词
- 短语的两端 token 不可是虚词和停用词
- 短语中停用词数量不可以超过规定个数
- 短语重复度计算添加其中
- 提供仅抽取名词短语功能
- 使用预训练好的 LDA 模型,计算文本的主题概率分布,以及每一个候选短语的主题概率分布,得到最终权重
特点
- 该算法稳定性高,能够克服很多错误的字符串,比如“啊啊啊啊啊啊”, “----------”,“fheauinfrurqpernznm”,“开心~~~~”等等
- 该算法处理速度在单核cpu上大约为 6篇/秒
- 该算法可以支持名词短语,动宾短句的自由切换,且提供了丰富的接口方便尝试调用。
- 该算法可以支持扩展特征抽取,可以进一步进行文本摘要抽取,基于短语的文本特征表示
TODO
- pkuseg 分词器造成的错误,如把时间识别为名词,数字识别为人名等
- stopwords 表中一些词汇既可以做实词,又可以做虚词,如“本”,“类”,造成错误
- 规则过滤不完善造成的错误,或过滤过强造成的漏选
- 某些数词与量词会相互分离,结合不够紧密,造成错误。
- 如果有任何使用上的错误,请记得及时反馈哦!
Reference
- Teneva N , Cheng W . Salience Rank: Efficient Keyphrase Extraction with Topic Modeling[C]// Proceedings of the 55th Annual Meeting of the Association for Computational Linguistics (Volume 2: Short Papers). 2017.
- Liu Z , Huang W , Zheng Y , et al. Automatic Keyphrase Extraction via Topic Decomposition[C]// Proceedings of the 2010 Conference on Empirical Methods in Natural Language Processing, EMNLP 2010, 9-11 October 2010, MIT Stata Center, Massachusetts, USA, A meeting of SIGDAT, a Special Interest Group of the ACL. Association for Computational Linguistics, 2010.