使用 MapReduce 解析 Freebase RDF 转储

Posted

技术标签:

【中文标题】使用 MapReduce 解析 Freebase RDF 转储【英文标题】:Parse Freebase RDF dump with MapReduce 【发布时间】:2013-09-16 04:55:13 【问题描述】:

我从 Freebase 下载了 rdf 数据转储,我需要提取的是 Freebase 中每个实体的英文名称。

我是否必须使用 Hadoop 和 MapReduce 来执行此操作,如果需要,如何操作?还是有其他方法可以提取实体名称?

如果每个实体标题/名称都在 .txt 文件中的单独行中,那就太好了

【问题讨论】:

【参考方案1】:

您可以使用 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 等脚本语言,以便能够一次跨多行查看和评估.

【讨论】:

当我运行grep $'name.*@en\t\\.$' freebase-rdf | cut -f 1,3 | gzip > freebase-names-20130915.txt.gz 时,我得到的只是一个空文件 freebase-name-20130915.txt.gz,当我解压缩时,我得到一个 .cpgz 文件,里面是 .txt.gz文件,它会永远持续下去。 成为 /common/topic 的类型是什么意思?我认为类型是实体分类的类别,例如 /people/person ?【参考方案2】:

不,我认为您不需要使用 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

【讨论】:

压缩后的数据为 20GB+,未压缩的数据为 250GB。创建一个数百 GB 的数据库来运行一个简单的查询似乎效率不高。【参考方案3】:

还有一个用于 Google Compute Engine 的 screencast,它也向您展示了如何执行此操作。

【讨论】:

我还没有看完,我一直想看。这不是只得到 Freebase 中最流行的主题吗?如何获取所有主题? 另外,我避免使用 Map / Reduce 的原因是因为我最近阅读了一篇文章,指出“您拥有的数据可能不足以用于 Map / Reduce,应该有更简单的方法处理它。” RDF 数据转储包含 Freebase 中的所有 40M+ 主题。我也看到了关于 HN 的那篇文章。如果您不想走 Hadoop 路线,Tom 的回答提供了一个很好的解决方案。 啊,好的。谢谢你的解释。我一直在玩汤姆的 grep 命令及其变体,但我得到的只是空的压缩目录。这是我尝试过的 grep 命令:grep $'name.*@en\t\\.$' freebase-rdf | cut -f 1,3 | gzip > freebase-names-20130915.txt.gz 知道为什么会创建一个包含空 .cpgz 的空 .txt.gz 吗?它们(空目录)无限地相互包含。

以上是关于使用 MapReduce 解析 Freebase RDF 转储的主要内容,如果未能解决你的问题,请参考以下文章

Freebase 实体在 Google 知识图中的实体排名

如何为特定主题提取 Freebase 数据转储

如何在freebase中搜索建筑物附近的地方?

Android Freebase 查询 IOException

Google Freebase 搜索 API 替代方案?

Freebase oAuth2 错误请求(400).Net