视频加载失败

课程

666 字
约 2 分钟

实例化一个词频统计器

自然语言处理labs/lab/lab02/docs·更新于 2026-09-15

1. 构建TF-IDF模型,计算TF-IDF矩阵

代码注释

# 实例化一个词频统计器
vectorizer = CountVectorizer()
# 将预处理后的文档集合转换成词频矩阵 X
# fit_transform 会统计语料库中所有词汇并记录每篇文档里词出现的次数
X = vectorizer.fit_transform(corpus)

# 实例化 TF-IDF 转换器
transformer = TfidfTransformer()
# 根据词频矩阵 X 计算每个词在各文档中的 TF-IDF 权重
# TF 是词频,IDF 是逆文档频率。计算后的结果是一个权重矩阵
tfidf = transformer.fit_transform(X)

# 获取词袋模型里所有词汇的名称,方便后续查找
word = vectorizer.get_feature_names()

# 把生成的稀疏矩阵转成普通的数组格式,方便遍历和加权重计算
weight = tfidf.toarray()

算法过程

  1. 生成词频矩阵:程序先遍历所有的文档(标题和摘要拼接后的内容),把所有出现过的词列出来。然后统计每个词在每篇文档里出现了多少次,存成一个表格(矩阵)。
  2. 计算TF(词频):统计一个词在当前文档里出现的次数除以文档总词数。如果一个词在当前文档里多,说明它在当前文档重要。
  3. 计算IDF(逆文档频率):统计包含这个词的文档数量。如果一个词在很多文档里都出现过,那它的IDF值就低,说明它比较通用;如果只在少数文档出现,IDF就高。
  4. 得出TF-IDF权重:把 TF 乘以 IDF,最后得到的结果就是一个词在某文档里的综合权重。

2. 排序输出关键词并写入文件

代码实现及注释

# 用来存放处理后的结果
ids, titles, keys = [], [], []

# 遍历每一篇文档的权重数据
for i in range(len(weight)):
    ids.append(idList[i])
    titles.append(titleList[i])

    # 记录当前文档的所有词和对应的权重
    df_word, df_weight = [], []
    for j in range(len(word)):
        df_word.append(word[j])
        df_weight.append(weight[i][j])

    # 把数据放到 DataFrame 里方便排序
    df_word = pd.DataFrame(df_word, columns=['word'])
    df_weight = pd.DataFrame(df_weight, columns=['weight'])
    # 把词和权重两列拼在一起
    word_weight = pd.concat([df_word, df_weight], axis=1)

    # 按照 weight 权重这一列进行降序排列(大的在前)
    word_weight = word_weight.sort_values(by='weight', ascending=False)

    # 提取排在最前面的前 topk 个词
    keyword = np.array(word_weight['word'])
    word_split = [keyword[x] for x in range(0, topk)]

    # 用空格把这些词连起来
    word_split = " ".join(word_split)
    keys.append(word_split)

# 把 id、标题和提取出的关键词整理成一个总表
result = pd.DataFrame({"id": ids, "title": titles, "key": keys}, columns=['id', 'title', 'key'])

# 最后把这个结果表保存到 csv 文件里,不保存行索引
result.to_csv("./data/keys_TFIDF.csv", index=False)

算法详细过程

  1. 组织数据:对每一篇文档,把词表中的每个词和它在矩阵里对应的 TF-IDF 值关联起来。
  2. 权值排序:使用 pandas 的 sort_values 方法,对关联好的数据按照权重值从大到小进行排序。
  3. 筛选 Top-K:设定一个阈值(如实验中的 10),从排序好的列表里取出前 10 个词,这些就是该文档权值最高的关键词。
  4. 字符串拼接:把筛选出的词连成一串,并和文档原有的 ID、标题一起存入最终的结果列表。
  5. 保存数据:把整个结果集转成 CSV 文件输出到指定路径,完成关键词提取。
Profile Image of the Author
Sonder
好想要技术
这是公告标题
这只是一个公告
分类
标签
站点信息
构建平台
GitHub Actions
博客版本
Firefly v6.16.7
文章许可
CC BY-NC-SA 4.0
文章目录