MQL 查询的"空"结果。Freebase Schema: /film/film/starring & /film/actor/film



这里是第一篇文章,所以我希望这是足够的细节。

我今天开始使用freebase-python来获取我正在开发的程序的电影信息。我需要抓住的一件事是出演电影的演员名单。我遵循了一些教程和指南来做到这一点,并且可以获得导演或电影导演的电影列表,但是当我尝试对演员或电影演员做同样的事情时,我得到"空"结果。

我在 Python 和 Freebase MQL 查询编辑器中都有同样的问题,你可以在下面看到我尝试过的内容。可以在此处找到下面在编辑器中编写的所有示例的链接,因为 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)电影,2)演员,3)角色/角色。

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

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

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

最新更新