You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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))

# 清理残留的?&amp;(注意转义正则特殊字符?和&)
new_df$V1 <- gsub("\\?&amp;", "", new_df$V1)

# 如果还有单独的?或&amp;残留,可以一起处理
new_df$V1 <- gsub("\\?|&amp;", "", 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 20:17:37