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

R语言使用gsub移除停用词时出现tre-compile.c正则错误如何解决?

错误原因

你遇到的报错是R内置的默认TRE正则引擎无法处理超长多分支匹配正则导致的解析失败:你拼接的停用词正则包含数百个分支且存在大量重复内容,超出了TRE引擎的解析长度限制。

解决方案

方案1:更换正则引擎(修改成本最低)

开启PCRE正则引擎即可兼容长正则匹配,同时你当前代码中不需要用lapply遍历,gsub本身支持向量化处理整列字符串,另外先对停用词去重可以大幅缩短正则长度,修改后的代码如下:

# 先对停用词去重,避免冗余内容增加正则长度
unique_stopwords <- unique(stop_words$word)
sw <- paste0("\\b(", paste0(unique_stopwords, collapse="|"), ")\\b")
# 增加perl=TRUE参数启用PCRE引擎,直接向量化处理整列
dat1$Comments <- gsub(pattern=sw, replacement=" ", x=dat1$Comments, perl = TRUE)

方案2:改用无正则的停用词过滤逻辑(稳定性最高)

你后续本来就要用tidytext做分词统计,直接先拆词再过滤停用词可以完全避开正则限制,逻辑更稳定:

library(dplyr)
library(tidytext)

# 先拆分单词、过滤停用词,再按行拼接回字符串
dat_clean <- dat1 %>%
  mutate(row_id = row_number()) %>%
  unnest_tokens(word, Comments) %>%
  anti_join(stop_words, by = "word") %>%
  group_by(row_id) %>%
  summarise(Comments = paste(word, collapse = " ")) %>%
  ungroup()

# 后续用dat_clean做高频短语统计即可
top_phrases <- dat_clean %>%
  unnest_tokens(bigram, Comments, 'ngrams', n = 2, to_lower = TRUE) %>% # n值替换为你需要的短语长度
  count(bigram, sort = TRUE)
其他代码优化建议
  1. 你原有移除空格的逻辑存在冗余:trimws已经可以直接移除字符串首尾的空格,不需要再执行第二行的首尾空格替换。
  2. unnest_tokens参数中的Length需要替换为你实际需要的短语长度数值,比如统计二元短语填n=2、三元短语填n=3,如果未提前定义Length变量会触发额外报错。

内容的提问来源于stack exchange,提问作者Victor Gatica

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:06:04