如何对 Google 的实体 ID 进行逆向工程
how to reverse engineer Google's entity ids
Google现在到处都在使用实体,它们通常以/m/和/g/为前缀(但我最近也看到了一些/t/)
我想知道编号是如何工作的。对于 /m/ ,有一个类似于 url 缩写词的模式。定义一个字母表(在 /m/ 的情况下,这是 32 个字符“0123456789bcdfghjklmnpqrstvwxyz_”并将数字转换为 "short url"
例如/m/0 4swd <-> 156524 (“/m/0”好像是一种前缀)
尽管如此,我仍然坚持使用 /g/ ID。我根据我看到的 ID 创建了一个合理的字母表“0123456789bcdfghjklmnpqrstvwxyz_”,但我无法让它工作。
因为 Google 正在做一些自我转换,所以我有一个真实的例子:
/g/11b6377dzp <-> 576462201963131861
但我还是想不通
我最感兴趣的是如何处理这个逆向工程问题的过程(当然还有结果)。有什么想法吗?
您为这两种情况提供了相同的字母表,但您的问题暗示它们是不同的。除此之外,这里是对两种编码方案的描述。
引自 Freebase developer wiki,这是机器 ID 的编码:
The keys of machine-generated ids are short variable-length sequences of characters consisting of digits, lower-case letters excluding vowels, and underscore. ... (By avoiding vowels, we hope to avoid accidently [sic] generating offensive identifiers.) Mids are also URL-safe, i.e. they don't require any escaping or unescaping to be used in URLs.
Google 知识图 ID 位于单独的名称space 中,您注意到前缀为“/g/1”,其格式根据相关 Wikidata property page是
\/g\/1[0-9a-np-z][0-9a-np-z_]{6,8}
所以基数因位置而异(不允许前导下划线),他们选择只排除容易混淆的字母 'o',而不是所有元音,显然更喜欢编码 space 尽管存在 "naughty words."
Google现在到处都在使用实体,它们通常以/m/和/g/为前缀(但我最近也看到了一些/t/)
我想知道编号是如何工作的。对于 /m/ ,有一个类似于 url 缩写词的模式。定义一个字母表(在 /m/ 的情况下,这是 32 个字符“0123456789bcdfghjklmnpqrstvwxyz_”并将数字转换为 "short url"
例如/m/0 4swd <-> 156524 (“/m/0”好像是一种前缀)
尽管如此,我仍然坚持使用 /g/ ID。我根据我看到的 ID 创建了一个合理的字母表“0123456789bcdfghjklmnpqrstvwxyz_”,但我无法让它工作。
因为 Google 正在做一些自我转换,所以我有一个真实的例子: /g/11b6377dzp <-> 576462201963131861
但我还是想不通
我最感兴趣的是如何处理这个逆向工程问题的过程(当然还有结果)。有什么想法吗?
您为这两种情况提供了相同的字母表,但您的问题暗示它们是不同的。除此之外,这里是对两种编码方案的描述。
引自 Freebase developer wiki,这是机器 ID 的编码:
The keys of machine-generated ids are short variable-length sequences of characters consisting of digits, lower-case letters excluding vowels, and underscore. ... (By avoiding vowels, we hope to avoid accidently [sic] generating offensive identifiers.) Mids are also URL-safe, i.e. they don't require any escaping or unescaping to be used in URLs.
Google 知识图 ID 位于单独的名称space 中,您注意到前缀为“/g/1”,其格式根据相关 Wikidata property page是
\/g\/1[0-9a-np-z][0-9a-np-z_]{6,8}
所以基数因位置而异(不允许前导下划线),他们选择只排除容易混淆的字母 'o',而不是所有元音,显然更喜欢编码 space 尽管存在 "naughty words."