Arhn - архитектура программирования

neo4j шифротекст как рефакторинг графа

У нас есть граф-БД с текстом в виде графика. В системе разрывы страниц выражаются с помощью (pb)-узлов. Теперь я хочу смоделировать страницы с узлами (страницы), которые указывают на начало и конец страницы.

Пример текста в графе с w-узлами для слов (n-свойство является инкрементным):

(pb {n:1})-[:NEXT]->(w)-[:NEXT]->(w)-[:NEXT]->(w)-[:NEXT]->
(w)-[:NEXT]->(pb {n:2})-[:NEXT]->(w)-[:NEXT]->(w)-[:NEXT]->
(w)-[:NEXT]->(w)-[:NEXT]->(pb {n:3})-[:NEXT]->(w)-[:NEXT]->
(w)-[:NEXT]->(pb {n:4})

Результат должен добавить эти узлы к ребрам:

(pb {n:1})-[:FIRST_CHILD-OF]->(Page)<-[:FIRST_CHILD-OF]->(pb {n:2})
(pb {n:2})-[:FIRST_CHILD-OF]->(Page)<-[:FIRST_CHILD-OF]->(pb {n:3})
(pb {n:3})-[:FIRST_CHILD-OF]->(Page)<-[:FIRST_CHILD-OF]->(pb {n:4})

Любая помощь будет здорово.

17.02.2018

  • Всегда ли значения n для узлов :pb возрастают, и должна ли каждая возрастающая пара быть связана? (1 и 2; 2 и 3; 3 и 4 и т. д.)? 18.02.2018

Ответы:


1

Вот ответ, который я нашел (используя информацию отсюда: Как найти путь в шифре нежадным способом)

// Find pb tags
MATCH (t1:pb})
WITH collect(t1) AS tags

// create unique pairs
UNWIND tags AS x UNWIND tags AS y    
WITH x, y WHERE ID(x) < ID(y)
AND y.n = x.n+1

// create nodes and edges
CREATE (p:Page)
MERGE (y)<-[:FIRST_CHILD_OF]-(p)-[:LAST_CHILD_OF]->(x)
RETURN *;
18.02.2018
  • Вы можете перепроверить результаты здесь. Это дает вам почти декартово произведение узлов :pb друг на друга (хотя первый узел pb всегда будет иметь более низкий идентификатор графа, чем второй). 18.02.2018
  • Спасибо за вашу помощь! Просто добавил дополнительную информацию к вопросу и ответу. 18.02.2018
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..