【KNIME经验】列聚合判断字符串是否含有若干子串

背景:我们有这样一个Excel文档,其中有两个工作簿,第一个工作簿中记录了零件的代码和零件的描述,其中零件的描述是长字符串,其中可能含有运营商的标识符;第二个工作簿是运营商的标识符列表,其中的字符串可能为零件描述文本的子字符串。需求是批量判断零件描述字符串中,是否出现过第二个工作簿中的运营商标识符,出现过一次或多次,都得到结果“是”,否则为“否”。

我们将使用多种方案来实现上述需求,从而通过这样的案例,加深对KNIME诸多节点功能的认识,将来可以拓展到其他需求解决当中去。


方案4:视频介绍请移步B站,搜索Up:“星汉长空”,视频:KNIME案例(271)批量子串匹配4。具体步骤介绍请参考视频,下面仅简要介绍关键的步骤及涉及到的节点功能。

思路:与方案一的思路类似,使用循环节点遍历若干个运营商标识符,每次通过其中一个运营商标识符,依据零件描述文本特点构造正则表达式,看批量的零件描述是否与之匹配,通过KNIME字符串处理(String Manipulation)节点下的regexMatcher函数就可以得到匹配结果。方案一将这样的批量匹配结果累积在行方向,需要使用分组节点加以处理;如果将结果累积在列方向(这里涉及到对循环节点的使用技巧,具体解释参见解释2),就可以通过列聚合节点加以处理,同样可以得到最后的判别结果,判断运营商标识符是否在零件描述中出现过。

对于同一个零件对于多个运营商标识符形成的正则表达式匹配结果(布尔型或者整型)在列方向上进行聚合,只要一个匹配结果为“true”,就得到判别结果“是”;否则,为“否”。

步骤1. 如图所示,在KNIME中加入两个Excel Reader节点,分别读入数据源Excel文件的两个工作簿(注意工作簿名的选取设置)。得到零件代码和零件描述列表,还有运营商标识符列表。

步骤2. 加入表行转变量循环(Table Row To Variable Loop Start)节点,将其与运营商标识符列表相连,这样就可以循环读取表格中的运营商标识符信息。为了判断零件描述是否与这样的标识符相匹配,还需要拖入String Manipulation(Variable)节点,依据零件描述文本的特点来构造一个正则表达式与之匹配,这一步非常灵活,参见解释2。

步骤3. 拖入KNIME字符串处理(String Manipulation)节点,将其与零件代码和零件描述列表(另外一个Excel Reader节点)相连接,再将步骤2构成的表达式变量通过流变量与之连接,在字符串处理中使用regexMatcher函数来判断批量的零件描述是否可以与步骤2构成的正则表达式相匹配,并使用toBoolean函数,返回布尔型匹配结果。

步骤4. 方案一是通过 Table Row To Variable Loop Start 以及 Loop end 节点组合搭配,完成了匹配结果的行方向累积;本方案使用 Table Row To Variable Loop Start 以及 Loop end (Column Append) 节点组合搭配,使匹配结果在列方向累积。

4.1 在循环内部加入 Math Formula 节点,对布尔型的变量进行转换,将“true”转为整型“0”;“false”转为整型“1”。再拖入 Column Aggregation 节点,在 Columns 标签页,选择“Type Selection”选项,替代手动选择列,勾选“Number (integer)”类型,自动选择所有整型列,我们刚才构造的所有整型列都被选入,这里一旦出现过一次“true”就会出现“0”,我们可以通过列聚合当中的乘积方法,得到所有列的乘积,如果结果为“0”,就说明出现过运营商标识符。只有所有标识符都没出现过,结果都是“1”,这里乘积才会不为零,这是方案4的核心思想。选择 Column Aggregation 节点的 Options 标签页,设置聚合的方法为“Product”,并设置聚合的列名为“是否运营商”。

4.2 不必将布尔型转变为整型,使用 Column Filter节点,通过设置正则表达式,取到所有布尔型的列,然后直接对布尔型进行字符串组合,再通过 Column Combiner 节点对所有布尔型的匹配结果加以合并。这一步的实现方式很多,也可以通过布尔型之间的运算来实现。

步骤5. 使用 Rule Engine 节点或者 String Manipulation 节点对布尔型或者整型的匹配结果做最后的修整,转变为“是”或“否”的字符串判别结果

5.1 加入 Column Filter 节点,过滤掉辅助列;再加入Rule Engine节点,对表格的结果做最后的修整。需要将整型的结果,转变为“是”或“否”的字符串判别结果。在Rule Engine节点的Expression框中写下逻辑表达式,如果“是否运营商”值为“0”,那么文字描述结果就为“是”;否则,在下方默认值处,写下TRUE(代表默认结果)的文字描述为“否”。亦即如果第一行逻辑判断不能满足的情况下,“是否运营商”为“1”,则赋予默认结果为“否”。最后选择Replace Column,替换掉原来的整型属性列,得到文字描述性的结果。

5.2 加入 String Manipulation 节点,对字符串中是否出现过“true”加以判断(具体设置可以参考268集对应的帖子)。


解释1. 何为KNIME?KNIME数据分析平台是一款强大开源的数据挖掘软件平台,可以固化数据处理的流程,在人与人,人与机器之间进行传递。

解释2. 为什么可以做到将批量的匹配结果在列方向累积?这里涉及到思维层面的转变,KNIME里面的若干循环起始节点和终了节点并不是一一对应的,虽然我们平时看到的例子,很多时候某些组合比较常见,但那并不是它们唯一的使用方法。突破了这个思维限制之后,我们对于循环节点的使用水平会有进一步的提升,不同的循环起始节点和不同的终了节点形成了多对多的关系,巧妙使用将起到意想不到的作用,加快问题解决的效率。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值