Подтвердить что ты не робот

Как настроить neo4j с помощью dBpedia ontop приложения ruby-on-rails?

Я пытаюсь использовать dBpedia с neo4j ontop ruby on rails.

Предполагая, что я установил neo4j и загрузил одну из dBpedia наборы данных.

Как импортировать набор данных dBpedia в neo4j?

4b9b3361

Ответ 1

Самый простой способ загрузки dbpedia в Neo4j - использовать библиотеку dbpedia4neo. Это Java-библиотека, но вам не нужно знать ни одну Java, потому что все, что вам нужно сделать, это запустить исполняемый файл.

Вы можете переписать это в JRuby, если хотите, но обычный Ruby не будет работать, потому что он полагается на Blueprints, библиотеку Java без эквивалента Ruby.

Вот два ключевых файла, которые обеспечивают процедуру загрузки.

Ниже приведено описание .

Blueprints преобразует данные RDF в представление графика. Чтобы понять, что происходит под капотом, см. Очертание паруса Blueprints:

После загрузки файлов дампа dbpedia вы сможете создать библиотеку Java dbpedia4neo и запустить ее без изменения кода Java,

Во-первых, клонируйте вилку oleiade репозитория GitHub и перейдите в каталог dbpedia4neo:

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

(Формы Oleiade включают небольшое обновление Blueprints, которое делает sail.initialize(); См. https://groups.google.com/d/msg/gremlin-users/lfpNcOwZ49Y/WI91ae-UzKQJ).

Перед его созданием вам нужно будет обновить pom.xml, чтобы использовать более современные версии Blueprints и текущий репозиторий Blueprints (сонатный тип).

Чтобы сделать это, откройте pom.xml и в верхней части раздела dependencies, измените все версии TinkerPop Blueprints с 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

Это приведет к загрузке и установке всех зависимостей для вас и созданию файла jar в каталоге target.

Чтобы загрузить dbpedia, используйте maven для запуска исполняемого файла:

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

Дамп dbpedia большой, поэтому для загрузки потребуется некоторое время.

Теперь, когда данные загружены, вы можете получить доступ к графику одним из двух способов:

  • Используйте API JRuby и Blueprints-Neo4j напрямую.
  • Используйте обычный Ruby и Rexster сервер REST, который похож на сервер Neo4j, за исключением того, что он поддерживает несколько графических баз данных.

Пример того, как создать клиент Rexster, см. в статье Лампочки, фреймворк Python, который я написал, который поддерживает как Neo4j Server, так и Rexster.

Другим подходом ко всему этому будет обработка dump файла dbpedia RDF в Ruby, запись узлов и отношений в файл CSV и использование Neo4j импортер партии для загрузки. Но это потребует, чтобы вы вручную переводили данные RDF в отношения Neo4j.

Ответ 2

Как я вижу это, у вас есть два варианта.

  • Вы можете либо попытаться реализовать такой подход, как этот, или fork репо за этим подходом (или другим подобным образом) и расширить/исправить его в соответствии с вашими целями.

  • Сделайте это самостоятельно, с нуля. Здесь общий подход:

Разберите ваш набор данных dbpedia в формате, подходящем для методов вставки neo4j. Существуют библиотеки, которые существуют как openRDF, которые существуют для обработки данных. Если вы не планируете уделять время исследованиям, которые наилучшим образом отвечали бы вашим потребностям, существующее решение, которое я связал выше, уже реализует эту библиотеку.

Затем вставьте форматированные данные в ваш neo4j db. Один из способов достижения этого - через компонент neo4j Batch Insertion. Обратите внимание, что этот объект, как они утверждают, предназначен для первоначального импорта (поскольку он не является потокобезопасным и не является транзакционным, другими словами, не соответствует ACID). Так что это действительно зависит от вашего варианта использования.

Мои 2 цента - это то, что вы используете что-то уже там, если эта функциональность не является ядром того, что вы разрабатываете. Поскольку это что-то, что будет больно строить, и тем более больно создавать что-то, что работает эффективно.