2

我试图从 freebase 中提取电影信息,我只需要电影的名称、导演和演员的姓名和 ID。

我发现使用 freebases 主题转储很难做到这一点,因为没有对导演 ID 的引用,只有导演姓名。

这项任务的正确方法是什么?我需要使用亚马逊云以某种方式解析整个四边形转储吗?还是有什么好办法?

4

2 回答 2

2

首先,我完全同意汤姆的观点和他的建议。我经常使用 UNIX 命令行工具从 Freebase 数据转储中取出“有趣”的数据片段。

但是,另一种方法是将 Freebase 数据加载到本地的“图形”存储系统中,并使用该系统提供的 API 和/或查询语言与数据交互以进行进一步处理。

我使用 RDF,因为数据模型非常相似,而且很容易将 Freebase 数据转储转换为 RDF(参见:https ://github.com/castagna/freebase2rdf )。然后我将它加载到 Apache Jena 的 TDB 存储 (http://incubator.apache.org/jena/documentation/tdb/) 并使用 Jena API 或 SPARQL 进行进一步处理。

另一种合理且可扩展的方法是在 MapReduce 中实现您需要做的事情,但这只有在您所做的处理量涉及大部分 Freebase 数据并且它不像计数行那么简单时才有意义。这比使用您自己的机器更昂贵,您需要一个 Hadoop 集群或者您需要使用 Amazon EMR。(我可能应该写一个 MapReduce 版本的 freebase2rdf ;-))

我的 2 美分。

于 2012-03-11T18:02:02.073 回答
2

您确实需要使用四元转储,但它小于 4 GB,并且不需要 Hadoop、MapReduce 或任何云处理。一台像样的笔记本电脑应该没问题。在几年前的笔记本电脑上,这个简单的命令:

time bzgrep '/film/' freebase-datadump-quadruples.tsv.bz2 | wc -l
10394545

real    18m56.968s
user    19m30.101s
sys 0m56.804s

在 20 分钟内提取并计算所有引用电影域的内容。即使您必须多次通过文件(很可能),您也可以在不到一个小时的时间内完成整个任务,这意味着不需要强大的计算资源。

您需要遍历中间节点(Freebase 中的 CVT)来获取演员,但您的其余信息应直接连接到主题电影节点。

汤姆

于 2012-03-07T20:55:44.830 回答