在模糊查找中我们提到脏数据是怎样进入到表中的事情,主要还是由于一些“Lazy-add”造成的。这种情况我们的肉眼很容易被欺骗,看上去是同一个单词,其实就差那么一个字母,变成了两个不同的单词。一个简单的例子是X-Ray Tech和xRey,我们很有可能认为他们是同一个职务,CT操作员,但是如果让计算机来处理的话,它们是两种截然不同的东西。
和模糊查找一样,模糊分组可以查找出多行中出现的类似的单词进行归类。我们可以使用这些归类得到的结果清洗数据源或者在不修改基础数据的情况下对原表进行修改。模糊分组也需要一个输入字符流,还需要一个OLE DB数据连接,用于存放分析得到的结果。
模糊分组任务的编辑界面有下面三个标签
- 连接管理:这个标签用来设置OLE DB连接,在这个连接的数据库中存放分组结果,这个标签和前面提到的是一样的效果
- 列:这个标签显示输入流中的列,在这里需要选择一些需要进行模糊分组的列,如图1。每一个被选中的列将会被分析,产生一些新的结果列。如果没有选择的话,这些列将会被标记为PassThrow列,意思是不进行模糊分组,直接将导出到输出流中。在这里也可以根据自己的意愿修改Group Output Alias,Output Alias,CleanMatch和Similarity Alias的名字。Numerals选项,如图2,这个选项有前导,后导,前导和后导,不用前导后导,四个选项。在对类似地址的一些数据进行模糊分组的时候这个选项会很有用。最后有一个Comparison flags选项可以设置忽略大小写,忽略符号等设置。
图1
图2
- 高级:这个标签选项中可以设置与模糊分组算法有关的选项。在这里可以修改将要派生的三个列的列名,默认情况下它们分别是“_key_out”,“_key_in”,“_score”。下面的Similarity threshold可以控制相似度,默认的值是0.5。分隔符选项中可以设置忽略输入字符流中的“.”或空字符等,默认情况下会忽略所有常见字符。如图3。
图3
下面我们做一个例子来说明模糊分组的用法。假设人事部门在输入每个员工的职位信息的时候会有一些笔误,这里我们使用模糊分组来得到最标准的职位名称和每个员工的职位和这个标准的名称的相似度。
- 创建一个package命名为FuzzlyGroupExample.dtsx,在Control Flow界面中拖放一个Data Flow任务,双击进入Data Flow界面
- 下载下面的txt文件,命名为empdata.txt,存放在一个本地路径里。下载文件
- 3. 添加一个平面文件连接,命名为EmployeeData,连接上面创建的txt文件。设置Format属性为Ragged Right,设置第一行为列名,点击列边界分别在第5个字符和第28个字符处点击放置两个分割线如图4。点击高级标签设置TITLE的OutputColumnWidth为50,保存连接。
图4 - 添加一个在Data Flow中拖放一个平面文件数据源,连接路径设置为上述文件。添加一个OLE DB数据目的。
- 打开OLE DB数据目的,创建一个连接,连接本地AdventureWorkers数据库。
- 添加一个模糊分组任务,作为平面文件数据源和OLE DB数据目的的中间任务连接起来。
- 如上图1,选择TITLE列作为输入列,其他选项默认。
- 在高级标签界面中,选择相似度为默认0.5,这里都默认设置选项。
- 打开OLE DB数据目的,点击Name of Table or View,创建一个新的表,命名为[FuzzyGrouping],点击Mapping标签,保留默认设置。
- 在模糊分组任务和数据目的之间添加一个DataViewer,选择类型为grid。运行这个package,DataViewer如图5。 最后运行解雇如图6。
图5
图6
最后我们查看结果EXECUTIVE VICE PRESIDEN,EXEC VP, FLDS OPS MGR , FIELDS OPERATIONS MANAG, X-RAY TECH被认为是标准数据,其他数据和他们做模糊比较。如图7。
图7
作者:Tyler Ning
出处:http://www.cnblogs.com/tylerdonet/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过以下邮箱地址williamningdong@gmail.com
联系我,非常感谢。