【问题标题】:ocr : unbreak the words cut at the end of lines and keep the paragraphsocr : 解开在行尾剪切的单词并保留段落
【发布时间】:2026-01-15 07:20:02
【问题描述】:

我有一个字符串向量。 向量的每个元素对应于一行 ocerized 文本。 每行的最后一个单词可以用破折号(或不)删减并继续下一行,即向量的下一个元素。

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

我想要什么: 在保持段落中文本布局的同时重构被剪切的单词。

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

我不想要的:

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

我做了什么: 我将向量的行转换为数据数组,因为我认为 dplyr 包中的函数(领先和滞后)可能对我有用。

textdf <- as.data.frame((text))


library(dplyr)
textdf  <- textdf %>%
rename( text = '(text)')

我认为应该做的事情: 如果字符串以破折号结尾,则选择下一行的第一个单词,删除破折号并剪切并粘贴该行末尾的单词。

library(stringr)
 textdf  <- textdf %>%
 mutate(text = str_replace(text, "-$", lag("^.+\\s")))

【问题讨论】:

    标签: r dplyr stringr


    【解决方案1】:

    这是一种方法-

    library(dplyr)
    
    data.frame(text) %>%
             #The word end with "-"
      mutate(cut_word = grepl('-$', text), 
             #Remove the last "-"
             text = sub('-$', '', text), 
             #If cut_word get 1st word from next value and paste it in current value.
             text = ifelse(cut_word, paste0(text, stringr::word(lead(text), 1)), text), 
             #Remove the first word if previous value has cut_word.
             text = ifelse(lag(cut_word, default = FALSE), sub('.*?\\s', '', text), text)) %>%
      select(-cut_word)
    
    #                                          text
    #1                   Lorem ipsum dolor sit amet
    #2                       consectetur adipiscing
    #3 Quisque euismod, ex vel -aliquam- vestibulum
    #4 Nulla lacinia volutpat ipsum sed condimentum
    

    【讨论】:

    • 感谢您的帮助。