R语言移除换行符失败求助:残留'n'与相邻单词拼接
解决R文本预处理中的换行残留与单词拼接问题
问题分析
- 换行符未移除:从PDF提取的文本中常包含
\n或\r\n换行符,str_squish()仅压缩连续空白,若换行符与连字符等字符结合,无法彻底清理。 - 单词拼接(如hilln):多因PDF中存在换行连字符(单词被拆分到两行,末尾以
-加换行结尾),tm::removePunctuation()直接移除标点后,会错误将拆分的单词拼接;也可能是撇号处理不当导致残留字符拼接。
修正后的代码
library(tm) library(stringr) library(pdftools) # 读取PDF并预处理单文件文本 All_Files <- list.files(pattern = "pdf$") All_opinions <- lapply(All_Files, function(file) { text <- pdf_text(file) # 处理PDF换行连字符:移除单词末尾的"-"加换行,合并拆分单词 text <- str_replace_all(text, "-\\n", "") # 将所有换行符替换为空格 text <- str_replace_all(text, "\\n|\\r\\n", " ") return(text) }) # 语料库构建与后续预处理 document <- Corpus(VectorSource(All_opinions)) social_sentences <- document %>% tm_map(content_transformer(tolower)) %>% tm_map(content_transformer(str_squish)) %>% tm_map(content_transformer(function(x) paste(x, collapse = " "))) %>% as.character() %>% str_split(fixed(".")) %>% unlist() %>% tm::removePunctuation(preserve_intra_word_dashes = FALSE) %>% str_squish() %>% Filter(function(x) x != "", .)
关键调整说明
- 提前处理PDF文本:在读取每个PDF后立即处理换行连字符和换行符,从源头避免字符拼接问题。
str_replace_all(text, "-\\n", "")专门修复PDF中常见的单词拆分换行,比如把hill-\nside还原为hillside。 - 优化预处理顺序:先统一转小写、压缩空白,再合并文本分割句子,逻辑更清晰,减少中间步骤的干扰。
- 过滤空字符串:分割句子后易产生空元素,用
Filter过滤掉,避免影响后续分析。
额外优化建议
若仍有特殊字符残留,可添加自定义替换规则:
# 移除所有非字母、数字和空格的字符(按需调整规则) social_sentences <- str_replace_all(social_sentences, "[^a-zA-Z0-9 ]", "")
内容的提问来源于stack exchange,提问作者Carla
相关产品推荐
相关产品推荐

