目标:理解“一个词在本文档中重要,但在整个语料库中不常见,才可能是主题词”,并用jieba或sklearn写出可运行的关键词提取代码。
TF-IDF 的核心思想是:词频(TF)越高、逆文档频率(IDF)越大,词的权重越高。它实现简单、计算快,适合作为主题词提取的第一条基线。新闻关键词提取的研究中,TF-IDF 也是三类主流算法之一,常被用来与 TextRank、LDA 对比或融合。
1. 用 jieba 快速提取中文关键词
jieba.analyse内置了 TF-IDF 实现,几行代码就能拿到结果,适合快速验证。
python
import jieba.analyse text = """这里放入你的中文文本,可以是新闻、评论或文档段落。""" # topK:返回前 K 个关键词;withWeight:是否返回权重 keywords = jieba.analyse.extract_tags(text, topK=10, withWeight=True) for word, weight in keywords: print(f"{word}\t{weight:.4f}")如果希望过滤掉“的、了、在”等无意义词,可以加载停用词表:
python
jieba.analyse.set_stop_words("stopwords.txt")2. 用 sklearn 的 TfidfVectorizer 理解向量化过程
TfidfVectorizer更适合需要自定义参数或接入下游模型的场景。中文必须先分词,再用空格拼接,否则整句话会被当成一个特征。
python
import jieba from sklearn.feature_extraction.text import TfidfVectorizer corpus = [ "用户反馈手机续航很好但充电速度偏慢", "这款手机拍照效果出色续航也不错", "充电速度是用户最关心的痛点之一", ] # 中文分词 + 空格拼接 processed = [" ".join(jieba.lcut(doc)) for doc in corpus] vectorizer = TfidfVectorizer(max_features=100, stop_words=None) X = vectorizer.fit_transform(processed) # 查看特征词 print(vectorizer.get_feature_names_out()) # 查看每个文档中权重最高的词 import numpy as np feature_names = vectorizer.get_feature_names_out() for i in range(X.shape[0]): row = X[i].toarray().flatten() top_idx = row.argsort()[-5:][::-1] print(f"文档{i}:", [(feature_names[j], round(row[j], 3)) for j in top_idx])github.0voice