You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 16:15:03