我试图从freebase中提取电影信息,我只需要电影的名字,导演和演员的名字和id。
我发现使用freebase主题转储很难做到这一点,因为没有引用导演ID,只有导演的名字。
完成这项任务的正确方法是什么?我需要使用amazons云解析整个quad转储吗?或者有什么办法?
您确实需要使用quad dump,但它低于4GB,不需要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)来获取演员,但你的其余信息应该直接连接到主题电影节点。
Tom
首先,我完全赞同汤姆的观点和他的建议。我经常使用UNIX命令行工具从Freebase数据转储中提取"有趣"的数据片段。
然而,另一种选择是将Freebase数据加载到本地的"图形"存储系统中,并使用该系统提供的API和/或查询语言与数据交互以进行进一步处理。
我使用RDF,因为数据模型非常相似,并且很容易将Freebase数据转储转换为RDF(请参阅:https://github.com/castagna/freebase2rdf)。然后我将其加载到ApacheJena的TDB存储中(http://incubator.apache.org/jena/documentation/tdb/)并使用Jena API或SPARQL进行进一步处理。
另一种合理且可扩展的方法是在MapReduce中实现您需要做的事情,但只有当您所做的处理量涉及Freebase数据的很大一部分时,这才有意义,而且它不像计数行那样微不足道。这比使用自己的机器更贵,您需要Hadoop集群或使用AmazonEMR。(我可能应该写一个freebase2rdf的MapReduce版本;-)
我的2美分。