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

如何在NLTK处理大型个人语料库时应用Multiprocessing提升效率

语料库词频统计优化方案

原代码核心问题

  • 循环内重复计算:每新增一个文件就将此前所有文件的内容重新拼接、分词、统计词频,整体时间复杂度达到O(n²),这是耗时超长的核心原因,影响远大于未使用多进程
  • 冗余操作:已经通过corpus.words()拿到了分词结果,又额外转成字符串再重新执行word_tokenize,做了完全无用的重复计算

多进程优化后代码

import nltk
from nltk.corpus import PlaintextCorpusReader
import os
from multiprocessing import Pool
from collections import Counter

# 初始化语料读取器
corpus_root = os.getcwd()
file_pattern = ".*.txt"
corpus = PlaintextCorpusReader(corpus_root, file_pattern)
all_files = corpus.fileids()

# 单文件处理函数:子进程执行,返回单个文件的词频统计结果
def count_file_words(file_id):
    words = corpus.words(file_id)
    # 可根据需要添加小写、去停用词等预处理逻辑
    return Counter(words)

if __name__ == '__main__':
    # 进程数可根据CPU核心数调整,默认和CPU核心数一致
    with Pool() as pool:
        # 并行处理所有文件,得到每个文件的词频Counter
        counter_list = pool.map(count_file_words, all_files)
    
    # 合并所有Counter得到全局词频统计
    global_counter = Counter()
    for c in counter_list:
        global_counter.update(c)
    
    # 取Top600高频词
    final = global_counter.most_common(600)
    print(final)

优化说明

  • 先拆分所有待处理文件,通过进程池并行执行单文件词频统计,充分利用多核CPU性能,处理效率随核心数线性提升
  • 跨进程只传输轻量的词频统计结果,不传输大量原始文本,避免不必要的性能损耗
  • 移除所有冗余重复计算,整体时间复杂度降到O(n),即使不开启多进程也比原代码快数十倍以上

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 21:36:00