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

批量处理8000个TXT文件生成词数DataFrame速度过慢,求优化

处理大量TXT文件的速度优化方案

原代码的低效问题分析

  • 内层for(i in 1:length(files))完全冗余:处理单个文件时重复赋值多达8000次,纯浪费计算资源
  • 字符串清理逻辑繁琐:多次调用str_replace_all处理空格,效率低下
  • 逐个读取文件:未利用批量读取的优势,循环开销大
  • 数据框初始化方式不够高效:循环修改数据框的操作本身就很慢

优化方案及代码实现

1. 基础优化版(单线程,大幅提升速度)

通过批量读取、简化字符串处理、移除冗余循环实现核心优化:

library(dplyr)
library(stringr)
library(readtext)

# 定义文件路径,避免重复书写
txt_path <- 'E:/txt/GEM_TXT_2022'
# 获取所有TXT文件的完整路径
files <- list.files(path = txt_path, pattern = "\\.txt", full.names = TRUE)

# 批量读取所有文件,直接返回包含文件名和文本的data.frame
txt_data <- readtext(files)

# 批量清理文本并计算词数
txt_data <- txt_data %>%
  mutate(
    # 一步完成文本清理:移除数字、标点,压缩所有连续空白为单个空格,去除首尾空格
    cleaned_text = str_remove_all(text, "[:digit:]|[:punct:]") %>% str_squish(),
    # 按非空白字符序列计数(即词数)
    word_count = str_count(cleaned_text, "\\S+")
  )

# 整理成最终结果
word_count_result <- txt_data %>%
  select(doc_id, word_count) %>%
  tibble::column_to_rownames("doc_id")

head(word_count_result)

2. 并行处理版(针对超大量文件,利用多核CPU)

如果文件数量极多,可通过并行处理进一步提速:

library(dplyr)
library(stringr)
library(readtext)
library(furrr)

# 初始化并行会话,使用所有可用CPU核心
plan(multisession)

txt_path <- 'E:/txt/GEM_TXT_2022'
files <- list.files(path = txt_path, pattern = "\\.txt", full.names = TRUE)

# 并行处理每个文件
word_count_list <- future_map(files, function(file) {
  txt <- readtext(file)$text
  # 清理文本
  cleaned <- str_remove_all(txt, "[:digit:]|[:punct:]") %>% str_squish()
  # 计算词数
  count <- str_count(cleaned, "\\S+")
  # 返回文件名和对应词数
  tibble(doc_id = basename(file), word_count = count)
})

# 合并所有并行结果
word_count_result <- bind_rows(word_count_list) %>%
  tibble::column_to_rownames("doc_id")

head(word_count_result)

# 关闭并行会话
plan(sequential)

额外提速小技巧

  • 避免使用setwd(),直接用full.names = TRUE获取完整文件路径,减少路径相关错误
  • 若文件编码不一致,在readtext中指定encoding参数(如encoding = "UTF-8"),避免读取异常
  • 若仅需词数,可尝试用base R的readLines或readChar读取文件,跳过readtext的额外解析开销

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 18:56:01