【发布时间】:2012-03-07 14:11:37
【问题描述】:
我正在尝试从 freebase 中提取电影信息,我只需要电影的名称、导演和演员的姓名和 ID。
我发现使用 freebases 主题转储很难做到这一点,因为没有引用导演 ID,只有导演姓名。
这项任务的正确方法是什么?我需要使用亚马逊云以某种方式解析整个四边形转储吗?还是有什么好办法?
【问题讨论】:
标签: mapreduce freebase elastic-map-reduce
我正在尝试从 freebase 中提取电影信息,我只需要电影的名称、导演和演员的姓名和 ID。
我发现使用 freebases 主题转储很难做到这一点,因为没有引用导演 ID,只有导演姓名。
这项任务的正确方法是什么?我需要使用亚马逊云以某种方式解析整个四边形转储吗?还是有什么好办法?
【问题讨论】:
标签: mapreduce freebase elastic-map-reduce
您确实需要使用四元转储,但它小于 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)来获取演员,但您的其余信息应直接连接到主题电影节点。
汤姆
【讨论】:
首先,我完全同意汤姆的观点和他的建议。我经常使用 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 美分。
【讨论】: