Разрыв циклов отношений при построении путей в Cypher - PullRequest
0 голосов
/ 11 мая 2018

Graph layout

Приведенный выше график можно создать с помощью этого сценария Cypher:

CREATE
    (t1:Token {content: "Jake"}),
    (t2:Token {content: "wanted"}),
    (det:Token {content: "the"}),
    (t3:Token {content: "dog"}),
    (t4:Token {content: "neighbours"}),
    (t5:Token {content: "had"}),
    (t1)-[:PRECEDES {index: 0}]->(t2),      
    (t2)-[:PRECEDES {index: 1}]->(det),      
    (det)-[:PRECEDES {index: 2}]->(t3),      
    (t3)-[:PRECEDES {index: 3}]->(det),      
    (det)-[:PRECEDES {index: 4}]->(t4),
    (t4)-[:PRECEDES {index: 5}]->(t5);

Это график предложения "Джейк хотел собакуу соседей было ".Обратите внимание, что слово «the» появляется дважды.В этой модели каждый узел представляет определенное слово (не экземпляр слова).Однако мы должны быть в состоянии восстановить отдельное предложение, учитывая, что у нас есть индекс предложения в слове, закодированный в свойстве отношения :PRECEDES.

Есть ли способ запросить это предложение какпуть в Cypher, использующий свойство index, чтобы избежать ввода цикла в узле, представляющем the?

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Я согласен с Tezra для узлов предложения.

С вашей моделью у меня забавный результат

 MATCH (t2:Token) 
 WHERE NOT (t2:Token)<-[:PRECEDES]-(:Token)
 WITH t2
 MATCH (t2)-[pr:PRECEDES*..]->(t3:Token)
 WITH t2, last(pr).index AS pos, t3.content AS txt ORDER BY pos
 RETURN t2.content, pos, txt

последние два слова повторяются. Я предполагаю, что более длинное предложение вызовет больше шума Вы можете иметь предложение в PRECEDES

Советую иметь: Предложение в качестве начального узла со связями со словами.

Позже вы столкнетесь с проблемой "переподключенного узла" (с, вкл, ...) Взгляните на плагин NLP от graphaware

0 голосов
/ 11 мая 2018

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

1) Для каждого предложения создайте узел, представляющий этупредложение.

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

3) Вместо этого запустите Cyphers на ваших узлах "предложений".Упорядочить слова по отношению Индекс

Это значительно облегчит чтение, запрос и запись ваших данных.

...