提取Freebase的子集数据,以加快开发迭代速度

时间:2013-12-07 21:02:11

标签: freebase

我已经下载了250G的freebase数据转储。我不想在大数据上迭代我的开发。我想提取一小部分数据(可能是一个小域或一些10个人及其信息)。这个小子集将使我的迭代更快更容易。

分区freebase数据的最佳方法是什么? 是否有Google / Freebase提供的子集下载?

3 个答案:

答案 0 :(得分:12)

这是我们从使用数据转储的许多人那里获得的反馈。我们正在研究如何最好地创建这样的子集。一种方法是获取像Film这样的单个域的所有数据。

以下是您从/ 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开头的三元组)并将其连接到电影子集。

使用正则表达式编写脚本非常简单,但是应该做的工作要多得多。我们正在努力寻找更好的长期解决方案。

答案 1 :(得分: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 :(得分:2)

对于接受的帖子只有一个评论,主题的变体不适合我,因为如果我们想要使用正则表达式,我们需要设置-E参数

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