上一篇
Python关键词提取教程:三种方法轻松实现文本关键词提取
- Python
- 2025-08-18
- 234
Python关键词提取教程:三种方法轻松实现
掌握文本分析的核心技术,快速提取文档关键信息
什么是关键词提取?
关键词提取是从文本中自动识别和提取最重要、最具代表性的词语或短语的过程。这项技术在以下场景有广泛应用:
- 搜索引擎优化(SEO)
- 文本摘要生成
- 内容推荐系统
- 舆情分析
- 信息检索
Python提供了多种工具和库来实现关键词提取,本教程将介绍三种最常用的方法。
方法一:使用TF-IDF算法
TF-IDF(词频-逆文档频率)是一种经典的统计方法,衡量词语在文档中的重要性。
TF-IDF工作原理:
- TF(词频):词语在文档中出现的频率
- IDF(逆文档频率):衡量词语在整个语料库中的稀有程度
- TF-IDF值:TF与IDF的乘积,值越大表示词语越重要
Python实现代码:
from sklearn.feature_extraction.text import TfidfVectorizer
import jieba # 中文分词库
# 示例文档
documents = [
"自然语言处理是人工智能的重要分支",
"深度学习在自然语言处理中取得显著进展",
"关键词提取是文本挖掘的基本任务之一"
]
# 中文分词处理
def chinese_tokenizer(text):
return list(jieba.cut(text))
# 创建TF-IDF向量化器
vectorizer = TfidfVectorizer(tokenizer=chinese_tokenizer)
# 计算TF-IDF矩阵
tfidf_matrix = vectorizer.fit_transform(documents)
# 获取特征词列表
feature_names = vectorizer.get_feature_names_out()
# 提取每个文档的关键词
for i, doc in enumerate(documents):
# 获取当前文档的TF-IDF向量
tfidf_vector = tfidf_matrix[i]
# 将向量转换为数组并获取非零元素的索引
tfidf_scores = tfidf_vector.toarray()[0]
sorted_indices = tfidf_scores.argsort()[::-1]
# 提取前3个关键词
top_keywords = [feature_names[idx] for idx in sorted_indices[:3]]
print(f"文档{i+1}的关键词: {', '.join(top_keywords)}")
TF-IDF优缺点:
优点 | 缺点 |
---|---|
实现简单,计算效率高 | 无法考虑词语间的语义关系 |
结果可解释性强 | 对短文本效果不佳 |
无需训练数据 | 无法处理一词多义问题 |
方法二:使用TextRank算法
TextRank基于谷歌的PageRank算法,通过词语共现关系构建图模型,迭代计算词语的重要性得分。
TextRank工作原理:
- 对文本进行分词和词性标注
- 构建词语共现图(词语为节点,共现关系为边)
- 迭代计算每个节点的权重
- 按权重排序选择最重要的词语作为关键词
Python实现代码:
import jieba
import jieba.analyse
# 示例文本
text = "自然语言处理是人工智能领域的重要研究方向。近年来,深度学习技术在自然语言处理任务中取得了显著进展,如机器翻译、情感分析等。"
# 使用jieba的TextRank实现提取关键词
keywords = jieba.analyse.textrank(
text,
topK=5, # 提取关键词数量
withWeight=True # 返回关键词权重
)
# 输出结果
print("TextRank提取的关键词及权重:")
for keyword, weight in keywords:
print(f"{keyword}: {weight:.4f}")
TextRank优缺点:
优点 | 缺点 |
---|---|
无需语料库,单文档即可 | 计算复杂度较高 |
考虑了词语间的关联关系 | 窗口大小影响结果 |
对长文本效果较好 | 仍无法理解深层语义 |
方法三:基于深度学习的方法
使用预训练语言模型(如BERT)可以捕捉词语的上下文语义信息,提高关键词提取的准确性。
深度学习模型优势:
- 理解词语的上下文含义
- 处理一词多义问题
- 识别隐含的关键概念
Python实现代码(使用KeyBERT):
from keybert import KeyBERT
import jieba
# 加载预训练模型
kw_model = KeyBERT(model='paraphrase-multilingual-MiniLM-L12-v2')
# 示例文本
text = "自然语言处理是人工智能领域的重要研究方向。近年来,深度学习技术在自然语言处理任务中取得了显著进展,如机器翻译、情感分析等。"
# 提取关键词
keywords = kw_model.extract_keywords(
text,
keyphrase_ngram_range=(1, 2), # 关键词长度范围
stop_words=None, # 停用词列表
top_n=5, # 返回关键词数量
diversity=0.5 # 结果多样性控制
)
# 输出结果
print("KeyBERT提取的关键词及相似度:")
for keyword, score in keywords:
print(f"{keyword}: {score:.4f}")
深度学习优缺点:
优点 | 缺点 |
---|---|
理解深层语义关系 | 计算资源要求高 |
对短文本效果更好 | 模型复杂度高 |
处理一词多义能力强 | 需要GPU加速 |
方法对比与选择建议
方法 | 适用场景 | 资源需求 | 准确性 | 推荐指数 |
---|---|---|---|---|
TF-IDF | 多文档分析、快速原型 | 低(CPU) | 中等 | ★★★★☆ |
TextRank | 长文档、单文档分析 | 中等(CPU) | 中高 | ★★★★☆ |
深度学习 | 高精度要求、短文本 | 高(GPU) | 高 | ★★★★★ |
选择建议:
- 快速简单需求:选择TF-IDF方法,实现快速且资源消耗低
- 平衡性能与准确率:TextRank是不错的选择,尤其对于长文档
- 高精度要求:使用深度学习模型,特别是处理专业领域文本时
- 中文文本处理:推荐结合jieba分词库使用,效果更佳
总结
关键词提取是自然语言处理的基础任务,Python提供了多种实现方式:
- 传统统计方法(TF-IDF):简单高效,适合入门和快速实现
- 图算法(TextRank):考虑词语关联,适合长文档分析
- 深度学习方法:精度最高,能理解语义,适合专业场景
实际应用建议: 根据具体需求选择合适的方法。对于大多数应用场景,TextRank提供了良好的平衡点。当处理专业领域文本或需要最高精度时,可以考虑使用基于BERT等预训练模型的方法。
本文由YuchiRui于2025-08-18发表在吾爱品聚,如有疑问,请联系我们。
本文链接:https://liuhe.jltcw.com/20258440.html
发表评论