【问题标题】:How do I refer to a word using all variations, no matter the size of the letters within the words?无论单词中字母的大小如何,如何使用所有变体来引用单词?
【发布时间】:2019-05-10 04:49:18
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 考虑 .toLowerCase() 或 .toLower() 。当在字符串上调用时,这将使所有字符变为小写。
  • 正如您可能认为的那样,列出所有变体既乏味又不切实际,因此您确实需要一些代码来统一它们。不幸的是,discord 机器人是用任意数量的语言编写的,使用任意数量的框架,我们不知道您使用的是哪一个,这使得这个问题就像“我如何正确喂养我的宠物”一样可以回答,而无需告诉我们是否它是 Python、Chicken 或 Julia。
  • Notepad++ 与您的问题有什么关系?您实际使用的是什么语言/工具?
  • 语言是 JSON,对于那些询问的人。

标签: notepad++ uppercase lowercase


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    • 1970-01-01
    • 2020-02-14
    • 2011-10-22
    • 1970-01-01
    • 2021-07-18
    • 1970-01-01
    相关资源
    最近更新 更多