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

R语言如何拼接OCR行末被连字符截断的单词并保留段落格式

R语言处理OCR行尾连字符拆分单词的实现方法

方法1:基于dplyr+stringr的实现(符合你原有的使用习惯)

你之前的代码问题有两个:一是没有动态提取下一行的首个单词,二是只修改了当前行,没有删除下一行开头已经被拼接走的单词,所以无法得到正确结果。以下是可直接运行的完整代码:

# 加载依赖包
library(dplyr)
library(stringr)

# 示例数据
text <- c("Lorem ipsum dolor sit am-",
          "et consectetur adipis-",
          "cing Quisque euismod, ex vel -aliquam- vestibulum",
          "Nulla lacinia volutpat ipsum sed condimentum")

# 处理逻辑
textdf <- tibble(text = text) %>% 
  mutate(
    # 标记当前行是否以连字符结尾
    end_with_hyphen = str_ends(text, "-"),
    # 提取下一行的第一个单词,最后一行默认赋值为空
    next_first_word = lead(str_extract(text, "^\\w+"), default = ""),
    # 拼接当前行末尾拆分的单词
    text = ifelse(
      end_with_hyphen,
      str_replace(text, "-$", next_first_word),
      text
    ),
    # 标记上一行是否以连字符结尾
    prev_end_hyphen = lag(end_with_hyphen, default = FALSE),
    # 删除当前行开头已经被拼到上一行的单词
    text = ifelse(
      prev_end_hyphen,
      str_replace(text, "^\\w+\\s?", ""),
      text
    )
  )

# 提取结果向量
result <- textdf$text

# 打印验证结果
cat(result, sep = "\n")

运行输出和你要求的效果完全一致:

Lorem ipsum dolor sit amet
consectetur adipiscing
Quisque euismod, ex vel -aliquam- vestibulum
Nulla lacinia volutpat ipsum sed condimentum

方法2:基础R循环实现(无需加载额外包)

如果不想依赖dplyr,也可以用循环实现,逻辑完全相同:

library(stringr)
text <- c("Lorem ipsum dolor sit am-",
          "et consectetur adipis-",
          "cing Quisque euismod, ex vel -aliquam- vestibulum",
          "Nulla lacinia volutpat ipsum sed condimentum")

i <- 1
while(i < length(text)) {
  if(str_ends(text[i], "-")) {
    # 提取下一行首个单词
    first_word <- str_extract(text[i+1], "^\\w+")
    # 拼接当前行
    text[i] <- str_replace(text[i], "-$", first_word)
    # 删除下一行首已被拼接的单词
    text[i+1] <- str_replace(text[i+1], "^\\w+\\s?", "")
  }
  i <- i + 1
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:48:05