notepad++ - 无论单词中字母的大小如何,如何使用所有变体来引用单词?
问题描述
好的,所以我正在制作一个 Discord 机器人,并且我正在尝试为服务器中不允许说出的单词设置参数(你知道种类、诽谤等)。所以,我放了一个诽谤(我只是用“狗”这个词作为例子),但它只是小写的。所以基本上,它只是“狗”,如果有人在聊天中说“狗”,那么他们的消息将被删除,机器人通过 DM 向他们发送消息。但是,如果有人说“狗”,那么他们的信息就不会被删除。我应该在代码中添加什么以确保能够识别所有的连线变体?
我对任何形式的编码都非常陌生,而且我从朋友那里得到了大量帮助来制作这个机器人,所以我真的不知道我在做什么。
(如果你想看代码,就在这里。我用单词替换了所有的诽谤,但我认为你明白了要点):
"bannedWords":[
"apple",
"dog",
"bird",
"cat"
],
"code":""
}
我希望能够识别单词“dog”、“Dog”、“DOg”、“DOG”、“dOG”、“doG”、“DoG”、“dOg”等,而不仅仅是“dog”。
解决方案
这实际上是一个非常复杂的问题。
最简单的方法是创建一个小写的禁用词数组,并在使用 JavaScript 中的 .toLower() 或 .toLowerCase() 之类的东西完全操纵它以降低原因后将其与字符串进行比较。
但这并不会阻止用户试图绕过您的列表,使用相似的字符甚至 ASCII 字符作为替代,例如 dög、d0g 甚至 døg。解决这个问题实际上是问题的复杂部分。
一种选择是使用正则表达式通配符,例如 . 操作员。
\d.g\
Will match dog, dög....
但这将是非常不切实际且耗时的,更不用说如果您的禁止列表很长的话计算成本。有几种方法可以实现这一点,最简单的方法,如上所述,适合您刚才描述的一些仅限朋友的服务器,但在这些词的检测至关重要的情况下,使用词干算法,模糊本文中描述的匹配、正则表达式和机器学习都是有效的选项,如果有效地相互结合,则是最佳选择。
推荐阅读
- powerbi - 忽略 PowerBI 发送到 SSAS 的过滤器之一
- java - 如何在控制台中的启动时设置数据库连接参数 jar spring-boot app
- docker - 如何正确组合这个 docker-compose.yml?
- python - 如何将 youtube-dl python 设置为始终选择 1080p
- python - Jupyter Notebook)是否可以通过添加对应于数据集中公共列的行来创建新数据集?
- c++ - 泄密者:发现错误!内存没有被释放
- php - 爆炸图像base64时Laravel未定义偏移量1
- mongodb - 使用 MongoDB Atlas 的 REST API,在数据库中发布条目时 findOne() 出现问题
- sql - 使用 Hive 将列转置为同一表中的行
- javascript - 元素没有隐藏在 javascript 中