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

如何高效统计指定词汇在多个Python语料库中的出现次数?

大规模语料库词汇频次统计最优方案

问题描述

我拥有4个语料库:

C1 = ['hello','good','good','desk']
C2 = ['nice','good','desk','paper']
C3 = ['red','blue','green']
C4 = ['good']

希望指定一个词汇列表,统计每个词汇在各个语料库中的出现次数。例如指定列表为l = ['good','blue']时,期望得到如下结果:

word  C1  C2  C3  C4
good   2   1   0   1
blue   0   0   1   0

由于语料库规模极大,寻求高效实现方案,请问最优方法是什么?

最优实现方案

针对大规模语料库,核心思路是减少语料遍历次数+利用底层优化的统计工具,以下是两种高效方案:

方案1:用collections.Counter预统计(内存友好)

先一次性统计每个语料库的全词频,再针对目标词汇提取数值,避免重复遍历语料:

from collections import Counter
import pandas as pd

# 存储所有语料库
corpora = {"C1": C1, "C2": C2, "C3": C3, "C4": C4}
# 预统计每个语料库的词频,仅遍历一次语料
corpus_counters = {name: Counter(corpus) for name, corpus in corpora.items()}

# 目标词汇列表
target_words = ['good', 'blue']

# 构建结果数据
result = {
    "word": target_words,
    **{
        corpus_name: [counter.get(word, 0) for word in target_words]
        for corpus_name, counter in corpus_counters.items()
    }
}

# 转为DataFrame格式
res_df = pd.DataFrame(result).set_index("word")
print(res_df)

输出结果:

C1  C2  C3  C4
word                
good   2   1   0   1
blue   0   0   1   0

优势:时间复杂度为O(N)(N为所有语料库总词数),内存仅存储各语料库的唯一词及其频次,适合大规模数据场景。

方案2:用pandas内置统计(高效结构化处理)

如果日常用pandas处理数据,可借助其C语言实现的统计接口,避免纯Python循环的开销:

import pandas as pd

corpora = {"C1": C1, "C2": C2, "C3": C3, "C4": C4}
target_words = ['good', 'blue']

# 生成每个语料库的频次Series,自动补全目标词汇的0值
corpus_series = []
for name, corpus in corpora.items():
    freq_series = pd.Series(corpus).value_counts().reindex(target_words, fill_value=0)
    freq_series.name = name
    corpus_series.append(freq_series)

# 合并所有Series并整理格式
res_df = pd.concat(corpus_series, axis=1)
res_df.insert(0, "word", target_words)
res_df = res_df.set_index("word")
print(res_df)

优势:pandas内部统计逻辑经过高度优化,比纯Python循环更快,适合需要后续进行数据分析的场景。

超大规模数据(内存放不下)优化

如果语料库大到无法一次性加载:

  • 分块读取语料,逐块更新Counter,最终合并统计结果;
  • 使用Dask等分布式计算库,将任务拆分到多进程/节点处理,支持TB级数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 08:50:26