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
相关产品推荐
相关产品推荐

