我从Freebase下载了rdf数据转储,我需要提取的是Freebase中每个英文实体的名称。
我是否必须使用Hadoop和MapReduce来做到这一点,如果是的话,如何做?还是有另一种方法可以提取实体名称?
如果每个实体标题/名称在.txt文件中都位于自己的行上,那就太好
你可以使用Hadoop,但对于这种简单的处理,你将花费更多的时间来解压缩和拆分输入,而不是并行搜索所节省的时间。 一个简单的zgrep
可以在更短的时间内完成您的任务。
大致如下:
zegrep $'name.*@ent\.$' freebase-public/rdf/freebase-rdf-2013-09-15-00-00.gz | cut -f 1,3 | gzip > freebase-names-20130915.txt.gz
将为您提供一个压缩的两列文件,其中包含 Freebase MID 及其英文名称。 您可能希望使 grep 更具体一点以避免误报(并对其进行测试,我还没有这样做)。 此文件压缩了超过 20GB,因此需要一段时间,但比开始准备 Hadoop 作业的时间还要少。
如果要执行其他筛选(例如仅提取类型为/common/topic 的实体),您可能会发现需要迁移到像 Python 这样的脚本语言,以便能够一次跨多行查看和评估。
我认为你不需要使用Hadoop和MapReduce来做到这一点。您可以轻松创建Web服务来提取RDF并发送到文件。以下 [1] 博客文章解释了如何使用 WSo2 数据服务服务器提取 RDF 数据。类似地,您可以使用WSO2 DSS数据联合[2]功能来提取RDF数据并将其发送到Excel数据表
[1] - http://sparkletechthoughts.blogspot.com/2011/09/extracting-rdf-data-using-wso2-data.html
[2] - http://prabathabey.blogspot.com/2011/08/data-federation-with-wso2-data-service.html
Google Compute Engine有一个截屏视频,向您展示了如何做到这一点。