2013-12-07 46 views
10

我已經下載了250G的freebase數據轉儲。我不想在大數據上迭代我的開發。我想提取一小部分數據(可能是一個小域或大約10個人物及其信息)。這個小子集將使我的迭代更快,更容易。提取Freebase的子集數據以加速迭代開發

劃分freebase數據的最佳方法是什麼? 是否有Google/Freebase提供的任何子集下載?

回答

12

這是我們從使用數據轉儲的許多人那裏獲得的反饋。我們正在研究如何最好地創建這樣的子集。一種方法是獲取像Film這樣的單個域的所有數據。

這裏是如何你會從/薄膜域讓每一個RDF三元:

zgrep '\s<http://rdf\.freebase\.com/ns/film.' freebase-rdf-{date}.gz | gzip > freebase-films.gz 

棘手的部分是,這個子集將不包含名字,圖像或描述,你最有可能也想。所以你需要讓那些像這樣:

zgrep '\s<http://rdf\.freebase\.com/ns/(type\.object|common\.topic)' freebase-rdf-{date}.gz | gzip > freebase-topics.gz 

然後,你可能要下降篩選子集唯一的話題數據關於電影(僅匹配三元組具有相同/ M ID開始)並連接那到電影子集。

用正則表達式編寫這段代碼非常簡單,但它的工作量要大得多。我們正在制定一個更好的長期解決方案。

+2

雖然你幾乎肯定要爲/普通/主題別名等等和/ type/object作爲名字,還有更多你可能想要的。如果您對電影領域感興趣,您可能還需要演員配偶,出生日期,國籍等,因此您需要包含的類型/人物/人物的一些屬性。基本上,任何一種目標類型的包含類型都可能具有潛在的興趣。 –

+0

zgrep $'\ tns/film。' freebase-rdf-2013-12-01-00-00.gz產生零線。我錯過了什麼嗎? –

+0

糟糕,副本錯誤在我的一端。我已經更新了這些例子。請再試一次。 –

3

我想做一個類似的事情,我想出了以下命令行。

gunzip -c freebase-rdf-{date}.gz | awk 'BEGIN { prev_1 = ""} { if (prev_1 != $1) { print '\n' } print $0; prev_1 = $1};' | awk 'BEGIN { RS=""} $0 ~ /type\.object\.type.*\/film\.film>/' > freebase-films.txt 

它會給你所有的三元組的所有科目類型電影。 (它假設所有科目排序)

在此之後,你可以簡單地grep您需要的謂詞。

2

只是一個備註爲接受後,變式主題不爲我工作,因爲使用正則表達式,如果我們想要的,我們需要設置參數-E

zgrep -E '\s<http://rdf\.freebase\.com/ns/(type\.object|common\.topic)' freebase-rdf-{date}.gz | gzip > freebase-topics.gz