kettle进行数据的简单处理

数据展示:

总数据展示

(一)

选取字符串最开始的数字和最后一个数字,筛除分隔符

数据如图

这里写图片描述

要进行操作的是“职位年薪”

采用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。

注意:空输出是必备的!

这里写图片描述

在模糊匹配时:匹配流是自定义常量,需要自定义输入。将主数据流与匹流进行算法的匹配,可选择是否再输出额外的在匹配流中的字段。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章