MQL查询产生“空”。 Freebase Schema:/ film / film / starring& /膜/演员/膜

时间:2012-12-05 17:01:19

标签: python freebase mql

首先发布这里,所以我希望这是足够的细节。

我今天开始使用freebase-python来获取我正在制作的节目的电影信息。我需要抓住的一件事是一部由电影主演的演员名单。我已经按照一些教程和指南的方式来做这个,并且可以获得导演或电影导演的电影列表,但当我尝试对演员或电影的演员做同样的事情时,我得到了'null'结果。

我在Python和Freebase MQL查询编辑器中遇到同样的问题,你可以看到我在下面尝试过的内容。可以找到编辑器中编写的以下所有示例的链接here,因为Stack Overflow不允许我在第一篇文章的每个示例下面发布链接!

Python中的

工作导演查询:

import freebase
fb = freebase.mqlread
q = {'type':'/film/film', 'name':'Inception', 'directed_by':[]}
fb(q)

使用Python工作导演的电影查询:

import freebase
fb = freebase.mqlread
q = {'type':'/film/director', 'name': 'Christopher Nolan', 'film':[]}
fb(q)

基于这些测试,我试图对演员做同样的事情,但结果很奇怪:

无效在Python中使用强制转换列表查询:

import freebase
fb = freebase.mqlread
q = {'type':'/film/film', 'name':'Inception', 'starring':[]}
fb(q)

不工作演员在Python中的电影摄影查询:

import freebase
fb = freebase.mqlread
q = {'type':'/film/actor', 'name':'Leonardo DiCaprio', 'film':[]}
fb(q)

奇怪的是,我得到了准确数量的演员/电影,但没有名字。有谁知道问题可能是什么?非常感谢,我很感激任何建议。

1 个答案:

答案 0 :(得分:1)

那是因为电影和演员没有直接连接,而是通过没有名字的“中介”节点。这是因为有三件事要同时连接:1)电影,2)演员,3)角色/角色。

在编写任何MQL之前,您需要查看要使用的域/类型的架构,以查看信息的存储方式。

另请注意,如果您只是匹配名称,您将获得重拍等重复项。您应该跟踪ID以消除所有内容的歧义。这是修改过的查询:

[{
  "type": "/film/film",
  "name": "Inception",
  "mid":  null,
  "starring": [{
    "actor": null,
    "mid":   null
  }]
}]​