在R数据框中使用停用词无法删除'?&'的问题求助
解决tm包removeWords无法删除特殊字符及正则报错问题
这问题我之前也碰到过,核心原因是removeWords的底层正则逻辑不太适合处理?、&这类非单词特殊字符,咱们一步步拆解解决:
为什么会出现这个问题?
tm::removeWords的实现逻辑是给每个停用词前后加上单词边界\b,比如你把?加入停用词,它会生成正则模式\b?\b——但?在正则里是量词(表示前面的元素可选),这里\b?的写法属于语法错误,因为?前面没有可重复匹配的元素,所以触发了"quantifier does not follow a repeatable item"的报错。
另外,就算你转义了?,\b\?\b也没法匹配和数字连在一起的?&,因为数字属于单词字符,?是非单词字符,它们之间没有单词边界,所以removeWords识别不到要删除的内容。
两种可行的解决方案
方案1:用gsub直接清理残留字符
既然removeWords搞不定特殊字符,咱们直接用基础的正则替换工具gsub,手动处理残留的?&:
require(tm) new_df <- as.data.frame(removeWords(old_df$data, stopwords)) # 清理残留的?&(注意转义正则特殊字符?和&) new_df$V1 <- gsub("\\?&", "", new_df$V1) # 如果还有单独的?或&残留,可以一起处理 new_df$V1 <- gsub("\\?|&", "", new_df$V1)
方案2:直接提取目标内容(更高效)
其实你最终想要的是经纬度数据,与其删一堆停用词,不如直接用正则提取想要的内容,一步到位:
library(stringr) # 从原始文本中提取所有经纬度(匹配"数字.数字,数字.数字"的模式) coords_list <- str_extract_all(old_df$data, "\\d+\\.\\d+,\\d+\\.\\d+")[[1]] # 把提取到的经纬度整理成你需要的格式 cleaned_content <- paste("data", paste(coords_list, collapse = " ")) # 生成新的数据框 new_df <- data.frame(data = cleaned_content)
这个方法不仅避免了停用词列表的繁琐维护,还能精准拿到你需要的核心数据,出错概率更低。
内容的提问来源于stack exchange,提问作者HelpMePlease
相关产品推荐
相关产品推荐

