Сравнение списка со строкой в ​​neo4j, чтение из HTML - PullRequest
1 голос
/ 19 января 2020

Вот моя проблема: предположим, что у меня есть файл HTML, содержащий таблицу, подобную приведенной ниже

<table>
    <tr>
        <td> keyword1 </td>
        <td>
            <p> paragraph 1 </p>
        </td>
    </tr>
    <tr>
        <td> keyword2 </td>
        <td>
            <p> paragraph 2 </p>
            <p> paragraph 3 </p>
        </td>
    </tr>
    <tr>
        <td> keyword3 </td>
        <td>
            <p> paragraph 1 </p>
            <p> paragraph 3 </p>
        </td>
    </tr>
</table>

. Я использую следующий код для извлечения информации из HTML

CALL apoc.load.html("file:///input_HTML.html",{kwords:"table tr td:eq(1)",
paragraphs:"table tr td:eq(2)",paragraphsList:"table tr td:eq(2) p"}) YIELD value

То, что я хотел бы получить в конце, было бы для каждой строки ввода таблицы чем-то похожим на приведенное ниже утверждение, но, конечно, создавалось динамически при чтении файла HTML

* 1008. *

Самое сложное - получить название абзаца ... есть подсказка?

1 Ответ

1 голос
/ 20 января 2020

Вам нужно идти после элемента td с индексом 1; индекс элемента начинается с 0.

...
paragraphs:"table tr td:eq(1)",paragraphsList:"table tr td:eq(1)
...

Но я не уверен, что это все еще позволяет вам делать то, что вы хотите.

Как насчет получения ключевых слов за один проход, а затем выбора абзацы для каждого ключевого слова во втором проходе.

CALL apoc.load.html("file:///input_HTML.html",{kwords: "tr td:eq(0)"}) YIELD value
UNWIND value.kwords AS kw
WITH kw.text AS kw
CALL apoc.load.html("file:///input_HTML.html",{paras: 'tr:contains(' + kw + ') td:eq(1) p'}) YIELD value
UNWIND value.paras AS para
MERGE (k:kwords {name: kw }) 
MERGE (p:paragraph {name: para.text}) 
MERGE (k)-[:APPEARS_IN]->(p)
RETURN *
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...