使用Google Cloud Vision API后,我收到了/m/XXXXXXX格式的MID值(尽管不一定是7个字符)。我想做的是确定一个MID值与其他MID值的比较方式。本质上来说,一个术语有多宽泛。例如,术语“车辆”可能是1级,而术语“货车”可能是2级。

我试图通过Google Knowledge Graph API运行MID值,但不幸的是,这些MID不在该数据库中,并且不返回任何信息。例如,我的一些MID和描述如下:

/m/07s6nbt = text
/m/03gq5hm = font
/m/01n5jq = poster
/m/067408 = album cover


我最初对这些MID为什么在Knowledge Graph API中不返回任何内容的最初想法是,在Freebase停止使用后,它们没有被继承。我知道Google提供了Freebase的RDF转储,但是我不确定如何在Python中读取该数据并使用它来确定层次结构中间的深度。

如果无法确定MID值的类别级别,则术语具有的连接数也将是适当的代理。假设更广泛的术语比更精确的术语与其他术语的联系更多。我发现an article讨论了MID所具有的“边缘”数量,我认为这意味着连接数。但是,它们在MID值和Long值之间进行了一些转换,并使用各种脚本,这些脚本在Python中给我带来很多错误。我希望能得到一个简单的表,其中一列包含MID值,另一列包含连接数,但是我迷失了它们的代码,转换值和Python错误。

如果您有任何建议可以轻松确定MID具有的连接数量或其层次结构级别,将不胜感激。谢谢!

最佳答案

这些MID看起来很普通,因此我对它们不在“知识图”中感到惊讶。您是否将MID前缀形成URI?

"kg": "http://g.co/kg"
"kg:/m/067408"


Freebase和Knowledge Graph并不是按层次结构组织的,因此您的关卡想法实际上是行不通的。对于您的度数(即边数)与较宽还是较窄之间的关系,我也表示怀疑,但是您应该能够使用发现的转储来进行测试。

您发现的Freebase ExQ数据转储非常混乱,因为他们将Freebase types重命名为topics(不要与Freebase topics混淆),但是我认为他们的freebase-nodes-in-out-name.tsv包含您要查找的信息(边缘数==度)。您可以使用inDegree,outDegree或两者之和。

他们的MID到整数的转换代码在我看来不正确(并且与注释不匹配),但是您需要使用兼容的实现来与他们所做的匹配。

看着

/m/02w0000  "Clibadium subsessilifolium"@en


它被编码为

48484848875048


要么

48 48 48 48 87 50 48
 0  0  0  0  w  2  0


因此,只需从右到左获取ASCII值,然后从左到右连接它们即可。令人困惑,效率低下和犯错! (实际上是36(或37)的基本编码)

关于python - 确定Freebase MID值的分类层次级别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43740356/

10-13 00:29