KNIME:比较一列是否包含另一列的子集

KNIME: Compare if One Column Contains a subset of another column

在 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"是否只允许硬编码字符串进行比较?实现这一目标的其他想法?感谢您的帮助!

带有 regexMatcherString Manipulation 节点在这里可以提供帮助,尽管结果将是字符串(默认值为 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"

规则引擎允许使用 LIKE 运算符使用通配符,但不允许将通配符与列结合使用,这意味着以下内容可以正常工作:

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

也允许以下内容,但不能正常工作:

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

原因是双引号 $ 无法识别,因此您无法从 column2 中获取值。相反,您每次都会得到相同的字符串:"*$column2$*" 这不是您想要的。

此外,您可以在字符串操作或列表达式节点中使用 indexOf() 函数,该函数将 return 来自 column1 的字符串值的第一个位置到 column2 中。如果没有找到,该函数将 return -1。跟随规则引擎节点添加适当的指示。