10

我正在尝试dBpedianeo4jontop一起使用ruby on rails

假设我已经安装了neo4j并下载了一个dBpedia 数据集

如何将dbpedia数据集导入neo4j

4

2 回答 2

8

将 dbpedia 加载到 Neo4j 中的最简单方法是使用dbpedia4neo库。这是一个 Java 库,但您不需要了解任何 Java,因为您需要做的就是运行可执行文件。

如果你愿意,你可以在 JRuby 中重写它,但是普通的 Ruby 不能工作,因为它依赖于Blueprints,一个没有 Ruby 等价物的 Java 库。

这是两个提供加载过程的关键文件。

  1. https://github.com/oleiade/dbpedia4neo/blob/master/src/main/java/org/acaro/dbpedia4neo/inserter/DBpediaLoader.java
  2. https://github.com/oleiade/dbpedia4neo/blob/master/src/main/java/org/acaro/dbpedia4neo/inserter/TripleHandler.java

以下是所涉及内容的描述

Blueprints 正在将 RDF 数据转换为图形表示。要了解幕后发生的事情,请参阅Blueprints Sail Ouplementation

下载 dbpedia 转储文件后,您应该能够构建dbpedia4neo Java 库并在不修改 Java 代码的情况下运行它。

首先,克隆 GitHub 存储库的 oleiade 的 fork 并切换到dbpedia4neo目录:

$ git clone https://github.com/oleiade/dbpedia4neo.git
$ cd dbpedia4neo

(Oleiade 的分支包括一个小的蓝图更新,sail.initialize();请参阅 https://groups.google.com/d/msg/gremlin-users/lfpNcOwZ49Y/WI91ae-UzKQJ)。

在构建它之前,您需要更新pom.xml以使用更多最新的蓝图版本和当前的蓝图存储库 (Sonatype)。

为此,打开pom.xml并在该dependencies部分的顶部,将所有 TinkerPop 蓝图版本从0.6更改为0.9.

在文件中时,将 Sonatype 存储库添加到repositories文件末尾的部分:

<repository>
  <id>sonatype-nexus-snapshots</id>
  <name>Sonatype Nexus Snapshots</name>
  <url>https://oss.sonatype.org/content/repositories/releases</url>
</repository>

保存文件,然后使用 maven 构建它:

$ mvn clean install

这将为您下载并安装所有依赖项,并在target目录中创建一个 jar 文件。

要加载 dbpedia,请使用 maven 运行可执行文件:

$ mvn exec:java \
  -Dexec.mainClass=org.acaro.dbpedia4neo.inserter.DBpediaLoader \
  -Dexec.args="/path/to/dbpedia-dump.nt"

dbpedia 转储很大,因此加载需要一段时间。

现在数据已加载,您可以通过以下两种方式之一访问图表:

  1. 直接使用 JRuby 和 Blueprints-Neo4j API。
  2. 使用常规的 Ruby 和Rexster REST 服务器,它类似于 Neo4j 服务器,只是它支持多个图形数据库。

有关如何创建 Rexster 客户端的示例,请参阅 Bulbs,这是我编写的一个支持 Neo4j Server 和 Rexster 的 Python 框架。

解决这一切的另一种方法是在 Ruby 中处理 dbpedia RDF 转储文件,将节点和关系写入 CSV 文件,然后使用Neo4j 批量导入器加载它。但这需要您手动将 RDF 数据转换为 Neo4j 关系。

于 2012-09-09T05:09:34.907 回答
3

在我看来,你有两个选择。

  1. 您可以尝试完全实现这样的方法或者分叉这种方法(或其他类似方法)背后的 repo并扩展/修复它以适合您的目的。

  2. 自己做,从头开始。这是一般方法:

将您的 dbpedia 数据集解析为适合 neo4j 插入方法的格式。存在一些像openRDF这样的库来处理数据。除非您打算花时间研究最适合您的需求,否则我上面链接的现有解决方案已经实现了这个库。

然后将格式化的数据插入到你的 neo4j 数据库中。实现此目的的一种方法是通过 neo4j 的Batch Insertion组件。请注意,正如他们所说,此工具旨在用于初始导入(因为它不是线程安全的并且是非事务性的,换句话说,不符合 ACID)。所以这真的取决于你的用例。

我的 2 美分是你使用已经存在的东西,除非这个功能是你正在开发的核心。因为构建它会很痛苦,构建高效运行的东西更痛苦。

于 2012-09-06T00:53:02.610 回答