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

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

使用 Google Cloud Vision API 后,我收到了 /m/XXXXXXX 格式的 MID 值(但末尾不一定是 7 个字符)。我想做的是确定一个 MID 值与其他值相比的具体程度。本质上是一个术语的广义与细化程度。例如,术语车辆可能是级别1,而术语货车可能是级别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 的深度。

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

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

最佳答案

这些 MID 看起来像是用于非常常见的事情,所以我很惊讶它们不在知识图中。您是否为 MID 添加前缀以形成 URI?

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

Freebase 和知识图没有按层次结构组织,因此您的关卡查找想法实际上不起作用。我也对你关于程度(即边缘数量)与更宽与更窄相关的想法表示怀疑,但你应该能够使用你发现的转储来测试它。

您发现的 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/

相关文章:

python - 在 AWS S3 中指定 IAM 角色的权限

python - 连接两个表,文件名具有额外的字符串,正则表达式从文件名中删除字符串并进行连接

python - 使用 ConfigParser (Python) 编辑 ini 文件选项值

ruby-on-rails - 调试事件资源

android - 谷歌 API 'People Also Search For' - Android

json - Google 云视觉 - 从 OCR 请求获取 JSON 错误响应

python - 切换 python 打印的最佳方法是什么?

python - 当查询结果超过一定数量时,Freebase + GoogleAPI 查询返回错误

python - 如何仅使用python中的云视觉api检测特定语言而忽略其他语言?

android - google-api-services-translate 和 google-cloud-translate 做同样的事情吗?