敏感词过滤

  最近在项目中遇到这样一个需求,一个中文敏感词数组chineseWords,一个英文敏感词数组englishWords,现在有用户聊天中输入的一句话,这句话有三种情况:

  1,全是中文和标点符号

  2,全是英文加标点符号

  3,中英文标点符号混合

现在要判断这句话是不是包含敏感词的(中文或英文),如果包含即为敏感语句。具体需求说明如下:

首先把判断一个语句是否是敏感语句的功能封装成一个npm包,这样无论在哪个项目中需要此功能直接导入使用就可以了。(不会封装npm包的可参考此教程 https://segmentfault.com/a/1190000011095467)

npm包的核心代码如下:

const chineseWords = ['小穴', '寻乐论坛', '小姐威客网', '小姐信息', '二b']
const englishWords = ['zoophilia', 'yiffy', 'yeasty', 'yaoi', 'sb']
const judgeSensitiveWords = (str) => {
  // 如果存在敏感词就返回true , 不存在返回false
  let flag = false
  // 判断中文
  for (let i = 0; i < chineseWords.length; i += 1) {
    if (str.indexOf(chineseWords[i]) !== -1) {
      // 说明中文中包含敏感词
      flag = true
      break
    }
  }

  if (flag === false) {
    // 如果中文中没有敏感词就继续判断英文
    const reg = /[a-zA-Z]+/ig
    // match方法返回的是由匹配结果组成的数组,即语句中所有连写的英文都将被筛选出来,如果没有匹配的会返回null
    const resultS2 = str.match(reg)
    // console.log('judgeSensitiveWords(str) ', resultS2)
    if (resultS2) {
      for (let i = 0; i < englishWords.length; i += 1) {
        if (resultS2.indexOf(englishWords[i]) !== -1) {
          flag = true
          break
        }
      }
    }
  }

  return flag
}

export default judgeSensitiveWords

使用如下:

// @dby-h5-clients/judge-sensitive-words即为npm包中package.json文件中的name
import judgeSensitiveWords from '@dby-h5-clients/judge-sensitive-words'

onChatMsg: (content) => {
      // console.log('judgeSensitiveWords(str) ', judgeSensitiveWords(content))
      if (judgeSensitiveWords(content)) {
        // 更新到 store
        store.chatList.add({
          msg: content,
          username: store.selfUserInfo.nickname,
          timestamp: Date.now(),
          role: store.selfUserInfo.role,
          uid: store.selfUserInfo.uid,
        })
      } else {
        // 发送到 apps
        stepConnectAPPSServer.finish.then((apps) => {
          apps.sendChat(content)
        })
      }
    },

这样此功能就实现了。

 

posted @ 2018-11-01 10:52  贝子涵夕  阅读(898)  评论(0编辑  收藏  举报