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。

注意:空輸出是必備的!

這裏寫圖片描述

在模糊匹配時:匹配流是自定義常量,需要自定義輸入。將主數據流與匹流進行算法的匹配,可選擇是否再輸出額外的在匹配流中的字段。

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