2

这与我之前提出的一个问题有关(问题)

我有一个手动创建的字符串列表,例如:

露西87

gordan_king

花式独角兽77

joplucky_kanga90

base_belong_to_narwhals

和一个随机字符串列表:

约翰克夫

煎饼90kgjd

花式_jagookfk

曼哈顿


最后一组字符串被随机化的原因是诸如'kjg','jgf','lkd', ...之类的序列。

有什么聪明的方法可以将包含这些明显随机字符串的字符串从人群中分离出来?

我想这对某些字符更有可能被放置在其他字符旁边(例如“co”、“ka”、“ja”……)这一事实起到了很大的作用。


关于这个有什么想法吗?Kylotan提到了Reverend,但我不确定它是否可以用于此目的。

帮助将不胜感激!

4

5 回答 5

4

这只是一个想法。我自己从来没有试过...

通过散列字典中找到的每个(重叠)4 字母序列来构建布隆过滤器。通过计算字符串中有多少个 4 字母序列未命中过滤器来测试字符串。未命中的次数越多,单词包含随机垃圾的可能性就越大。

尝试调整布隆过滤器的大小和每个序列的字母数。

另请注意(感谢@MihaiD),您应该在布隆过滤器中包含一个名称字典,最好是来自多种语言的名称,以尽量减少误报。

于 2010-05-14T11:01:58.467 回答
2

如果您通过类似textcat的方式运行字符串,您会得到什么分数?(我见过一些不同的 TextCat 实现;也许已经有一个 Python 实现了;如果没有的话,这不是一个硬算法——重要的是数据。)

我在想,如果你去掉数字,第一组字符串将更接近 TextCat 中的“英语”结果,而不是其中包含随机内容的字符串。

距离更近以及您是否可以使用 TextCat 数据(基本上基于特定语言中哪些字母往往彼此相邻)来“通过”或“失败”字符串将需要一些实验,虽然...

于 2010-05-14T11:19:45.393 回答
1

尝试使用香草贝叶斯分类器。对于一般情况应该足够了。

于 2010-05-14T11:04:54.190 回答
1

在我看来,您似乎正在尝试编写代码来识别某些垃圾邮件发送者对字符串所做的某些特定的小东西,以通过您的过滤器。我没有看到是什么阻止了他们,经过您的辛勤工作,对他们的算法进行 10 秒的调整并击败您的新过滤器。

于 2010-05-14T11:05:06.453 回答
1

前段时间我读了一篇关于随机名称生成的短文,他们做了以下事情:他们建立了一个包含您已经指出的信息的表格:“我想这对某些字符更有可能的事实起到了很大的作用放在其他人旁边”。

所以他们所做的就是阅读整本字典,并确定哪些字母更容易出现在彼此之间。我不知道,他们连续考虑了多少个字母。也许您应该尝试的不仅仅是两个连续的字母,比如说 3 到 6 之间的某个字母。

现在我建议你制作这样一个表(也许以更好的数据结构表示),其中包含所有“有效”的连续字母组合(可能还有它们的可能性),并查看您要检查的姓名是否(几乎)只包含这样的“有效” " 连续的字母。

于 2010-05-14T11:05:29.230 回答