Google Sheets 如何从主表逗号分隔ngram列表中批量移除指定停用词
Google Sheets 批量移除ngram列表中停用词解决方案
前置准备
新建一个名为「停用词表」的工作表,将你需要移除的所有ngram(停用词)逐行放在该表的A列,后续新增停用词直接在该列末尾追加即可,无需修改核心处理逻辑。
方案1:内置函数公式(无需写代码,推荐绝大多数场景使用)
如果仅需要处理单个单元格(以AL3为例),直接在目标单元格输入以下公式:
=TEXTJOIN(",",TRUE,FILTER(SPLIT(AL3,","),ISNA(XMATCH(SPLIT(AL3,","),停用词表!A:A))))
如果需要自动处理AL列所有行的ngram数据,使用批量公式:
=BYROW(AL3:AL,LAMBDA(r,IF(r="","",TEXTJOIN(",",TRUE,FILTER(SPLIT(r,","),ISNA(XMATCH(SPLIT(r,","),停用词表!A:A))))))
逻辑说明
SPLIT(AL3,","):将原逗号分隔的ngram字符串拆分为独立的token数组XMATCH(xxx,停用词表!A:A):将每个token匹配停用词列表,匹配成功返回位置,匹配失败返回#N/AISNA():筛选出匹配失败(即不属于停用词,需要保留)的tokenTEXTJOIN(",",TRUE,xxx):将筛选后的token重新按逗号拼接为字符串- 外层
BYROW实现整列自动遍历处理,无需手动拖拽公式
方案2:轻量自定义脚本(适合万行以上大数据量,运行更流畅)
- 点击顶部菜单栏「扩展程序 > Apps 脚本」打开脚本编辑器
- 删除默认的空白代码,粘贴以下代码后点击保存:
function removeStopwords(ngramStr, stopwordList) { if (!ngramStr) return ""; const stopwordSet = new Set(stopwordList.flat().filter(Boolean)); return ngramStr.split(",").filter(token => !stopwordSet.has(token.trim())).join(","); }
- 回到表格,直接在目标单元格使用自定义函数即可:
- 单个单元格:
=removeStopwords(AL3, 停用词表!A:A) - 整列批量:
=ARRAYFORMULA(IF(AL3:AL="","",removeStopwords(AL3:AL, 停用词表!A:A)))
- 单个单元格:
原公式失效原因说明
你之前使用的REGEXREPLACE方案失效主要有两个问题:
- 正则匹配规则中使用分号作为多个停用词的分隔,而你实际ngram的分隔符是逗号,匹配规则和实际结构不匹配
- 法语特殊字符(如à、é等)在正则
\b边界符下容易出现匹配异常,拆分后再匹配的逻辑兼容性更好,也更容易维护。
内容的提问来源于stack exchange,提问作者Archilecteur
相关产品推荐
相关产品推荐

