#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"
Ответ №2:
Механизм правил допускает подстановочные знаки с оператором LIKE, но он не допускает подстановочных знаков в сочетании со столбцами, что означает, что следующее будет работать нормально:
$column1$ LIKE "*test*" => "1"
Следующее также разрешено, но не будет работать нормально:
$column1$ LIKE "*$column2$*" => "1"
Причина в том, что при использовании двойных кавычек $ не распознается, поэтому вы не получаете значения из column2. Вместо этого вы каждый раз получаете одну и ту же строку: "*$column2$*"
что не то, что вы хотите.
Дополнительно вы можете использовать indexOf()
функцию в узле «Обработка строк» или «Выражения столбцов», которая вернет первую позицию строкового значения из столбца 1 в столбец 2. Если не найдено, функция вернет значение -1. Следуйте за ним с помощью узла Rule Engine, чтобы добавить соответствующее указание.