KNIME: Сравнить, если один столбец содержит подмножество другого столбца. - PullRequest
0 голосов
/ 26 марта 2019

В 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" в тесте "ABCtest"

Разве "LIKE" в механизме правил допускает только жестко закодированные строки для сравнения? Другие идеи для достижения этой цели? Спасибо за помощь!

Ответы [ 2 ]

2 голосов
/ 26 марта 2019

Узел String Manipulation с regexMatcher может помочь здесь, хотя результатом будет String (со значениями True / False по умолчанию), поэтому потребуется дополнительный узел, если для например, требуется число (если отличается String, вы можете использовать троичный оператор ? / :, например == "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(

0 голосов
/ 01 апреля 2019

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

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

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

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

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

Кроме того, вы можете использовать функцию indexOf() в узле String Manipulation или Column Expressions, которая будет возвращать первую позицию строкового значения из column1в колонке 2.Если не найдено, функция вернет -1.Затем добавьте узел Rule Engine, чтобы добавить соответствующее указание.

...