如何使用dBpedia在ruby-on-rails应用程序上设置neo4j?
我试图使用dBpedia
与neo4j
ruby on rails
的ruby on rails
ontop。
假设我已经安装了neo4j并下载了一个dBpedia数据集 。
如何将dbpedia
数据集导入neo4j
?
将dbpedia加载到Neo4j的最简单方法是使用dbpedia4neo库。 这是一个Java库,但您不需要知道任何Java,因为您需要做的就是运行可执行文件。
如果你愿意,可以在JRuby中重写这个,但是常规的Ruby不能工作,因为它依赖于Blueprints ,一个没有Ruby等价的Java库。
以下是两个提供加载过程的密钥文件。
- https://github.com/oleiade/dbpedia4neo/blob/master/src/main/java/org/acaro/dbpedia4neo/inserter/DBpediaLoader.java
- 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转储很大,因此加载需要一段时间。
现在加载了数据,您可以通过以下两种方式之一访问图表:
- 直接使用JRuby和Blueprints-Neo4j API。
- 使用常规Ruby和Rexster REST服务器,它与Neo4j Server类似,只是它支持多个图形数据库。
有关如何创建Rexster客户端的示例,请参阅Bulbs,我编写的支持Neo4j Server和Rexster的Python框架。
- http://bulbflow.com/
- https://github.com/espeed/bulbs
- https://github.com/espeed/bulbs/tree/master/bulbs/rexster
所有这些的另一种方法是在Ruby中处理dbpedia RDF转储文件,写出节点和与CSV文件的关系,并使用Neo4j批处理导入器加载它。 但这需要您手动将RDF数据转换为Neo4j关系。
我看到它的方式,你有两个选择。
-
您可以尝试完全实现类似这样的方法,也可以在此方法(或其他类似方法)后面拆分repo并扩展/修复它以适合您的目的。
-
从头开始自己动手。 这是一般方法:
将dbpedia数据集解析为适合neo4j插入方法的格式。 存在像openRDF这样的库来处理数据。 除非您打算花时间进行最适合您需求的研究,否则我上面链接的现有解决方案已经实现了这个库。
然后将格式化数据插入neo4j数据库。 实现此目的的一种方法是通过neo4j的Batch Insertion组件。 请注意,此工具正如它们所述,用于初始导入(因为它不是线程安全的,并且是非事务性的,换句话说,不符合ACID)。 所以这真的取决于你的用例。
我的2美分是你使用的东西,除非这个function是你正在开发的核心。 因为它构建起来会很痛苦,而且构建高效运行的东西更是痛苦。