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

如何将大量RTF文件导入R并关联文件名适配tidytext?

嘿,我刚好处理过类似的批量RTF文本分析任务,结合你提到的思路,给你整理一套能直接用的流程,完美适配tidytext的需求:

批量导入RTF文档并适配tidytext的完整流程

1. 先装好必备的R包

要处理RTF读取、数据整理和文本分词,这几个包是核心:

# 首次运行先安装(已装过的话跳过)
install.packages(c("textreadr", "tidyverse", "tidytext", "stringr"))

# 加载包
library(textreadr)
library(tidyverse)
library(tidytext)
library(stringr)

2. 定位所有RTF文件

先指定你的RTF文件夹路径,然后批量获取所有文件的完整路径:

# 替换成你实际的文件夹路径,比如 "C:/Documents/RTF_Files"
rtf_folder <- "path/to/your/rtf/files"

# 抓取所有后缀为.rtf的文件,带完整路径
rtf_files <- list.files(path = rtf_folder, pattern = "\\.rtf$", full.names = TRUE)

3. 批量读取并生成带文件名的数据框

用map_df批量处理每个文件,同时捕获读取错误(避免个别损坏文件打断整个流程),把文件名和文本内容绑定到数据框里:

# 批量读取RTF,生成包含文件名和完整文本的数据框
rtf_data <- map_df(rtf_files, function(file_path) {
  # 读取RTF内容,出错时返回NA并给出警告
  text_content <- tryCatch({
    read_rtf(file_path) %>% paste(collapse = "\n")  # 把多行文本合并成单字符串
  }, error = function(e) {
    warning(paste("⚠️ 无法读取文件:", file_path, "错误信息:", e$message))
    NA_character_
  })
  
  # 构造每行数据
  tibble(
    file_name = basename(file_path),  # 只保留纯文件名(去掉路径)
    full_text = text_content
  )
})

# 可选:过滤掉读取失败的行
rtf_data <- rtf_data %>% filter(!is.na(full_text))

4. 转换为tidytext兼容的分词格式

把完整文本拆成每行一个词的格式,这是tidytext分析的标准结构,同时保留文件名关联:

# 分词并转为tidy格式,可选移除停用词(比如"的""the"这类无意义词)
tidy_rtf <- rtf_data %>%
  unnest_tokens(word, full_text) %>%  # 把full_text列拆成单个词
  anti_join(stop_words)  # 移除通用停用词,不需要的话删掉这行

5. 从文件名提取信息到独立列

这一步完全根据你的文件名格式来调整,举个常见例子:如果文件名是project_2023_q3_sales.rtf,可以提取项目名、年份、季度:

# 示例:根据你的文件名格式自定义提取规则,这里只是参考!
tidy_rtf <- tidy_rtf %>%
  mutate(
    project_name = str_extract(file_name, "^\\w+"),  # 提取开头的项目名
    year = str_extract(file_name, "\\d{4}"),  # 提取4位年份
    quarter = str_extract(file_name, "q\\d"),  # 提取季度(q1/q2这类)
    document_type = str_extract(file_name, "(?<=_)\\w+(?=\\.rtf)")  # 提取.rtf前的文档类型
  )

小贴士:如果不确定正则怎么写,可以用str_view_all(file_name, "你的正则")来测试匹配效果。

6. 验证结果

最后检查一下数据是否符合预期:

# 查看前几行分词后的数据
head(tidy_rtf)

# 统计每个文件的词数
rtf_data %>%
  mutate(word_count = str_count(full_text, "\\w+")) %>%
  select(file_name, word_count) %>%
  arrange(desc(word_count))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:28:49