使用R清理含单词内部多余空格的PDF文本数据
解决PDF文本单词内部多余空格的清理方案
针对读取PDF后出现的单词内部多余空格问题,可以通过正则匹配+自定义替换函数的方式,精准合并单词内部空格同时保留独立单词(如"a"、"I")间的空格。以下是具体实现:
解决方案代码
library(dplyr) library(stringr) # 示例数据 txt <- structure(list(id = 1:3, data = c("Then I cre ated a c h a r t using Excel", "other p r inc ip le is that when a person", "M R . C O O K S O N : Mr . Speaker , on behal f of")), class = "data.frame", row.names = c(NA, -3L)) # 定义清理函数 clean_pdf_text <- function(text) { # 匹配所有非独立a/I的、由空格分隔的字母序列,替换为无空格版本 str_replace_all(text, "\\b(?!a\\b|I\\b)[A-Za-z]+(?: [A-Za-z]+)+\\b", function(match) { str_replace_all(match, " ", "") }) } # 应用清理函数 df_clean <- txt %>% mutate(revised = clean_pdf_text(data)) # 查看结果 print(df_clean$revised)
代码解释
正则匹配逻辑:
\\b(?!a\\b|I\\b):排除独立的"a"或"I"(\\b表示单词边界,(?!...)是负向预查,确保不匹配单独的"a"/"I")[A-Za-z]+(?: [A-Za-z]+)+:匹配由空格分隔的多段字母序列(即被拆分的单词)- 整个正则会选中所有需要合并的拆分单词,不会影响独立的"a"/"I"或正常单词间的空格
替换函数:
对每个匹配到的拆分单词序列,用str_replace_all移除内部所有空格,完成合并。
验证结果
运行代码后,df_clean$revised的输出为:
[1] "Then I created a chart using Excel" [2] "other principle is that when a person" [3] "MR . COOKSON : Mr . Speaker , on behalf of"
完全符合需求:合并了单词内部的多余空格,同时保留了"a"、"I"等独立单词的空格。
内容的提问来源于stack exchange,提问作者Nick Yarmey
相关产品推荐
相关产品推荐

