如何基于多个摘要TXT文件制作制表符分隔的汇总文件?
需求说明
创建包含所有摘要的制表符分隔文件,每条记录的每个字段都需单独设列,包括Presenter、Title……Abstract。关键词需拆分至单独列,需满足最多6个关键词的限制。
单个TXT文本文件样例:
代码实现方案
你现有的代码仅完成了文件列表读取、单文件内容读取的基础操作,补充完整的可运行代码如下:
# 加载依赖包 if (!require(stringr)) install.packages("stringr") library(stringr) if (!require(dplyr)) install.packages("dplyr") library(dplyr) # 读取Abstracts目录下所有txt文件,匹配后缀避免读入其他格式文件 files_to_read <- list.files(path="Abstracts", pattern = "\\.txt$", full.names = TRUE) # 定义单个摘要文件处理函数 process_abstract <- function(file_path) { # 读取文件内容并移除空行 lines <- readLines(con = file_path, warn = FALSE) lines <- lines[nzchar(lines)] # 按字段标识提取对应内容,可根据你实际文件的字段格式调整匹配规则 presenter <- str_extract(lines[str_detect(lines, "^Presenter: ")], "(?<=Presenter: ).*") |> trimws() title <- str_extract(lines[str_detect(lines, "^Title: ")], "(?<=Title: ).*") |> trimws() # 处理关键词:拆分后最多保留6个,不足补空值 raw_keywords <- str_extract(lines[str_detect(lines, "^Keywords?: ")], "(?<=Keywords?: ).*") |> trimws() keywords <- str_split(raw_keywords, "[,,;;]\\s*")[[1]] keywords <- c(keywords, rep(NA_character_, 6 - length(keywords)))[1:6] # 提取摘要内容,默认摘要在Abstract标识之后 abstract_start <- which(str_detect(lines, "^Abstract: ")) abstract <- if (length(abstract_start) > 0) { paste(lines[abstract_start:length(lines)], collapse = " ") |> str_remove("^Abstract: ") |> trimws() } else { NA_character_ } # 组装为单行数据 return(data.frame( Presenter = presenter, Title = title, Keyword1 = keywords[1], Keyword2 = keywords[2], Keyword3 = keywords[3], Keyword4 = keywords[4], Keyword5 = keywords[5], Keyword6 = keywords[6], Abstract = abstract, stringsAsFactors = FALSE )) } # 批量处理所有摘要文件 all_result <- lapply(files_to_read, process_abstract) |> bind_rows() # 输出为制表符分隔的TSV文件 write.table(all_result, file = "全量摘要汇总.tsv", sep = "\t", row.names = FALSE, na = "", quote = FALSE)
注意事项
- 上述代码的字段匹配规则默认摘要文件内每个字段都有
Presenter:、Title:这类明确的前缀标识,如果你的实际文件格式和该假设不一致,调整对应行的正则匹配规则即可 - 如果关键词的分隔符不是逗号、分号,修改
str_split函数中的分隔符正则即可
内容的提问来源于stack exchange,提问作者useR
相关产品推荐
相关产品推荐

