2

第一次在这里发帖,所以我希望这是足够的细节。

我今天开始使用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)

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

4

1 回答 1

1

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

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

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

[{
  "type": "/film/film",
  "name": "Inception",
  "mid":  null,
  "starring": [{
    "actor": null,
    "mid":   null
  }]
}]​
于 2012-12-05T19:59:48.787 回答