KNIME: сравнить, содержит ли один столбец подмножество другого столбца

#java #string #comparison #knime

#java #строка #сравнение #knime

Вопрос:

В Knime я пытаюсь сравнить, содержится ли значение в одном столбце в другом столбце. Я пытался сделать это, используя «LIKE» в движке правил, но не смог заставить подстановочные знаки работать с вводом столбца вместо строки. Например.

 For row1 I want to check if column 1, row 1 is within column 2, row 1
For row2 I want to check if column 1, row 2 is within column 2, row 2
  

Например, «ABC» содержится в «test ABCtest»

Разрешает ли «LIKE» в Rule Engine для сравнения только жестко закодированные строки? Другие идеи для достижения этого? Спасибо за помощь!

Ответ №1:

Здесь может помочь узел обработки строк с помощью regexMatcher , хотя результатом будет строка (со значениями по умолчанию True / False ), поэтому потребуется дополнительный узел, если, например, требуется число (если другая строка, вы можете использовать ? / : тернарный оператор типа == "True" ? "when true" : join("when false it was because '", $columnReference$, "' was not found") ).

Вы можете использовать regexMatcher вот так ( Q / E помогает избежать обработки содержимого в Reference столбце как регулярного выражения (за исключением случаев, когда оно содержит E )):

 regexMatcher($text$, join(".*?\Q", $Reference$, "\E.* ")) == "True" ? "vrai" : "faux"
  

regexMatcher($text$, join(quot;.*?Qquot;, $Reference$, quot;E.* quot;))

Ответ №2:

Механизм правил допускает подстановочные знаки с оператором LIKE, но он не допускает подстановочных знаков в сочетании со столбцами, что означает, что следующее будет работать нормально:

 $column1$ LIKE "*test*" => "1"
  

Следующее также разрешено, но не будет работать нормально:

 $column1$ LIKE "*$column2$*" => "1"
  

Причина в том, что при использовании двойных кавычек $ не распознается, поэтому вы не получаете значения из column2. Вместо этого вы каждый раз получаете одну и ту же строку: "*$column2$*" что не то, что вы хотите.

Дополнительно вы можете использовать indexOf() функцию в узле «Обработка строк» или «Выражения столбцов», которая вернет первую позицию строкового значения из столбца 1 в столбец 2. Если не найдено, функция вернет значение -1. Следуйте за ним с помощью узла Rule Engine, чтобы добавить соответствующее указание.