我从 Freebase 下载了 rdf 数据转储,我需要提取的是 Freebase 中每个英文实体的名称。
我是否必须使用 Hadoop 和 MapReduce 来执行此操作,如果是这样,该怎么做?还是有另一种方法来提取实体名称?
如果每个实体标题/名称都在 .txt 文件中的单独行上,那就太好了
我从 Freebase 下载了 rdf 数据转储,我需要提取的是 Freebase 中每个英文实体的名称。
我是否必须使用 Hadoop 和 MapReduce 来执行此操作,如果是这样,该怎么做?还是有另一种方法来提取实体名称?
如果每个实体标题/名称都在 .txt 文件中的单独行上,那就太好了
您可以使用 Hadoop,但对于如此简单的处理,您将花费更多时间来解压缩和拆分输入,而不是节省并行搜索的时间。一个简单的zgrep
将在更短的时间内完成您的任务。
类似这样的东西:
zegrep $'name.*@en\t\\.$' 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的截屏视频也向您展示了如何执行此操作。