2012-12-05 47 views
2

首先發布在這裏,所以我希望這是足夠的細節。「空」結果來自MQL查詢。 Freebase Schema:/ film/film/starring&/ film/actor/film

我今天開始使用freebase-python來獲取我正在開發的程序的電影信息。我需要抓住的一件事是出演電影的演員名單。我已經學習了一些教程和指南,可以獲得導演或電影導演的電影列表,但是當我嘗試對演員或電影演員做同樣的事情時,我會得到'空'結果。

我在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

這是因爲電影和演員沒有直接連接,而是通過沒有名字的「中介」節點。這是因爲有三件事需要同時進行:1)電影; 2)演員; 3)角色/角色。

在編寫任何MQL之前,您需要查看要使用的域/類型的模式以查看信息的存儲方式。

請注意,如果你只是匹配名稱,你會得到重複的重複等等。你應該跟蹤ID來消除所有的一切。這裏的修改查詢:

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

謝謝!我設法找到了一個類似的例子,但我現在明白了,這要感謝你的解釋。歡迎提供ID的小費,這將是我的下一個問題! – jrmedd