如何对Google的实体ID进行反向工程

时间:2019-05-06 15:30:41

标签: entity reverse-engineering freebase google-knowledge-graph

Google如今在各处都在使用实体,它们通常以/ m /和/ g /作为前缀(但最近我也见过一些/ t /)

我想知道编号的工作方式。对于/ m /,有一个类似于url缩短器执行的模式。定义一个字母(如果是/ m /,则为32个字符“ 0123456789bcdfghjklmnpqrstvwxyz_”,然后将数字转换为“短网址”

例如/ m / 0 4swd <-> 156524(“ / m / 0”似乎是一种前缀)

我仍然受/ g / ID的困扰。我从看到的ID“ 0123456789bcdfghjklmnpqrstvwxyz_”创建了一个合理的字母,但无法正常工作。

由于Google在进行自我转换,因此我举了一个真实的例子: / g / 11b6377dzp <-> 576462201963131861

来自此:Google Search

但我仍然无法弄清楚。

我对这个过程最感兴趣的是如何解决这个逆向工程问题(当然还有结果)。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您为两种情况提供了相同的字母,但是您的问题暗示它们是不同的。除此之外,这是两种编码方案的说明。

Freebase developer wiki引述,这是计算机ID的编码:

  

机器生成的id的键是可变长度的短字符序列,由数字,小写字母(不包括元音)和下划线组成。 ...(通过避免元音,我们希望避免意外地[sic]生成令人讨厌的标识符。)中点也是URL安全的,即它们不需要在URL中使用任何转义或转义。

根据相关的Wikidata property page是,

Google知识图谱ID位于一个单独的命名空间中,如您所见,其前缀为“ / g / 1”及其格式。
\/g\/1[0-9a-np-z][0-9a-np-z_]{6,8}

因此基数会因位置而异(不允许前导下划线),因此他们选择仅排除可混淆的字母“ o”,而不是所有的元音,尽管有“调皮的单词”的风险,但显然更喜欢使用更多的编码空间。