首页 > 解决方案 > 无论单词中字母的大小如何,如何使用所有变体来引用单词?

问题描述

好的,所以我正在制作一个 Discord 机器人,并且我正在尝试为服务器中不允许说出的单词设置参数(你知道种类、诽谤等)。所以,我放了一个诽谤(我只是用“狗”这个词作为例子),但它只是小写的。所以基本上,它只是“狗”,如果有人在聊天中说“狗”,那么他们的消息将被删除,机器人通过 DM 向他们发送消息。但是,如果有人说“狗”,那么他们的信息就不会被删除。我应该在代码中添加什么以确保能够识别所有的连线变体?

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

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

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

我希望能够识别单词“dog”、“Dog”、“DOg”、“DOG”、“dOG”、“doG”、“DoG”、“dOg”等,而不仅仅是“dog”。

标签: notepad++uppercaselowercase

解决方案


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

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

但这将是非常不切实际且耗时的,更不用说如果您的禁止列表很长的话计算成本。有几种方法可以实现这一点,最简单的方法,如上所述,适合您刚才描述的一些仅限朋友的服务器,但在这些词的检测至关重要的情况下,使用词干算法,模糊本文中描述的匹配、正则表达式和机器学习都是有效的选项,如果有效地相互结合,则是最佳选择。


推荐阅读