如何用Python TopicRank遍历DataFrame行并生成keywords新列
实现思路
- 先把你已经跑通的单条文本TopicRank关键词提取逻辑封装为独立函数,输入为单条文本,输出为格式化后的关键词结果
- 直接用pandas自带的
apply方法将函数批量应用到文本列,自动生成keywords新列,无需手动写循环遍历行 - 公共配置(如停用词加载、固定参数设置)放在函数外部执行,避免每处理一行就重复加载一次,大幅提升运行效率
可直接复用的代码示例
首先执行公共初始化操作(仅运行一次):
import pandas as pd import pke # 加载对应语言的停用词,中文改为'zh'即可,也可以传入自定义停用词列表 stoplist = pke.lang.stopwords.get('en')
封装单文本关键词提取函数:
def extract_topicrank_keywords(text, top_n=5): # 异常捕获,避免单条文本报错中断整个执行流程 try: # 空文本直接返回空值 if pd.isna(text) or len(text.strip()) == 0: return "" # 初始化TopicRank提取器 extractor = pke.unsupervised.TopicRank() # 加载文本,中文场景可提前用jieba分词后以空格拼接再传入,同时指定language='zh' extractor.load_document(input=text, language='en', stoplist=stoplist) # 候选词选择、权重计算 extractor.candidate_selection() extractor.candidate_weighting() # 取topN结果,按你需要的格式拼接,此处仅取关键词用逗号分隔,需要保留得分可自行调整 keyphrases = extractor.get_n_best(n=top_n) return ', '.join([kp[0] for kp in keyphrases]) except: # 出错行返回空值,也可按需求返回异常标识 return ""
批量处理整个DataFrame生成新列:
# 将代码中的content替换为你DataFrame里存储待处理文本的实际列名 maindf['keywords'] = maindf['content'].apply(extract_topicrank_keywords)
如果需要查看处理进度,可以引入tqdm的进度条:
from tqdm import tqdm tqdm.pandas() # 把apply换成progress_apply即可显示进度条 maindf['keywords'] = maindf['content'].progress_apply(extract_topicrank_keywords)
注意:如果是中文场景,需要提前做好分词处理,pke默认不支持中文自动分词,你可以先用jieba对文本列做分词,用空格拼接后再传入提取函数即可
内容的提问来源于stack exchange,提问作者Pavan
相关产品推荐
相关产品推荐

