确定Freebase MID值的分类层次结构级别

时间:2017-05-02 14:24:17

标签: python freebase google-cloud-vision google-knowledge-graph

使用Google Cloud Vision API后,我收到的格式为/m/XXXXXXX的MID值(尽管最后不一定是7个字符)。我想要做的是确定一个MID值与其他MID值的具体比较。基本上是一个术语的宽泛与精致。例如,术语 Vehicle 可能级别1 ,而术语 Van 可能级别2

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

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

我最初想到为什么这些MID在知识图谱API中没有返回任何内容,因为它们在停用Freebase后没有被遗留下来。我了解Google提供了Freebase的RDF转储,但我不确定如何在Python中读取该数据并使用它来确定层次结构中的深度。

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

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

1 个答案:

答案 0 :(得分:1)

那些MID看起来像是非常常见的东西,所以我很惊讶他们不在知识图中。你是否在MID前面形成URI?

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

Freebase和知识图谱没有被组织为层次结构,因此您的水平发现想法并不真正起作用。我也怀疑你对程度(即边缘数)与更广泛与更窄相关的想法,但你应该能够使用你发现的转储来测试它。

您发现的Freebase ExQ数据转储非常混乱,因为它们将Freebase types重命名为topics(不要与Freebase topics混淆),但我认为他们{{1}包含您正在寻找的信息(边缘数==度)。您可以使用inDegree,outDegree或两者的总和。

他们的MID到整数转换代码看起来不合适(并且与评论不符),但您需要使用兼容的实现来匹配他们已经完成的工作。

看着

freebase-nodes-in-out-name.tsv

它被编码为

/m/02w0000  "Clibadium subsessilifolium"@en

48484848875048

因此,只需从右到左取ASCII值,然后从左到右连接它们。一体化令人困惑,低效和错误! (它实际上是一个基础36(或37?)编码)