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

400万条文本记录与1-2元语法词表的高效Python词频统计方案

高效处理百万级文本的1-gram/2-gram词频统计

现有一个包含约400万条文本段落的大型文件,以及一个包含约150个1-gram(一元语法)和2-gram(二元语法)术语的词表,需要开发高效的Python函数,为每条文本记录生成对应的词频统计字典(词表中未出现的术语记为0)。

以下是最小可复现示例代码:

import pandas as pd

# 示例数据
# word_list包含一元语法和二元语法术语
word_list = ['apple', 'banana', 'dog', 'machine learning', 'data science', 'big data']

# 真实数据包含400万行,此处用5000次重复模拟大规模数据
texts = 5000 * [
    'I love apple and banana',
    'The dog runs fast',
    'machine learning is great',
    'apple banana dog',
    'data science and big data are related'
]

# 将数据存储为DataFrame,包含'text'列
df = pd.DataFrame({'idx': range(len(texts)), 'text': texts})

# 需要实现高效函数,为每行文本返回词频统计字典
def count_words_in_texts(df, word_list):
    """
    返回每行文本的词频统计字典列表
    df: 包含'text'列的DataFrame
    word_list: 术语/短语列表(含一元、二元语法)
    返回值: 字典列表,每个字典对应一行文本的词频统计
    """
    # TODO: 实现高效词频统计逻辑
    pass

# 预期输出格式示例:
# [{'apple': 1, 'banana': 1, 'dog': 0, 'machine learning': 0, 'data science': 0, 'big data': 0}, ...]

results = count_words_in_texts(df, word_list)
print(results)

高效实现方案

针对400万行的大规模数据,避免逐行循环匹配是提升效率的核心。以下利用正则预编译+Pandas向量化操作实现高效统计:

完整实现代码

import pandas as pd
import re

def count_words_in_texts(df, word_list):
    # 预编译正则表达式,确保匹配完整术语(避免部分匹配,比如"apple"不会匹配"apples")
    # 对每个术语单独处理,转义特殊字符并添加单词边界
    regex_patterns = {term: re.compile(rf'\b{re.escape(term)}\b', flags=re.IGNORECASE) for term in word_list}
    
    # 用Pandas向量化方法批量统计每个术语的出现次数
    count_df = pd.DataFrame()
    for term, pattern in regex_patterns.items():
        count_df[term] = df['text'].str.count(pattern)
    
    # 将每行统计结果转换为字典,确保所有术语都存在(含次数为0的条目)
    return count_df.to_dict('records')

方案优势

  • 预编译正则:避免重复编译正则表达式,减少计算开销
  • 向量化操作:Pandas的str.count是底层优化的向量化方法,比Python原生循环效率高几个数量级
  • 精准匹配:通过\b单词边界确保匹配完整术语,避免误统计(如不会把"apples"算作"apple")
  • 大小写兼容:添加re.IGNORECASE标志适配不同大小写的文本场景,可根据需求移除

性能参考

针对示例中的25000行数据,该方法处理时间通常在1秒以内;对于400万行数据,普通服务器上的处理时间可控制在几分钟内(具体取决于硬件性能)。

可选优化方向

如果需要进一步提升性能,可以:

  • 使用swifter库自动选择最优的向量化/并行处理方式
  • 提前对文本做预处理(统一大小写、去除特殊字符)
  • 利用多进程并行处理(仅当硬件有大量空闲核心时收益明显)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 01:11:12