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

如何统计用户输入中前5个高频出现的指定违禁词?

解决违禁词频率统计及取前5的问题

你的现有代码只能返回第一个匹配到的违禁词,完全没做频率统计,肯定满足不了需求。下面是实现你要的功能的完整方案:

步骤说明

  1. 计数统计:遍历所有违禁词,统计每个词在输入文本里的出现次数(要处理重复出现的情况)
  2. 过滤无效项:去掉那些没在文本里出现过的违禁词
  3. 排序取前5:按出现次数从高到低排序,取前5个后转换成指定格式

完整代码

// 转义正则特殊字符,避免违禁词里的特殊符号干扰匹配
const escapeRegExp = (str) => {
  return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
};

// 统计违禁词频率并返回前5
const getTopBadWords = (inputText, badWordsList) => {
  // 初始化计数对象
  const countMap = {};

  // 遍历每个违禁词,统计出现次数
  badWordsList.forEach(word => {
    const regex = new RegExp(escapeRegExp(word), 'gi'); // g全局匹配,i不区分大小写(可选,根据需求调整)
    const matches = inputText.match(regex);
    countMap[word] = matches ? matches.length : 0;
  });

  // 转换成数组并过滤掉计数为0的项,再按次数降序排序
  const sortedBadWords = Object.entries(countMap)
    .filter(([word, count]) => count > 0)
    .sort((a, b) => b[1] - a[1]);

  // 取前5个,转换成"单词-出现次数"格式
  return sortedBadWords.slice(0, 5).map(([word, count]) => `${word}-${count}`);
};

// 测试示例
const textWords = '垃圾垃圾,混蛋!垃圾,笨蛋笨蛋笨蛋,混蛋';
const listOfBadWords = ['垃圾', '混蛋', '笨蛋', '傻瓜', '智障'];

const top5 = getTopBadWords(textWords, listOfBadWords);
console.log(top5); // 输出: ["笨蛋-3", "垃圾-3", "混蛋-2"]

代码解释

  • escapeRegExp:处理违禁词里的正则特殊字符(比如$、*这类),防止匹配出错
  • getTopBadWords核心逻辑:
    • 用正则全局匹配每个违禁词,通过match结果的长度得到出现次数
    • 把计数对象转成键值对数组,过滤掉没出现的词后排序
    • 截取前5个并转换成要求的格式
  • 如果不需要不区分大小写的匹配,把正则里的i去掉即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 02:41:26