【问题标题】:how to reverse engineer Google's entity ids如何对 Google 的实体 ID 进行逆向工程
【发布时间】:2019-09-24 06:29:50
【问题描述】:

Google 现在到处都在使用实体,它们通常以 /m/ 和 /g/ 为前缀(但我最近也看到了一些 /t/)

我想知道编号是如何工作的。对于 /m/ 有一个类似于 url 缩短器的模式。定义一个字母(在 /m/ 的情况下,这是 32 个字符“0123456789bcdfghjklmnpqrstvwxyz_”并将数字转换为“短 url”

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

不过,我被 /g/ ID 卡住了。我从我看到的“0123456789bcdfghjklmnpqrstvwxyz_”的 ID 创建了一个合理的字母表,但我无法让它工作。

由于谷歌正在做一些自我转换,所以我有一个真实的例子: /g/11b6377dzp 576462201963131861

来自:Google Search

但我还是想不通。

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

【问题讨论】:

  • 它们是不透明的标识符,所以我不明白将它们从基数 36(或其他)转换为基数 10 的价值。你认为你得到了什么? /m 前缀标识符可以在 Wikidata 或 Freebase 数据转储中查找以将它们转换为名称。
  • 我只是好奇。为什么 /m/ 可以在基数 32 和基数 10 之间转换,为什么 /g/ 不是这种情况 一个直接的“胜利”将是能够构造一个以 10 为基数的 URL 并能够遵循任意主题。
  • 我也对这些算法的设计选择感兴趣。为什么跳过某些字母并添加下划线。这似乎太随意了。为什么两个字母表中跳过了不同的字母?

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


【解决方案1】:

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

引用Freebase developer wiki,这是机器 ID 的编码:

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

根据相关的Wikidata property page,Google 知识图 ID 位于单独的命名空间中,前缀为“/g/1”,其格式为

\/g\/1[0-9a-np-z][0-9a-np-z_]{6,8}

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

【讨论】:

    猜你喜欢
    • 2013-10-10
    • 1970-01-01
    • 2014-02-22
    • 2011-05-09
    • 2016-04-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-30
    • 2010-09-30
    相关资源
    最近更新 更多