忽略虚假用户名
本文关键字:用户 | 更新日期: 2023-09-27 18:35:32
所以我正在使用一个将用户名返回给我的api。其中有一些假的,例如:
8spZKYf1t2
xOzJzaYJe2
0x5jD4xmTM
PJFBoDFJsW
UZV908nNF7
CRuMGgh1bM
lyhDRamtFf
wELYyunHZU
NC8ZbYCjig
plK2KtwQwE
EKRlRLRitP
0CULcA8lIR
Yyi2NV3P8n
有人知道一个好的算法来忽略这些吗?
您将需要一个用户名数据库,以了解真实用户名和假用户名之间的区别。 称之为"训练集":
-
从训练集中,计算每个 3 个字母组合的出现次数。 例如,从"mtimmerm"中,您可以为"mti","tim","imm"等添加计数。 设
N(x)
是训练集中x
的计数数,TOTAL
是计数总数。 让我们F(x) = (N(x)+1)/(TOTAL+1)
这将是我们对用户名中 3 个字母组合出现频率的估计。 -
给定一个候选用户名
U
,对于U
中x
的每个 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)
,以便在测试时不包括用户名自己的计数。