文本词频怎么统计?用 CountVectorizer 区分出现次数与文档频率

用 CountVectorizer 同时统计总词频与文档频率,手算核对结果,并回查训练文本中的高频模板。

同一个词在一篇文档出现五次,和在五篇文档各出现一次,是两种不同信号。总词频反映出现次数,文档频率反映覆盖多少篇。清理训练语料和检查模板污染时,先把它们分开统计,避免只看高频词列表。

准备已经分词的文本

本例使用 Python 与 scikit-learn,不调用在线模型。三条短文本是人为演示数据,空格代表已完成分词;统计真实中文语料前要先确定分词规则、繁简处理与停用词表。不能直接把中文整段交给默认英文词规则后就认定统计正确。

文本词频怎么统计?用 CountVectorizer 区分出现次数与文档频率

python -m pip install scikit-learn

分别统计总词频与文档频率

import numpy as np
from sklearn.feature_extraction.text import CountVectorizer

docs = ["模型 模型 数据", "模型 训练", "数据 标注"]
v = CountVectorizer(tokenizer=str.split, token_pattern=None)
X = v.fit_transform(docs)
words = v.get_feature_names_out()
total = np.asarray(X.sum(axis=0)).ravel()
document_count = np.asarray((X > 0).sum(axis=0)).ravel()
rows = sorted(zip(words, total.tolist(), document_count.tolist()),
              key=lambda r: (-r[1], r[0]))
for word, count, df in rows:
    print(word, "总次数", count, "文档数", df)
idx = list(words).index("模型")
assert total[idx] == 3 and document_count[idx] == 2

这里先产生“文档 × 词语”的稀疏计数矩阵。X.sum(axis=0) 按列求总次数;(X > 0).sum(axis=0) 只判断某篇是否包含该词,不重复计入该篇的多个出现。

用已知答案核对统计口径

验证方法是手算“模型”:第一篇出现两次、第二篇一次,所以总次数为 3,但只覆盖两篇文档,文档频率为 2。“数据”的两项都是 2;“训练”和“标注”各为 1。

如果输出没有“模型”,先看 v.get_feature_names_out() 是否把输入当成预分词文本。如果文章先经过去重,文档频率的分母应使用去重后的文档数;否则同一文章的多个副本会夸大覆盖范围。

从统计结果回查原文

下一步将文档 ID 与矩阵行号同时保存,挑选高文档频率词,回到包含它们的原文检查是否为页脚、版权声明或模板。不要因为某词高频就自动删除:专业语料中“模型”可能是必要内容。

本方法统计分词后的字符串,不自动理解同义词和实体指代。演示结果不代表真实训练数据分布;大规模语料不要把整个稀疏矩阵转成密集数组,本文仅对列汇总向量做转换。

资料与适用版本

以下官方资料核对于 2026 年 10 月 1 日;安装和界面以实际使用版本为准。

Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/30198.html

赞 (0)
AI小管家的头像AI小管家
内容推荐怎么做?用 TF-IDF 和余弦相似度推荐相关文章
上一篇 2天前
文本分类怎么入门?用 TF-IDF 和朴素贝叶斯训练问题分类器
下一篇 2天前

相关推荐

联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部