Как использовать Gremlin / Tinkerpop с Java?

Я работаю над проектом, который включает использование представления знаний на Java, и у меня сложилось впечатление, что для этого можно использовать какую-то семантическую сеть.

У Gremlin / Tinkerpop очень хороший синтаксис для генерации графов и обхода, но я могу заставить его работать только в независимой оболочке. Это язык JVM, так что, предположительно, у него есть какой-то Java API? Я попытался добавить исходную папку в проект Eclipse, но он просто оказался заполнен ошибками и отказался работать.

Есть ли лучший способ сделать это? Может быть, скомпилированная библиотека, похожая на библиотеку Stanford CoreNLP, которую я использую для обработки пользовательского ввода?


person user5513268    schedule 01.11.2015    source источник


Ответы (2)


Tinkerpop 3 предлагает API (как JDBC для СУБД) и (зависящие от поставщика) реализации. Также доступна эталонная реализация в памяти. Итак, сначала вам нужно определиться с нужной вам реализацией. В учебных целях я рекомендую сначала использовать эталонную реализацию (TinkerGraph).

Самый простой способ начать - использовать maven. Для этого добавьте следующую зависимость:

<dependency>
    <groupId>org.apache.tinkerpop</groupId>
    <artifactId>tinkergraph-gremlin</artifactId>
    <version>${tinkergraph.version}</version>
</dependency>

Если вы не используете maven, вам нужно добавить следующие jar-файлы в свой путь к классу (я не знаю uber-jar для TinkerGraph):

+- org.apache.tinkerpop:tinkergraph-gremlin:jar:3.0.1-incubating:compile
|  \- org.apache.tinkerpop:gremlin-core:jar:3.0.1-incubating:compile
|     +- org.apache.tinkerpop:gremlin-shaded:jar:3.0.1-incubating:compile
|     +- commons-configuration:commons-configuration:jar:1.10:compile
|     |  \- commons-lang:commons-lang:jar:2.6:compile
|     +- org.yaml:snakeyaml:jar:1.15:compile
|     +- org.javatuples:javatuples:jar:1.2:compile
|     +- com.carrotsearch:hppc:jar:0.7.1:compile
|     +- com.fasterxml.jackson.core:jackson-databind:jar:2.5.3:compile
|     |  +- com.fasterxml.jackson.core:jackson-annotations:jar:2.5.0:compile
|     |  \- com.fasterxml.jackson.core:jackson-core:jar:2.5.3:compile
|     +- com.jcabi:jcabi-manifests:jar:1.1:compile
|     |  \- com.jcabi:jcabi-log:jar:0.14:compile
|     +- org.slf4j:slf4j-log4j12:jar:1.7.12:compile
|     |  +- org.slf4j:slf4j-api:jar:1.7.12:compile
|     |  \- log4j:log4j:jar:1.2.17:compile
|     \- org.slf4j:jcl-over-slf4j:jar:1.7.12:compile

Теперь вы можете использовать API на своем языке Java (или другом базовом JVM).

Graph g = TinkerGraph.open(); // open in-memory Graph

Примечание: Tinkerpop3 требует Java 8 (он предлагает очень хороший API, основанный на потоках и лямбдах Java 8!).

person rmuller    schedule 02.11.2015

Я знаю, что это не прямой ответ на ваш вопрос, но я был там, где вы сейчас, и эта информация может пригодиться.

В настоящее время мы используем tinkerpop 3.0.1-incubating с titan 1.0.0 для работающего проекта. Я настоятельно рекомендую подробно изучить документацию tinkerpop .

В настоящее время я пробую шаблон проектирования, в котором у меня есть базовый класс утилит графа в Groovy (gremlin groovy очень похож на независимую оболочку, о которой вы упомянули). Смысл класса utils состоит в том, чтобы обернуть все функции обхода, доступа и извлечения (от узла / s x, пройти через ребра y и получить опору z и т. Д.). Это важно из-за того, что tinkerpop имеет тенденцию вносить некоторые изменения от версии к версии, и это служит единой точкой изменения. Затем я использую обычную java с этим классом utils, чтобы реализовать мою собственную вещь ORM.

Вот несколько отличных источников, которые я нашел полезными (около 4 минут на каждое видео):

https://www.youtube.com/watch?v=1Trx7cKwMOQ

https://www.youtube.com/watch?v=u7NWMOL5aUo

PS: вот несколько полезных отличных фрагментов, которые сэкономят ваше время в будущем:

обратите внимание на .fill (результат) как на метод получения информации, которую вы получили бы из оболочки

def result = []
g.V().values().fill(result)
return result.first()
person Joey Baruch    schedule 28.03.2016