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

基于TF-IDF提取列表长句元素Top10关键词的代码实现咨询

现有代码问题梳理

  • 每次循环单句拟合向量器:TF-IDF的权重是基于全语料的词出现频次计算的,单句拟合无法得到正确的全局词权重,且循环内重复实例化向量器只会保留最后一个句子的拟合结果,完全失效
  • 转换函数逻辑错误:transfom(存在拼写错误,正确拼写为transform)函数内直接调用fit(train_data),train_data属于未传入的外部变量会直接报错,且每次预测都重新拟合会极大浪费算力
  • 缺少关键词匹配逻辑:仅返回向量化结果,没有将TF-IDF分值和对应词汇映射、取TopN的逻辑

调整后完整实现

from sklearn.feature_extraction.text import TfidfVectorizer
from nltk.tokenize import word_tokenize

# 保留你原有自定义停用词/特殊字符清洗逻辑
def remove(text):
    # 此处补充你原本的清洗规则
    return text

def fit(train_data):
    # 全量清洗训练语料
    cleaned_lst = [remove(element) for element in train_data]
    # 全局实例化向量器,基于全语料拟合得到全局词权重
    vectorizer = TfidfVectorizer(tokenizer=word_tokenize)
    vectorizer.fit(cleaned_lst)
    return vectorizer

def get_top_n_keywords(vectorizer, sentence, n=10):
    # 清洗目标句子后转TF-IDF矩阵
    tfidf_matrix = vectorizer.transform([remove(sentence)])
    # 获取词汇表和对应分值
    feature_names = vectorizer.get_feature_names_out()
    tfidf_scores = tfidf_matrix.toarray()[0]
    # 按分值倒序排序,过滤分值为0的非句内词汇,取前n个
    word_score_pairs = list(zip(feature_names, tfidf_scores))
    sorted_pairs = sorted(word_score_pairs, key=lambda x: x[1], reverse=True)
    top_n = [pair[0] for pair in sorted_pairs if pair[1] > 0][:n]
    return top_n

使用示例

# 替换为你自己的语料数据
corpus = [
    "人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器",
    "机器学习是人工智能的一个分支,它让计算机系统无需明确编程就能自动从数据中学习和提升性能",
    "自然语言处理是人工智能和语言学的交叉领域,研究实现人与计算机之间用自然语言进行有效通信的理论和方法"
]

# 1. 基于全量语料拟合向量器
vectorizer = fit(corpus)

# 2. 遍历每个句子提取10个关键词
for sent in corpus:
    keywords = get_top_n_keywords(vectorizer, sent, n=10)
    print(f"关键词:{keywords}")

补充说明

  • 如果不需要全局语料统计、仅基于单句本身的词频提取关键词,无需单独做fit步骤,直接对每个句子单独拟合TF-IDF向量器即可
  • 可以给TfidfVectorizer添加stop_words参数传入内置停用词表,减少无意义停用词被提取为关键词

内容的提问来源于stack exchange,提问作者KIMIA Ghassemzadeh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 08:24:07