Как я могу найти строковые параметры в тексте запросом шифра? - PullRequest
0 голосов
/ 09 февраля 2019

У меня есть база данных, в которой я сохранил несколько узлов :Post и :HashTag.Узел :Post имеет свойства id и text.Узел :HashTag имеет свойства id и tag (тегом здесь является имя или текст HashTag).

:HashTag все узлы в нижнем регистре и начинаются с #.Я хочу написать запрос, что всякий раз, когда я создаю новый Post, который содержит текущий HashTag в базе данных в нем, он автоматически находит HashTag в свойстве text узла :Post и создает отношениеНапример:

(:Post)<-[:TAG]-(:HashTag)

Например, я создаю :Post: Today is #friday, ready for the #weekend

У меня есть weekend hashTag в моей базе данных, но не friday.Так что я буду иметь отношение TAG между этим :Post и weekend hashTag и не иметь ничего общего с friday hashTag.

Но если у меня есть это :Post:

Chrismats #holiday , and #traveling

Здесь у меня есть и #holiday и #traveling как :HashTag в моей базе данных, поэтому у меня будет одно TAG отношение между этими :Post и #holiday и одним TAG отношение между этим :Post и #travelling

Есть идеи, как мне написать этот запрос?

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Ответ здесь https://stackoverflow.com/a/54661113/9161843, так как я искал решение по коду:

function getHashTags(postText) {
  const regex = /#[^\s!$%^&*+.,£#]+/gm;
  const selectedHashTag = [];
  const subStr = postText.split(' ');
  const checkHashTag = _.filter(subStr, word => word.startsWith('#') || word.includes('#'));

  checkHashTag.map((hashTags) => {
    if (hashTags.match(regex)) {
      hashTags.match(regex).map(hashTag => selectedHashTag.push(hashTag.substr(1)));
    }
    return true;
  });
  return selectedHashTag;
}
0 голосов
/ 09 февраля 2019

Здесь вам нужно будет выполнить некоторую обработку текста, сначала используя split() вокруг пробела, чтобы получить список слов, отфильтровывая только слова, начинающиеся с «#», а затем очищая слово (для преобразования в строчные буквы и удалениязнаки препинания и не алфавитно-цифровые символы).Вам понадобится Процедуры APOC , чтобы использовать чистую функцию

. Вы можете сделать UNWIND в списке (чтобы каждое слово находилось в отдельной строке), сопоставить узел: HashTag симя и создать связь.

... // assume you just created post:Post with text, with post and text still in scope
WITH post, [tag in split(text, ' ') WHERE tag STARTS WITH '#' | apoc.text.clean(tag)] as tagWords
UNWIND tagWords as tagWord
MATCH (tag:HashTag {tag:tagWord})
CREATE (tag)-[:TAG]->(post)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...