忽略虚假用户名

本文关键字:用户 | 更新日期: 2023-09-27 18:35:32

所以我正在使用一个将用户名返回给我的api。其中有一些假的,例如:

8spZKYf1t2
xOzJzaYJe2
0x5jD4xmTM
PJFBoDFJsW
UZV908nNF7
CRuMGgh1bM
lyhDRamtFf
wELYyunHZU
NC8ZbYCjig
plK2KtwQwE
EKRlRLRitP
0CULcA8lIR
Yyi2NV3P8n

有人知道一个好的算法来忽略这些吗?

忽略虚假用户名

您将需要一个用户名数据库,以了解真实用户名和假用户名之间的区别。 称之为"训练集":

  1. 从训练集中,计算每个 3 个字母组合的出现次数。 例如,从"mtimmerm"中,您可以为"mti","tim","imm"等添加计数。 设N(x)是训练集中x的计数数,TOTAL是计数总数。 让我们F(x) = (N(x)+1)/(TOTAL+1) 这将是我们对用户名中 3 个字母组合出现频率的估计。

  2. 给定一个候选用户名U,对于Ux的每个 3 个字母组合,计算 H(x) = -log(F(X))。 将所有这些加在一起并除以length(U)-2(组合的数量)得到H(U) . 这是衡量U有多"不切实际"的指标。

计算一堆用户名的H(U),您应该会发现假用户名要高得多。

如果你想了解它背后的理论,谷歌词是"熵":https://en.wikipedia.org/wiki/Entropy_(information_theory)

我们正在做的是为用户名创建一个统计模型,然后根据该模型计算每个用户名的"不寻常"程度。 这实际上是衡量如果我们使用我们的模型来压缩用户名需要多少位(有点 - 我简化了计算,但它们应该足够准确)。 随机生成的用户名(我们假设是假的)将比真实用户名存储更多信息。

注意:如果训练集不包含任何假用户名,那就太好了,但只要它们中的大多数是真实的,就不会有太大区别。 另请注意,测试训练集中的名称并不完全正确。 如果要从训练集中测试名称,请从每个F(X)中减去1/(TOTAL+1),以便在测试时不包括用户名自己的计数。