如何为TXT文件段落间添加空行以适配Quanteda的corpus_reshape命令
解决方案
方案1:不修改原始TXT文件,直接在R中处理(更推荐)
该方案无需改动原始文件,直接在语料库构建环节适配corpus_reshape的段落识别规则,避免误操作损坏原始数据:
- 第一步:安装依赖包并批量读取所有TXT文件
install.packages(c("quanteda", "readtext", "stringr")) library(readtext) library(quanteda) library(stringr) # 替换为你存放TXT文件的文件夹路径,编码不对可尝试改为GBK txt_data <- readtext("你的TXT文件夹路径/*.txt", encoding = "UTF-8")
- 第二步:提取正文内容并替换换行符,适配段落识别规则
corpus_reshape默认以连续两个换行符\n\n作为段落边界,我们只需把正文内的单个换行符替换为双换行符即可:
txt_data$text <- str_replace_all(txt_data$text, # 匹配Body到End of Document之间的正文内容 "(?s)(?<=Body\\n)(.*?)(?=\\nEnd of Document)", # 把正文内的单个换行替换为双换行 function(m) str_replace_all(m, "\\n", "\\n\\n"))
- 第三步:构建语料库并拆分段落
# 构建全文语料库 news_corpus <- corpus(txt_data) # 按段落拆分,每个段落为独立文档 para_corpus <- corpus_reshape(news_corpus, to = "paragraphs")
方案2:批量修改TXT文件,给正文段落加空行
如果需要修改原文件适配其他工具的识别规则,可以用该方案,操作前务必备份所有原始TXT文件:
library(stringr) # 替换为原始TXT文件夹路径 origin_dir <- "原始TXT文件夹路径" # 替换为修改后文件的存储路径,不要直接覆盖原文件 output_dir <- "修改后TXT存储路径" dir.create(output_dir, showWarnings = FALSE) # 获取所有TXT文件路径 txt_list <- list.files(origin_dir, pattern = "\\.txt$", full.names = TRUE, ignore.case = TRUE) # 批量处理每个文件 for (file_path in txt_list) { # 读取文件内容 content <- readLines(file_path, encoding = "UTF-8", warn = FALSE) content <- paste(content, collapse = "\n") # 替换正文内的单换行符为双换行符 modified_content <- str_replace_all(content, "(?s)(?<=Body\\n)(.*?)(?=\\nEnd of Document)", function(m) str_replace_all(m, "\\n", "\\n\\n")) # 写入新文件 writeLines(modified_content, con = file.path(output_dir, basename(file_path)), useBytes = TRUE) }
注意事项
- 若你部分文件的正文边界标记和示例不同,只需调整正则表达式中的
Body和End of Document为对应标记即可 - 读取文件出现乱码时,可把代码中的
encoding = "UTF-8"替换为encoding = "GBK"尝试
内容的提问来源于stack exchange,提问作者lwe
相关产品推荐
相关产品推荐

