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

如何将R数据框的文章观测拆分为带对应标题的段落子观测

实现方案

核心思路是将单篇文章的段落拆分逻辑封装为可复用的函数,批量应用到全量文本后展开为「一段一行」的长表结构,自动关联对应文章标题。

前置注意事项

R语言中正则表达式的特殊字符需要用双反斜杠转义,你原代码中的正则、反斜杠匹配规则需要调整写法,否则会报错或匹配失效。

推荐方案:tidyverse 实现(代码最简洁)

# 加载依赖包
library(tidyverse)

# 封装单篇文章的段落拆分函数
split_paragraph <- function(text) {
  pattern = "\\bM(?:rs?|s)\\.\\s"
  aa <- str_replace_all(text, pattern, "XXXX")
  bb <- unlist(strsplit(aa, "XXXX"))
  # 兼容无匹配的空文本场景,避免索引报错
  if(length(bb) <= 1) return(character(0))
  cc <- bb[-1]
  dd <- gsub("[\\\\]", " ", cc)
  paragraph_vec <- gsub("[^[:alnum:]]", " ", dd)
  # 可选:去除空白段落、多余空格
  paragraph_vec <- str_squish(paragraph_vec)
  paragraph_vec[paragraph_vec != ""]
}

# 批量处理全量数据
result_df <- df %>%
  # 对每篇文章调用拆分函数,生成段落列表列
  mutate(paragraph = map(text, split_paragraph)) %>%
  # 展开列表列,每段对应一行,自动保留所属文章的title字段
  unnest(paragraph) %>%
  # 可选:仅保留需要的字段
  select(title, paragraph)

最终输出的result_df 中每一行对应一个独立段落,title 字段即为该段落所属文章的标题。

基础R实现(无需额外安装包)

# 复用拆分函数
split_paragraph <- function(text) {
  pattern = "\\bM(?:rs?|s)\\.\\s"
  aa <- gsub(pattern, "XXXX", text, perl = TRUE)
  bb <- unlist(strsplit(aa, "XXXX"))
  if(length(bb) <= 1) return(character(0))
  cc <- bb[-1]
  dd <- gsub("[\\\\]", " ", cc)
  paragraph_vec <- gsub("[^[:alnum:]]", " ", dd)
  paragraph_vec <- trimws(paragraph_vec)
  paragraph_vec[paragraph_vec != ""]
}

# 循环处理所有文章
para_list <- lapply(1:nrow(df), function(i) {
  para <- split_paragraph(df$text[i])
  if(length(para) == 0) return(NULL)
  data.frame(title = df$title[i], paragraph = para, stringsAsFactors = FALSE)
})
result_df <- do.call(rbind, para_list)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:45:04