kettle进行数据的简单处理
程序员文章站
2024-03-22 12:25:52
...
数据展示:
(一)
选取字符串最开始的数字和最后一个数字,筛除分隔符
数据如图
要进行操作的是“职位年薪”
采用js脚本:
var ZDNX = parseInt(职位年薪);
var index = indexOf(职位年薪,'-');
//var index1 = indexOf(职位年薪,'-');
var in1=indexOf(职位年薪,'元');
var ZGNX = parseInt(substr(职位年薪,index + 1,in1));
ZDNX是字符串最开始的的数字,可直接调用parseInt()方法。对于最后一个数字,先进行“-”的定位,再substr提取。
注意kettle中的许多函数的应用和网页中js的编写不同。
(变量的命名,在代码第三、四行,不知为何第三行index1会出现错误。望提出指正。)
(二)
整列Field值的替换
有两种方法
1.在采用自带的“字符串替换”步骤时,如果采用下图方式,则没有实现整个的替换,而是对每一个分隔得的字符前加上想要替换的值。
操作和结果如图:
2.使用js脚本,replace函数(var,var,var) 三个参数:字段名,被替换,替换成
var 公司地点 = replace(公司地点, 公司地点, '北京');
结果全部公司地点值 都为“北京”。
若采用更多形式的替换,可灵活运用函数和字符串替换。
(三)
模糊匹配
介绍:
kettle里有两个地方能找到相似度算法:“Calculator”步骤和“Fuzzy match”步骤偶这两个步骤里的相似度算法几乎一 样,但是工作方式不一样;“Calculator”步骤比较一行里的两个字段,而“Fuzzy match ”步骤使用查询的方式,从字典表中查询出相似度在一定范围内的记录。我们在使用这些步骤和算法之前,最好能理解这些算法的概念和用途。打开“Fuzzy match”步骤,选中算法列表,可以看到有很多可用的算法,如“Damerau-Levenshtein”,”Jaro Winkler”,”Double Metaphone”。这些算法的共同点就是用来做字符串匹配。但是他们的工作方式不一样,所以不同算法适合做不同的工作,如排重之类的工作。下面解释一下这些算法。
Levenshtein和Damerau-Levenshtein:编辑一个字符串到另一个字符串需要多少步骤,根据步骤数,来计算两个字符串之间的距离。第一个算法里的编辑步骤只包括插入字符,删除字符,更新字符,第二个算法里还包括调换字符位置的步骤。需要的最少步骤数就是最后的结果,例如”CASTERS”和“CASTRO”这两个字符串的距离就是2(步骤1:删除字母E;步骤2:把字母S替换成O)
Needleman-Wunsch: 这个算法主要用于生物信息学领域,以差异扣分的方法来计算距离,上面的CASTERS和CASTRO的距离是-2
Jaro和Jaro-Winkler: 计算两个字符串的相似度,结果是介于0(完全不一样)到1(完全一样)之间的小数。例如我们使用Lenvenshtein算法计算CASTERS和POOH相似度时,结果是7,而使用Jaro或Jaro-Winkler算法时,结果是0,因为两个字符串之间没有任何相似度。而Levenshtein算法总会得到一个距离,因为一个字符串经过编辑总是可以变成另一个字符串。
Pair Letters similarity: 只有“Fuzzy match”步骤里有这个算法,这个算法把两个字符串都分割成多个字符对,然后比较这些字符对。如CASTERS和CASTRO这个例子,这两个字符串被分割成{CA, AS, ST, TE, ER, RS}和{CS,AS,ST,TR,RO},最后的相似度=(相等的字符对个数)乘以2/两个字符串的字符对总个数,这个例子就是(3*2)/11=0.545(这个结果是匹配度非常高的)
Metaphone,Double Metaphone, Soundex和RefinedSoundEx:这些算法都是利用单词的发音来做匹配,也称为语音算法。这些语音算法的缺点是以英语为基础,所以基本不能用于法语,西班牙语,荷兰语等其他语种。
当然,最后的问题就是我们应该选择哪个算法,这取决你要解决的问题。对信息提取类的需求,例如,提取亚马逊上所有的图书,找出和Pentaho相关的图书,并给出相似度分数,这时就可以使用字符对的模糊匹配算法。如果要做数据排重工作,而且还可能有拼写错误,这时就要使用Jaro-Winkler算法。但使用该算法时要小心匹配不准确的情况,如“Jos van Dongen”和“Davidson”这两个人名的相似度是0.615,而“Jos van Dongen”和“Dongen, jos van”这两个人名的相似度是0.604,从计算结果看前面一对人名相似度更高,但是我们可以看出后面的一对人名实际上是同一个人
实例:
这是流程:
需要注意的是椭圆圈起来的的步骤。输入数据无所谓,都可以,在这里我要用的是js脚本输出的“职位类别”Field。
注意:空输出是必备的!
在模糊匹配时:匹配流是自定义常量,需要自定义输入。将主数据流与匹流进行算法的匹配,可选择是否再输出额外的在匹配流中的字段。
上一篇: kettle教程1(转换)
下一篇: python操作Redis数据库
推荐阅读
-
kettle进行数据的简单处理
-
简单说下JDBC的批处理 博客分类: jdbc jdbc
-
用批处理写的:数据库备份还原工具(第三版) 博客分类: 批处理 OracleCC++C#F#
-
用批处理写的:数据库备份还原工具(修正加强版) 博客分类: 批处理 OracleCC++C#F#
-
用批处理写的:数据库备份还原工具 博客分类: 批处理 OraclesubversionSQL ServerCC++
-
用批处理写的:数据库备份还原工具(修正加强版) 博客分类: 批处理 OracleCC++C#F#
-
用批处理写的:数据库备份还原工具(第三版) 博客分类: 批处理 OracleCC++C#F#
-
vue学习笔记之:以对学生数据的处理作为示例实现数据过滤筛选等常规处理
-
[Vue]如何实现一个简单的表格数据筛选查找 (根据ElementUI表格展示)(数组筛选)
-
GreenDao数据库的简单使用