You need to enable JavaScript to run this app. Google Sheets基于参数列提取字符串文本实现关键词自动分类
优惠活动
大模型
产品
解决方案
定价
更多

Google Sheets基于参数列提取字符串文本实现关键词自动分类

关键词自动分类解决方案

一、无代码公式方案(适用于千级以内参数体量)

你之前使用嵌套IF+REGEXMATCH的方案维护成本过高,直接用数组公式即可实现自动遍历所有参数,无需手动新增匹配逻辑:

单匹配结果公式(仅返回第一个匹配项)

以Categories工作表D列(对应Parameters工作表D列第一主题参数)为例,在D2单元格输入下方公式,即可自动向下填充整列,同时匹配B、C两列的内容:

=BYROW(B2:C,LAMBDA(row,IF(INDEX(row,1)="","",LET(kw,LOWER(INDEX(row,1)&" "&INDEX(row,2)),IFERROR(INDEX(FILTER(Parameters!D3:D,REGEXMATCH(kw,LOWER(Parameters!D3:D))),1),"")))))

公式逻辑:

  • 遍历Categories工作表B、C列从第二行开始的所有行
  • 把每行B、C列的内容合并后转小写,作为待匹配字符串
  • 到Parameters对应主题列筛选所有符合部分匹配规则的参数
  • 取第一个匹配结果返回,无匹配则返回空值
    如需适配第二、第三主题列,仅需把公式中Parameters!D3:D修改为对应E、F列即可。

多匹配结果公式(返回前2个匹配项,换行分隔)

如果需要最多返回2个匹配结果,用CHAR(10)换行拼接,公式调整为以下内容(以第三主题对应F列为例):

=BYROW(B2:C,LAMBDA(row,IF(INDEX(row,1)="","",LET(kw,LOWER(INDEX(row,1)&" "&INDEX(row,2)),IFERROR(TEXTJOIN(CHAR(10),TRUE,ARRAY_CONSTRAIN(FILTER(Parameters!F3:F,REGEXMATCH(kw,LOWER(Parameters!F3:F))),2,1)),"")))))

该公式会自动把最多前2个匹配的主题用换行拼接,仅1个匹配时返回单个值,无匹配返回空,完全符合你对混种犬多标签分类的需求。

避免分类交叉补充逻辑

如果要实现「已匹配到上层主题的关键词不再参与下层主题匹配」的规则,仅需在下层主题的公式中增加上层主题列非空判断即可,比如第二主题E列的公式可以调整为:

=BYROW(B2:D,LAMBDA(row,IF(INDEX(row,1)="","",IF(INDEX(row,3)<>"","",LET(kw,LOWER(INDEX(row,1)&" "&INDEX(row,2)),IFERROR(INDEX(FILTER(Parameters!E3:E,REGEXMATCH(kw,LOWER(Parameters!E3:E))),1),""))))))

二、Apps Script脚本方案(适用于万级以上大参数体量,性能更稳定)

如果参数量级过千,公式容易出现加载卡顿,用脚本处理效率更高,代码示例如下:

function autoCategorizeKeywords() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  // 读取参数表所有主题参数
  const paramsSheet = ss.getSheetByName("Parameters");
  const getParamList = col => paramsSheet.getRange(col + "3:" + col + paramsSheet.getLastRow()).getValues().flat().filter(String);
  const theme1 = getParamList("D");
  const theme2 = getParamList("E");
  const theme3 = getParamList("F");
  // 读取待分类关键词数据
  const cateSheet = ss.getSheetByName("Categories");
  const lastRow = cateSheet.getLastRow();
  const kwRows = cateSheet.getRange("B2:C" + lastRow).getValues();
  const res = [];
  kwRows.forEach(([colB, colC]) => {
    const kw = (colB + " " + colC).toLowerCase();
    // 匹配第一主题,最多2个结果
    const t1 = theme1.filter(item => kw.includes(item.toLowerCase())).slice(0,2).join("\n");
    // 第一主题匹配到则第二、第三主题返回空,避免交叉
    const t2 = t1 ? "" : theme2.filter(item => kw.includes(item.toLowerCase())).slice(0,2).join("\n");
    const t3 = t1 || t2 ? "" : theme3.filter(item => kw.includes(item.toLowerCase())).slice(0,2).join("\n");
    res.push([t1, t2, t3]);
  })
  // 结果写入Categories表D-F列
  cateSheet.getRange(2, 4, res.length, 3).setValues(res);
}

使用方法:

  • 打开表格点击顶部「扩展程序」-「Apps Script」,粘贴代码保存
  • 可手动点击运行,也可设置触发器,参数更新后自动重新分类

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 04:36:04