【NLP】python中英文关键词抽取技术总结
2021/9/29 14:10:39
本文主要是介绍【NLP】python中英文关键词抽取技术总结,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
【NLP】python中英文关键词抽取技术总结
无论是在中文还是英文中关键词抽取技术都是有着很重要的应用价值和分析价值,下面在python环境中分别针对中文和英文介绍几种常用的关键词抽取方法。
1. 英文
抽取英文关键词的几种方法:
1.1 spaCy
spaCy是一个集成化的工业级自然语言处理工具,主要功能包括分词、词性标注、词干化、命名实体识别、名词短语提取等等。
text = "Private investment firm Carlyle Group,which has a reputation for making well-timed and occasionally controversial plays in the defense industry, has quietly placed its bets on another part of the market." ## spaCy import spaCy spacy_nlp = spacy.load("en_core_web_sm") doc = spacy_nlp(text) for ent in doc.ents: print(ent.text,ent.label_) ## output Carlyle Group ORG
doc.ents
的输出可能是1-gram, 2-gram, 3-gram等,无法人工调控。
1.2 yake
yake使用文本统计特征方法从文章中选择最重要的关键字。
## yake import yake kw_extractor = yake.KeywordExtractor() language = "en" max_ngram_size = 2 #最大关键词语长度 deduplication_threshold = 0.9 #设置在关键词中是否可以重复单词 numOfKeywords = 20 custom_kw_extractor = yake.KeywordExtractor(lan=language, n=max_ngram_size, dedupLim=deduplication_threshold, top=numOfKeywords, features=None) keywords = custom_kw_extractor.extract_keywords(text) ## output [('Carlyle Group,which', 0.007444681613352736), ('firm Carlyle', 0.013797198203993007), ('Private investment', 0.015380821171891606), ('defense industry', 0.015380821171891606), ('investment firm', 0.02570861714399338), ('making well-timed', 0.02570861714399338), ('occasionally controversial', 0.02570861714399338), ('controversial plays', 0.02570861714399338), ('Carlyle', 0.08596317751626563), ('Group,which', 0.08596317751626563), ('Private', 0.09568045026443411), ('industry', 0.09568045026443411), ('market', 0.09568045026443411), ('investment', 0.15831692877998726), ('firm', 0.15831692877998726), ('reputation', 0.15831692877998726), ('making', 0.15831692877998726), ('well-timed', 0.15831692877998726), ('occasionally', 0.15831692877998726), ('controversial', 0.15831692877998726)]
1.3 rare_nltk
一种与NLTK工具集成在一起的快速自动关键词抽取技术Rapid Automatic Keyword Extraction (RAKE)。
## Rake from rake_nltk import Rake rake_nltk_var = Rake(max_length=2) rake_nltk_var.extract_keywords_from_text(text) keyword_extracted = rake_nltk_var.get_ranked_phrases() ## output ['quietly placed', 'making well', 'defense industry', 'another part', 'timed', 'reputation', 'market', 'bets']
rake-nltk
的性能与spaCy
相当
1.4 gensim
## gensim import gensim gensim_kw = gensim.summarization.keywords(text,words=10,split=True,scores=True) ## output [('carlyle', 0.3454150914587271), ('investment firm', 0.3405754844080691), ('occasionally controversial plays', 0.28088699744995504), ('defense', 0.2808869974499539), ('industry', 0.28088699744995377), ('quietly placed', 0.2808869974499534)]
genisim
在关键字提取方面的性能还没有达到spaCy
和``rakenltk级。
gensim`在关键字提取任务上还有改进的空间
2. 中文
2.1 TextRank
TextRank是一种由PageRank启发的算法,最早用在了摘要的提取上,现有的python库能够同时实现对关键词和摘要的提取。TextRank的效果不见得比TF-IDF(有着合适语料库)要好,但是优点在于不需要语料的训练就能对单篇文章分析,在语料不足的时候可以作为一种方法来用。
test_text = '知识图谱(Knowledge Graph),在图书情报界称为知识域可视化或知识领域映射地图,是显示知识发展进程与结构关系的一系列各种不同的图形,用可视化技术描述知识资源及其载体,挖掘、分析、构建、绘制和显示知识及它们之间的相互联系。知识图谱,是通过将应用数学、图形学、信息可视化技术、信息科学等学科的理论与方法与计量学引文分析、共现分析等方法结合,并利用可视化的图谱形象地展示学科的核心结构、发展历史、前沿领域以及整体知识架构达到多学科融合目的的现代理论。' tr4w = TextRank4Keyword() tr4w.analyze(text=test_text,lower=True,window=5) print('测试文本关键词如下:\n') for item in tr4w.get_keywords(5,word_min_len=1): print(item['word'],item['weight']) tr4s = TextRank4Sentence() tr4s.analyze(text=test_text, lower=True, source='no_stop_words') key_sentences = tr4s.get_key_sentences(num=5,sentence_min_len=2) for sentence in key_sentences: print(sentence['weight'],sentence['sentence']) ## output 知识 0.07136000358189572 可视化 0.050885665487685895 学科 0.04382397117871283 图谱 0.034505489704179104 分析 0.032669435513839745
2.2 TF-IDF
TF-IDF,是基于词频与逆文档频次的一种算法,TF-IDF较为简单快速,而且效果相对不错,但是TF-IDF中的IDF要基于已有的语料进行训练,语料的好坏对结果影响很大,如果应用到目前的项目,语料是必须要解决的一个问题。
keywords_tfidf = jieba.analyse.extract_tags(test_text, topK = 20, withWeight=True) for item in keywords_tfidf: print(item[0],item[1]) ## output 知识 0.6291566258975609 可视化 0.5459818268731708 图谱 0.36000858444256095 学科 0.24579239780817075 分析 0.17720506157560972 情报界 0.16952045917073172 图形学 0.16952045917073172 Knowledge 0.14578984759634145 Graph 0.14578984759634145 共现 0.14578984759634145 信息科学 0.1364954567182927 领域 0.1320072083514634 计量学 0.12932732665853658 引文 0.1284558758780488 理论 0.12825460906317074 方法 0.12116597634243903 映射 0.12043080440536585 结构 0.1178287709707317 技术 0.11510871167243902 显示 0.11022549280878048
2.3 Textrank(jieba)
keywords_textrank_jieba = jieba.analyse.textrank(test_text, topK=20, withWeight=True) for item in keywords_textrank_jieba: print(item[0],item[1]) tr4w = TextRank4Keyword() ## output 知识 1.0 可视化 0.6295270480086527 分析 0.48002211534304284 学科 0.448184981430669 技术 0.33755106917904004 结构 0.3218718222753201 发展 0.3176518370007447 方法 0.3153386943262916 领域 0.3120507490347102 图谱 0.2845462026540273 显示 0.28294240822624933 图形学 0.23556758861253835 达到 0.22453237874888934 资源 0.2231116119429888 架构 0.21777848096566976 共现 0.21498592836125222 融合 0.1941284901445365 理论 0.19230572366470158 载体 0.18945172483525918 核心 0.18851788164895478
参考资料:
Keyword Extraction process in Python with Natural Language Processing(NLP)、
Understand TextRank for Keyword Extraction by Python
这篇关于【NLP】python中英文关键词抽取技术总结的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器
- 2024-11-16四种数据科学Web界面框架快速对比:Rio、Reflex、Streamlit和Plotly Dash
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门