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

如何用R提取文本各段落首句并保留原有段落结构?

R 语言提取段落首句实现方案

首先明确默认分隔规则,你可以根据自己的文本格式调整规则:

  • 段落分隔:默认以连续2个及以上换行符作为段落边界
  • 句子分隔:默认以中文句号。、感叹号!、问号?,或英文./!/?作为句子结束标记

显式Loop实现(符合你的需求)

# 替换为你自己的输入文本
input_text <- "这是第一段的第一句话。这是第一段的第二句话,后面还有更多内容。

这是第二段的开头,也就是我们要提取的首句?第二段剩下的内容不需要提取。

第三段的第一句在这里。第三段还有其他内容,全部忽略。"

# 步骤1:拆分原始文本为独立段落
paragraphs <- unlist(strsplit(input_text, split = "\\n\\s*\\n"))
# 拆分规则适配两个换行中间有空白字符的排版场景

# 步骤2:初始化结果存储向量
first_sentences <- c()

# 步骤3:遍历每个段落提取首句
for (p in paragraphs) {
  # 匹配第一个句子结束标记的位置
  end_pos <- regexpr("[。!?.!?]", p)[1]
  if (end_pos == -1) {
    # 段落无结束标记时直接取整段
    first_sent <- p
  } else {
    # 提取从开头到结束标记的完整首句
    first_sent <- substr(p, 1, end_pos)
  }
  first_sentences <- c(first_sentences, first_sent)
}

# 步骤4:拼接为首句各成独立段落的结果
output_text <- paste(first_sentences, collapse = "\n\n")

# 打印输出结果
cat(output_text)

运行上述代码得到的输出如下:

这是第一段的第一句话。

这是第二段的开头,也就是我们要提取的首句?

第三段的第一句在这里。

规则调整说明

  • 如果你的文本段落用单个换行分隔,把拆分的split参数改为\\n即可
  • 如果需要避免英文缩写(比如Mr.)的误判,可以调整正则匹配逻辑增加缩写场景过滤
  • 处理大文本时可以用purrr包的向量化操作替换loop,运行效率更高:
library(purrr)
first_sentences <- map_chr(paragraphs, function(p) {
  end_pos <- regexpr("[。!?.!?]", p)[1]
  ifelse(end_pos == -1, p, substr(p, 1, end_pos))
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:54:02