如何用Google Apps Script提取词根实现英文关键词单复数匹配?
英文关键词与标题单复数兼容匹配方案解答
1. Google Apps Script 实现词根提取的可行性
完全可以实现,你不需要引入外部依赖,直接把Porter Stemmer这类经典词干提取算法的JS实现复制到GAS脚本里就能用,千级关键词的处理量完全没有性能压力,单次全量处理耗时都在毫秒级。
- 基础处理逻辑:
- 先把关键词、标题统一转小写,按空格拆分为独立单词
- 对每个单词调用词干提取函数得到词根
- 按原顺序拼接词根后做匹配即可
- 注意点:原生词干提取算法对不规则名词变形(比如tooth/teeth、man/men)的覆盖不全,你可以手动补充一个不规则变形映射表,整理百来个常用的不规则名词变形,就能覆盖绝大多数日常使用场景。
- 简单实现示例:
// GAS 中名词单复数归一化示例函数 function normalizeWord(word) { // 不规则变形映射,可按需扩展 const irregularMap = { 'teeth': 'tooth', 'geese': 'goose', 'men': 'man', 'women': 'woman', 'glasses': 'glass' } const lowerWord = word.toLowerCase(); if (irregularMap[lowerWord]) return irregularMap[lowerWord]; // 处理规则复数变形 if (lowerWord.endsWith('ies')) return lowerWord.slice(0, -3) + 'y'; if (lowerWord.endsWith('ves')) return lowerWord.slice(0, -3) + 'f'; if (lowerWord.endsWith('es')) return lowerWord.slice(0, -2); if (lowerWord.endsWith('s')) return lowerWord.slice(0, -1); return lowerWord; }
2. Google Cloud Natural Language API 适配性
完全适配该场景,该API提供的词形还原(Lemmatization)功能,会结合单词的词性将其还原为词典原形,比普通词干提取的准确率更高,比如会自动将teeth还原为tooth,glasses根据语境还原为glass,不需要你自己维护不规则变形表。
- 注意事项:
- 调用需要开通Google Cloud服务并配置API密钥,会产生少量接口调用费用,千级数据的调用成本几乎可以忽略
- 处理速度受网络请求延迟影响,比本地GAS处理慢,适合对准确率要求极高的场景
3. 其他可行解决方案
- 方案一:统一归一化为单数形式匹配
不需要做词根提取,直接把所有单词统一转换为单数形式后比对即可。除了上面提到的手动写规则处理,你也可以直接复用现成的JS单复数转换库的代码,实现成本极低,规则覆盖完整的情况下准确率足够满足普通匹配需求。 - 方案二:关键词预标准化
你的关键词只有一千多条,属于小规模数据,可以提前把所有关键词归一化为词根/单数形式存为列表,匹配时只需要实时处理标题,将标题归一化后到预存的列表中匹配即可,能进一步提升匹配效率。 - 方案三:本地NLP库处理
如果你的运行环境支持引入Node.js依赖,可以直接使用natural、lemmatizer这类开源JS NLP库,自带完善的词形还原、单复数转换功能,不需要自己写规则,准确率也很高。
内容的提问来源于stack exchange,提问作者Carmad94
相关产品推荐
相关产品推荐

