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

如何用正则从txt/rtf文件中提取多篇报纸文章的日期、标题与正文

实现思路

RTF格式自带格式标记,其中加粗文本会被\b和\b0标签包裹,刚好匹配你提到的标题为加粗文本的规则,结合已有的日期提取规则,可按「拆分单篇文章区块→提取区块内标题→提取区块内正文」的逻辑完成提取。

完整实现代码

library(readr)
library(stringr)
library(dplyr)

# 读取RTF文件
raw_rtf <- read_file("bild_afd_all.rtf")

# 第一步:清理无效格式标记,保留核心内容与加粗、换行标记
cleaned_text <- raw_rtf %>%
  # 替换换行符为特殊标记方便后续拆分
  str_replace_all("\\n", "##LINE##") %>%
  # 移除RTF冗余控制符,保留\b(加粗开始)、\b0(加粗结束)
  str_remove_all("\\\\(?!b0?\\b)[a-z0-9]+\\s?") %>%
  str_remove_all("[{}]") %>%
  # 把加粗标记换成自定义分隔符方便匹配
  str_replace_all("\\\\b\\s", "##BOLD_START##") %>%
  str_replace_all("\\\\b0\\s", "##BOLD_END##")

# 第二步:提取所有日期,和你现有逻辑一致
dates <- str_extract_all(cleaned_text, "\\d{1,2} [A-Z][a-z]+ \\d{4}")[[1]]

# 第三步:按日期拆分单篇文章区块
# 先给每个日期加唯一标记,拆分后每个元素对应一篇文章的完整内容
text_with_date_markers <- str_replace_all(cleaned_text, paste0("(", paste(dates, collapse = "|"), ")"), "##DATE_SPLIT##\\1")
article_blocks <- str_split(text_with_date_markers, "##DATE_SPLIT##")[[1]]
# 移除空的首个元素
article_blocks <- article_blocks[article_blocks != ""]

# 第四步:逐块提取标题和正文
result <- lapply(seq_along(article_blocks), function(i) {
  block <- article_blocks[i]
  # 提取块内的加粗文本作为标题,取第一个符合长度要求的(过滤短的无效加粗内容)
  titles <- str_extract_all(block, "##BOLD_START##(.*?)##BOLD_END##")[[1]] %>%
    str_remove_all("##BOLD_START##|##BOLD_END##") %>%
    str_trim() %>%
    .[nchar(.) > 5] # 可根据实际标题长度调整阈值
  title <- ifelse(length(titles) > 0, titles[1], NA_character_)
  
  # 提取正文:去掉日期、标题标记、换行标记后清理空白
  body <- block %>%
    str_remove(dates[i]) %>%
    str_remove_all("##BOLD_START##.*?##BOLD_END##") %>%
    str_replace_all("##LINE##", " ") %>%
    str_squish()
  
  return(tibble(
    日期 = dates[i],
    标题 = title,
    正文 = body
  ))
}) %>% bind_rows()

# 输出结果
print(result)

调整说明

如果提取的标题存在非文章标题的冗余内容,可调整.[nchar(.) > 5]的长度阈值,或增加关键词过滤规则即可。如果使用txt文件提取,可先确认txt中标题是否仍有统一格式特征(比如全大写、前后有空行等),再对应调整匹配规则即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 14:57:02