无论单词中字母的大小如何,我如何使用所有变体来指代单词?

时间:2019-05-10 04:49:18

标签: notepad++ uppercase lowercase

好的,所以我正在制作一个Discord机器人,我正在尝试为服务器中不允许说的单词设置参数(您知道单词的种类,诽谤等等)。因此,我打了个烂字(我将仅以“狗”一词为例),但这只是小写。因此,基本上,它只是“狗”,如果有人在聊天中说“狗”,那么他们的消息将被删除,并且机器人会通过DM向他们发送消息。但是,如果有人说“狗”,那么他们就不会删除其消息。我应该在代码中添加些什么,以确保获取到所有的Slur版本?

我对任何形式的代码都非常陌生,并且我从朋友那里得到了很多帮助来制作这个机器人,所以我真的不知道自己在做什么。

(如果您想查看代码,就在这里。我用单词替换了所有的单词,但我想您明白了要点):

   "bannedWords":[
       "apple",
      "dog",
      "bird",
      "cat"
   ],
   "code":""
}

我希望可以识别出单词“ dog”,“ Dog”,“ DOg”,“ DOG”,“ dOG”,“ doG”,“ DoG”,“ dOg”等,而不仅仅是“ dog”

1 个答案:

答案 0 :(得分:0)

这实际上是一个非常复杂的问题。
最简单的方法是使用小写字母创建一个禁词数组,然后在JavaScript中使用.toLower()或.toLowerCase()之类的东西将其完全操纵以降低产生原因后,将其与字符串进行比较。
但这并不能阻止用户尝试通过使用相似的字符甚至ASCII字符(例如dög,d0g甚至døg)来替代您的列表,从而绕过您的列表。 解决这实际上是问题的复杂部分。
一种选择是使用Regex通配符,例如。运算符。

\d.g\
Will match dog, dög....

但是那将是非常不切实际和耗时的,更不用说如果禁止列表很长的情况下的计算成本。 有几种方法可以完成此操作,最简单的方法(如上所述)将像您刚刚描述的那样仅适合某些仅朋友服务器,但是在检测到这些单词很关键的情况下,使用{{3} } Stemming文章中所述的算法Fuzzy Matching,正则表达式和机器学习都是有效的选项,并且如果彼此有效地结合起来就是最佳选择。