如何使用dBpedia在ruby-on-rails应用程序上设置neo4j?

我试图使用dBpedianeo4j ruby on railsruby on rails ontop。

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

如何将dbpedia数据集导入neo4j

将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

以下是对所涉及内容的描述 。

蓝图正在将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以使用更多当前的Blueprints版本和当前的Blueprints存储库(Sonatype)。

要执行此操作,请打开pom.xml然后在dependencies部分的顶部,将所有TinkerPop Blueprints版本从0.6更改为0.9

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

  sonatype-nexus-snapshots Sonatype Nexus Snapshots https://oss.sonatype.org/content/repositories/releases  

保存文件,然后使用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 Server类似,只是它支持多个图形数据库。

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

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

我看到它的方式,你有两个选择。

  1. 您可以尝试完全实现类似这样的方法,也可以在此方法(或其他类似方法)后面拆分repo并扩展/修复它以适合您的目的。

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

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

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

我的2美分是你使用的东西,除非这个function是你正在开发的核心。 因为它构建起来会很痛苦,而且构建高效运行的东西更是痛苦。

Interesting Posts