增加最大监控词数限制

我的文件包含 2805 多个不良词汇,但系统仅允许 2000 个不良词汇。我该如何添加更多词汇?如果我想从文本文件中添加 10,000 个不良词汇,该怎么做?目前系统仅允许我最多添加 2000 条条目。

目前暂无提高此限制的打算。如果这会影响您的使用,建议您自行开发或委托开发相应的插件。

2 个赞

我发现自己可能会因为使用监视词来对抗重复性垃圾邮件而遇到此限制,并对将来可能对其他人(如果不是 OP)有用的内容有一些想法。

一种无需更改代码即可解决此问题的方法是更改为 Using Regex with Watched Words 并将多个单词合并为一个正则表达式。如果您不熟悉正则表达式,很容易出错,但技术上可行。(这是我可能会采取的方向,因为我了解正则表达式。)

此外,我预计这里有两种编写插件的方法。

2000 个限制的原因是算法的可扩展性不佳且是同步运行的,但这是一个任意限制。我预计一个简单的插件可以“猴子补丁”2000 个单词的限制以接受性能损失。但我自己不会为 10000 个条目这样做!

另一种可能互补的方法是有一个专门用于标记的单独列表,并从为每个帖子创建/编辑触发的 sidekiq 作业异步执行此操作。

1 个赞

和别人一样,我也走过这条路:

  • 从一个列表开始,也许是从当前的 GitHub 仓库下载的。
  • 立即达到 2000 条条目的限制。
  • 哦,我可以使用正则表达式——太棒了!
  • 复杂的正则表达式很容易超过 100 个字符。
  • 将它们分开。
  • 优化正则表达式,糟糕,它又超过 100 个字符了。
  • 将其进一步分解。

与限制共舞并非不可能,只是令人讨厌,尤其是当这些限制是人为设定的时候。话虽如此,我理解这种过滤是同步进行的,而扩展的处理可能会导致性能问题,我也理解在为尽可能多的受众设定合适的限制所面临的困难。所以,虽然我为这些限制而挣扎,但我无法合理地反对它们。

我在这里看到了 word_watcher.rb 的代码:word_watcher.rb。作为一名开发者,我很乐意尝试编写一个插件,但这段代码看起来并不容易扩展。我不知道如何在插件中用 JavaScript 来增强 Ruby 进程……或者这是否可能,取决于 word_watcher 代码的编写方式。

这里有一个增强功能的想法,可以帮助减轻处理大量列表的负担。

与其为每种监视列表类型处理整个列表,不如考虑通过不同的过滤器块进行循环。例如,我们可以将最常见和最滥用的过滤器放在 block1 中,其他放在 blocks2-n 中。同步过滤器进程一次只处理一个块,并且仅在最终的“保存”操作中进行一次完整的过滤器循环。块可以操作现有列表,因此无需任何人进行更改。现有列表将被分成 1000 条条目的块,因此 block1 是 1-1000,block2 是 1001-2000,依此类推。希望优化的管理员现在可以选择将他们优先级更高的过滤器移到列表的更前面。

这样做的一个优点是,不必处理整个列表就可以捕获问题。最可能出现的问题将在较小的块中被捕获,并且同步进程可以更快地从处理较小的块中返回。当然,如果在第一个块中找不到监视文本,则需要处理另一个块。这会稍微增加一些开销来捕获不太可能出现的滥用行为。这变成了一个可选的调整问题——如果有人愿意的话。

这里的另一个选项是让管理员选择块的大小。通过减小块的大小,也许每个循环周期为 500 条条目,每个同步进程将运行得更快,但可能需要处理的块会更多。这取决于滥用的类型以及列表的优先级设置情况。同样,这种调整将是可选的,坦率地说,我怀疑许多管理员会进行如此多的调整。

请注意,精细调整意味着我们拥有可量化的指标:我们在监视单词处理上花费了多少时间,以及我们实际捕获了多少问题?这种技术细节应该留待以后增强或插件来实现,如果确实有必要的话。

最终,如果这里描述的“监视单词块处理”得以实现,列表中的条目数量可以扩展到 2000 条以上。是的,读取更长的列表并将其分解会带来一些开销。再一次,如果我们有关于此过程消耗了多少时间的指标,管理员可以确定自己的优化阈值……但我有点怀疑有多少人会深入研究这一点。发布的指南可以是“在没有监视单词块处理的情况下,限制仍然是 2000 个监视单词。使用块处理没有特定限制,但实际限制可能估计为大约 5000 个,并且随着条目数量的增加,性能会显著下降。”

这有希望吗?

归根结底,如果我们在这里服务器端执行此操作,我们可以实现“无限”大小,将帖子拆分为单词,然后针对“块”表执行单个查询,最坏的情况是进行一次表扫描。

我认为,如果您需要的是巨大的块列表,我建议构建一个自定义插件。

2 个赞

在我学过的 20 多种编程语言和方言中,Ruby 不在其中。所以从头开始编写插件对我来说是一个巨大的挑战,我相信我无法胜任。我很乐意用另一种语言来做……或者等到别人来做。:slight_smile:
谢谢。

遇到了类似这样的问题:Hit the blocklist limit for blocking words on the forum
我认为可以将此限制提高到 10,000 或根据您需要的单词数量进行自定义。