发明内容
本发明的实施例提供了一种中文地址数据的发现与分类方法,以实现有效地提取数据表中的关键数据。
为了实现上述目的,本发明采取了如下技术方案
一种中文地址数据的发现与分类方法,包括:
预先设定中文地址对应的数据分析规则;
提取数据表中的采样数据;
按照所述中文地址对应的数据分析规则,对所述采样数据进行中文地址数据分析,根据分析结果发现所述采样数据中的中文地址。
所述的预先设定中文地址对应的数据分析规则,包括:
将中国地址种类的数据划分为省、市、县、镇、村和街道/路六个级别,根据所述六个级别衍生出21个子类,分别是:省、省到市、省到县、省到镇、省到村、省到路、市、市到县、市到镇、市到村、市到路、县、县到镇、县到村、县到路、镇、镇到村、镇到路、村、村到路、路;
对省、市、县、镇、村和街道/路分别设置一个计数器。
所述的预先设定中文地址对应的数据分析规则,还包括:
构造所述省、市、县、镇、村和街道/路中文地址对应的数据字典,该数据字典中存储了省、市、县、镇、村和街道/路中文地址数据种类中的典型数据。
所述的提取数据表中的采样数据之前,还包括:
读取所述数据表所在的数据库的元数据,该元数据包括每个数据表的数据表名、数据中存储的数据的描述信息,以及每个数据表中的每个字段的字段名、数据类型定义、数据长度精度限制信息,根据所述元数据判断出所述数据库中需要进行数据分析的数据表和数据表中需要进行数据分析的字段;
根据所述数据表中每个字段的字段类型和长度精度,确定需要匹配中文地址对应的数据分析规则的字段。
所述的提取数据表中的采样数据,包括:
设置数据表的采样行数规则为:提取数据表的前N行,从数据表的第N+1行开始提取M‰比率的数据行;当所述数据表中的全部数据记录的行数小于等于所述采样行数阈值N,则提取所述数据表中的全部记录行数的数据作为采样数据;当所述数据表中的数据记录的行数大于所述采样行数阈值,则提取所述数据表中的排列在前列的所述采样行数阈值N的行数,以及排列在所述采样行数阈值的行数后面的全部数据记录的行数的设定比率M‰作为采样数据。
所述的按照所述中文地址对应的数据分析规则,对所述采样数据进行中文地址数据分析,根据分析结果发现所述采样数据中的中文地址,包括:
选取所述采样数据中的第一张数据表的第一行数据记录的数据,对所述第一行数据记录的数据进行拆分,得到多个字段的数据,选取第一个字段的数据,当所述第一字段的类型为字符串类型的字段,且长度大于等于2,则按照中文地址对应的数据分析规则,对所述第一个字段的数据进行中文地址数据分析,根据分析结果对省、市、县、镇、村和街道/路的计数值进行统计处理;
选取第二个字段的数据,按照所述第一个字段的数据分析过程,对所述第二个字段的数据进行数据分析,依次类推,对所述第一行数据记录中的每个字段的数据进行数据分析;
选取所述采样数据中的第二行数据记录的数据,按照所述第一行数据记录的数据的数据分析过程,对所述第二行数据记录的数据进行数据分析,依次类推,对所述采样数据中的所有数据表中的所有行数据记录的数据进行数据分析;
根据某个数据表中的某个字段对应的省、市、县、镇、村和街道/路计数器的计数值,判断所述某个字段的数据类型是否为中文地址。
所述的按照中文地址对应的数据分析规则,对所述第一个字段的数据进行中文地址数据分析,根据分析结果对省、市、县、镇、村和街道/路的计数值进行统计处理,包括:
使用正向最大匹配法对字段的数据进行中文分词,获得所述字段的数据中的地址分词,生成所述地址分词的hash值;
判断所述字段的数据中是否包含设定的街道/路的关键字,如果包含,则将所述地址分词的hash值分别在街道/路字典、省字典、市字典、县字典、镇字典和村字典对应的hashmap索引结构进行检索;否则,将所述地址分词的hash值分别在省字典、市字典、县字典、镇字典和村字典对应的hashmap索引结构进行检索;
当所述地址分词的hash值在某个地址字典对应的hashmap索引结构中检索到,则将所述某个地址字典对应级别的计数器的计数值加1,当所述采样数据中所述字段的数据全部分析完成后,根据所述六个子类对应的计数器的计数值确定所述某个字段的数据类型。
所述的当所述地址分词的hash值在某个地址字典对应的hashmap索引结构中检索到,则将所述某个地址字典对应级别的计数器的计数值加1,包括:
使用中文分词正向最大匹配法对所述字段的数据进行分词,根据六个级别的中文地址字典的内容重新组织生成另一套地址分词字典,所述地址分词字典包括:15字字典、13字字典、12字字典、11字字典、10字字典、9字字典、8字字典、7字字典、6字字典、5字字典、4字字典、3字字典、2字字典,并生成所述地址分词字典中每个字典对应的hashmap索引结构;
从所述字段的数据由左至右取出连续的15个中文字并生成hash值,长度不够15字的取最大连续中文字,将所述15个中文字对应的hash值在15字字典的hashmap索引结构中匹配;若所述15个中文字对应的hash值没有在15字字典的hashmap索引结构中匹配到,那么将所述15个中文字最右边去除两个单字,得到一个13字的中文字符串并生成hash值,将所述13个中文字对应的hash值在13字字典的hashmap索引结构进行匹配;
若所述13个中文字对应的hash值没有在13字字典中的hashmap索引结构匹配到,那么将所述13字中文字符串最右边去除一个单字,得到一个12字的中文字符串并生成hash值,将所述12个中文字对应的hash值在12字字典的hashmap索引结构进行匹配,如此重复循环,直到所述字段的数据的某个中文字的hash值在某个地址分词字典的hashmap索引结构中匹配成功,则将所述hash值对应的中文字符串为一个有效中文地址分词,并记录下来,不进行后续的hash值在地址分词字典的hashmap索引结构中的匹配操作;
若所述字段的数据的所有中文字的hash值在所有地址分词字典的hashmap索引结构中都没有匹配成功,则获得所述字段的数据的一个中文单字,将所述字段的数据左边去除获得的所述有效中文地址分词或者中文单字,得到剩余中文字符串,按照所述字段的数据在所有地址分词字典的hashmap索引结构中的匹配过程,将所述剩余中文字符串在所有地址分词字典的hashmap索引结构中进行匹配,获得若干有效中文地址分词、单字、数字或特殊字符;
从所述有效中文地址分词从左到右取词,生成所述中文地址分词的hash值,将所述中文地址分词的hash值在各个地址分词字典对应的hashmap索引结构中进行检索,当所述某个地址分词字典对应的hashmap索引结构中检索到所述中文地址分词的hash值,将所述某个地址分词字典对应级别的计数器的计数值加1;重复执行上述处理过程,直到所有有效中文地址分词在各个地址分词字典对应的hashmap索引结构中都检索完毕;
选取所述采样数据中的下一个数据记录中的所述字段的数据,对所述下一个数据记录中的所述字段的数据进行数据匹配,直到所述采样数据中所有所述字段的数据都进行了数据匹配。
所述的采样数据中所述字段的数据全部匹配完成后,根据所述六个级别对应的计数器的计数值确定所述某个字段的数据类型,包括:
当所述六个级别对应的计数器的计数值之和大于等于进行匹配的所述字段的数据的总数量的100%,则判断所述字段的数据类型为地址。
所述方法还包括:
当判断所述字段的数据类型为地址后,获取六个级别对应的6个地址字典分别对应的特征标识位,并计算所述每个特征标志位的计数器的计数值在所述整个字段数据总量所占的百分比,获取大于特定百分比的特征标志位的最宽的区间,将所述最宽的区间中包含的级别对应子类作为该字段最终的数据类型特征。
由上述本发明的实施例提供的技术方案可以看出,本发明实施例通过预先设定中文地址对应的数据分析规则,对采样数据进行数据分析,可以自动、有效地发现企业应用数据库的数据表中的中文地址数据种类,高效率地将企业应用数据库的数据表中的中文地址关键数据找出来并归类。
本发明附加的方面和优点将在下面的描述中部分给出,这些将从下面的描述中变得明显,或通过本发明的实践了解到。
实施例一
本发明实施例提供了一种有效的、能显著提高准确率的方法,能让企业单位在自身众多复杂的系统当中,找到关键数据并进行分类,便于进一步采取相应的措施。
该实施例提供了一种中文地址数据的发现与分类方法的处理流程如图1所示,包括如下的处理步骤:
步骤S110、预先设定中文地址对应的数据分析规则和计数器。
本发明实施例的数据发现和分类的基本原理是对采样数据中的字段的数据进行扫描和分析,得到字段的数据的特征,然后对字段的数据进行归类。同一个字段的数据,需要经过所有隐私数据种类的特征规则算法的分析统计,最终根据相似度来判断它有最有可能是哪一种类型的隐私数据。上述隐私数据可以称为私密数据或敏感信息。
常见的隐私数据种类为身份证号码、邮政编码、营业执照号(工商注册号)、组织机构代码、纳税人识别号、电子邮件地址、企业名称、电话号码、中文姓名和地址共10种隐私数据种类。本发明实施例将中国地址种类的隐私数据划分为省、市、县、镇、村和街道/路六个级别,根据所述六个级别衍生出21个子类,分别是:省、省到市、省到县、省到镇、省到村、省到路、市、市到县、市到镇、市到村、市到路、县、县到镇、县到村、县到路、镇、镇到村、镇到路、村、村到路、路。
对省、市、县、镇、村和街道/路分别设置一个计数器。
构造所述省、市、县、镇、村和街道/路中文地址对应的数据字典,该数据字典中存储了省、市、县、镇、村和街道/路中文地址数据种类中的典型数据。
步骤S120、根据数据库的元数据,获取需要进行隐私数据分析的数据表,以及数据表中的字段类型。
读取所述数据表所在的数据库的元数据,该元数据包括每个数据表的数据表名、数据中存储的数据的描述信息,以及每个数据表中的每个字段的字段名、数据定义、数据限制信息,根据所述元数据判断出所述数据库中需要进行隐私数据提取的数据表和数据表中需要进行隐私数据提取的字段,以及每个字段的字段类型,该字段类型包括数值类型的字段和字符串类型的字段。
根据所述数据表中每个字段的字段类型和长度精度,确定需要匹配中文地址对应的数据分析规则的字段。
步骤S130、提取需要进行数据分析的数据表中的采样数据。
设置数据表的采样行数阈值,当所述数据表中的全部数据记录的行数小于所述采样行数阈值,则提取所述数据表中的全部记录行数的数据作为采样数据;当所述数据表中的数据记录的行数大于或者等于所述采样行数阈值,则提取所述数据表中的排列在前列的所述采样行数阈值的行数,以及排列在所述采样行数阈值的行数后面的全部数据记录的行数的设定比率作为采样数据。
比如,上述采样行数阈值为1000,采样率缺省为取前1000行,后面从1001行开始取千分之一,每1000行取一行,采样率可根据实际情况配置选择。
步骤S140、按照所述中文地址对应的数据分析规则,对所述采样数据进行中文地址数据分析,根据分析结果发现所述采样数据中的中文地址。
隐私数据种类发现规则与算法中的统一规则如下:
1.输入值为空值、空串或者空格均不计入阀值统计。
2.全角字符预先在调用层转换成半角处理;
3.以下每种隐私数据类型的内部的算法规则,若无特别说明,均为顺序执行且不可忽略,即某条规则校验失败则后面的规则无需校验,该种隐私数据类型判断失败。
4.字典检索加速方法,本发明实施例提供的一种根据关键字的hash值检索得到完整关键词的示意图如图2所示,针对字典值超过100个的字典建议开始使用此方法:
a)将字典中的每一个数据分别使用hash算法生成hash值;
b)将字典中所有数值的hash值分别取特定数值的余数,而每个具体的余数值都对应一个槽位用于存放对应的hash值,该槽位为第一级别,比如取39的余数对应会有0到38余数值总共39个一级槽位;
c)将所述hash值根据其特定值的余数,按顺序放入对应所述槽位;
d)这样即完成多级hashmap索引的第一级别的构建;
e)将所述第一个槽位的hash值取出再次取非上述特定数值因子的数值的余数,同时会得到对应多个二级槽位,这里举例取37的余数,那么每个上述的一级槽位会对应有最多37个二级槽位;
f)将所述每个一级槽位的hash值再分别按顺序装入对应的所述二级槽位,完成多级hashmap索引的第二级别的构建;
g)再将上述某个二级槽位的hash值取出,并计算其非上述所有特定数值因子的数值的余数,对应得到若干个三级槽位,举例这里取34的余数,那么每个上述的二级槽位会对应有最多34个三级槽位;
h)将所述每个二级槽位的hash值再分别按顺序装入对应的所述三级槽位,完成多级hashmap索引的第三级别的构建;
i)如此重复,直到每个槽位中的hash值数量小于等于特定阀值数量,即完成整个多级hashmap索引的构建;
j)字生成的索引结构留着内存中待用
k)字段数据在使用所述字典的hashmap索引结构进行匹配查找时,需要将所述字段数据用同样的hash算法生成hash值在索引中匹配搜索
选取所述采样数据中的第一张数据表的第一行数据记录的数据,对所述第一行数据记录的数据进行拆分,得到多个字段的数据,选取第一个字段的数据,当所述第一字段的类型为字符串类型的字段,且长度大于等于2,则按照中文地址对应的隐私数据分析规则,对所述第一个字段的数据进行中文地址数据分析,根据分析结果对省、市、县、镇、村和街道/路计数器的计数值进行统计处理。
选取第二个字段的数据,按照所述第一个字段的数据的隐私数据的分析过程,对所述第二个字段的数据进行隐私数据分析,依次类推,对所述第一行数据记录中的每个字段的数据进行隐私数据分析;
选取所述采样数据中的第二行数据记录的数据,按照所述第一行数据记录的数据的隐私数据的分析过程,对所述第二行数据记录的数据进行隐私数据分析,依次类推,对所述采样数据中的所有数据表中的所有行数据记录的数据进行隐私数据分析;
根据某个数据表中的某个字段对应的省、市、县、镇、村和街道/路计数器的计数值,判断所述某个字段的数据类型是否为中文地址。
进一步地,所述的按照中文地址对应的隐私数据分析规则,对所述第一个字段的数据进行中文地址隐私数据分析,根据分析结果对省、市、县、镇、村和街道/路的计数值进行统计处理,包括:
将地址分成省、市、县、镇、村和街道/路六个级别,分别设置所述六个子类对应的计数器。
ADR表示这个字段是地址;
P标志位为省,对应字典为DICT_CN_ADDR_PROV
C标志位为市,对应字典为DICT_CN_ADDR_CITY
D标志位为县,对应字典为DICT_CN_ADDR_DIST
T标志位为镇,对应字典为DICT_CN_ADDR_TOWN
V标志位为村,对应字典为DICT_CN_ADDR_VILLAGE
S标志位为街道或者路,对应字典为DICT_CN_ADDR_STREET
通过ADR(mn)表示这个地址当中包含的地址信息含有哪部分,m和n是上面的标志位,注意,上级标志位必须在左边。这就意味根据所述六个级别衍生出21个子类,分别是,分别为:省、市、县、乡、村、道路、省到市、省到县、省到乡、省到村、省到道路、市到县、市到乡、市到村、市到道路、县到乡、县到村、县到道路、乡到村、乡到道路、村到道路。例如ADR(CC)表示这个字段仅仅是市,ADR(DS)表示该字段是区到街道都有。
使用正向最大匹配法对字段的数据进行中文分词,获得所述字段的数据中的地址分词,生成所述地址分词的hash值;
判断所述字段的数据中是否包含设定的街道/路的关键字,如果包含,则将所述地址分词的hash值分别在街道/路字典、省字典、市字典、县字典、镇字典和村字典对应的hashmap索引结构进行检索;否则,将所述地址分词的hash值分别在省字典、市字典、县字典、镇字典和村字典对应的hashmap索引结构进行检索;
当所述地址分词的hash值在某个地址字典对应的hashmap索引结构中检索到,则将所述某个地址字典对应级别的计数器的计数值加1,当所述采样数据中所述字段的数据全部分析完成后,根据所述六个子类对应的计数器的计数值确定所述某个字段的数据类型。
进一步地,所述的当所述地址分词的hash值在某个地址字典对应的hashmap索引结构中检索到,则将所述某个地址字典对应级别的计数器的计数值加1,包括:
使用中文分词正向最大匹配法对所述字段的数据进行分词,根据六个级别的中文地址字典的内容重新组织生成另一套地址分词字典,所述地址分词字典包括:15字字典、13字字典、12字字典、11字字典、10字字典、9字字典、8字字典、7字字典、6字字典、5字字典、4字字典、3字字典、2字字典,并生成所述地址分词字典中每个字典对应的hashmap索引结构;
从所述字段的数据由左至右取出连续的15个中文字并生成hash值,长度不够15字的取最大连续中文字,将所述15个中文字对应的hash值在15字字典的hashmap索引结构中匹配;若所述15个中文字对应的hash值没有在15字字典的hashmap索引结构中匹配到,那么将所述15个中文字最右边去除两个单字,得到一个13字的中文字符串并生成hash值,将所述13个中文字对应的hash值在13字字典的hashmap索引结构进行匹配;
若所述13个中文字对应的hash值没有在13字字典中的hashmap索引结构匹配到,那么将所述13字中文字符串最右边去除一个单字,得到一个12字的中文字符串并生成hash值,将所述12个中文字对应的hash值在12字字典的hashmap索引结构进行匹配,如此重复循环,直到所述字段的数据的某个中文字的hash值在某个地址分词字典的hashmap索引结构中匹配成功,则将所述hash值对应的中文字符串为一个有效中文地址分词,并记录下来,不进行后续的hash值在地址分词字典的hashmap索引结构中的匹配操作;
若所述字段的数据的所有中文字的hash值在所有地址分词字典的hashmap索引结构中都没有匹配成功,则获得所述字段的数据的一个中文单字,将所述字段的数据左边去除获得的所述有效中文地址分词或者中文单字,得到剩余中文字符串,按照所述字段的数据在所有地址分词字典的hashmap索引结构中的匹配过程,将所述剩余中文字符串在所有地址分词字典的hashmap索引结构中进行匹配,获得若干有效中文地址分词、单字、数字或特殊字符;
从所述有效中文地址分词从左到右取词,生成所述中文地址分词的hash值,将所述中文地址分词的hash值在各个地址分词字典对应的hashmap索引结构中进行检索,当所述某个地址分词字典对应的hashmap索引结构中检索到所述中文地址分词的hash值,将所述某个地址分词字典对应级别的计数器的计数值加1;重复执行上述处理过程,直到所有有效中文地址分词在各个地址分词字典对应的hashmap索引结构中都检索完毕;
选取所述采样数据中的下一个数据记录中的所述字段的数据,对所述下一个数据记录中的所述字段的数据进行隐私数据匹配,直到所述采样数据中所有所述字段的数据都进行了隐私数据匹配。
进一步地,所述的采样数据中所述字段的数据全部匹配完成后,根据所述六个级别对应的计数器的计数值确定所述某个字段的数据类型,包括:
当所述六个级别对应的计数器的计数值之和大于等于进行匹配的所述字段的数据的总数量的100%,则判断所述字段的数据类型为地址。
当判断所述字段的数据类型为地址后,获取六个级别对应的6个地址字典分别对应的特征标识位,并计算所述每个特征标志位的计数器的计数值在所述整个字段数据总量所占的百分比,获取大于特定百分比的特征标志位的最宽的区间,将所述最宽的区间中包含的级别对应子类作为该字段最终的隐私数据类型特征。
综上所述,本发明实施例通过预先设定中文地址对应的数据分析规则,对采样数据进行数据分析,可以自动、有效地发现企业应用数据库的数据表中的中文地址数据种类,高效率地将企业应用数据库的数据表中的中文地址关键数据找出来并归类。
为了实施某些安全措施或者数据分析等工作,将企业内部所有系统的隐私数据找出来、分类梳理,意味着从少则几万多则上亿的表字段中整理。应用本发明实施例的方法,能够极大地减小了工作量、缩短工作时间,把不可能变成可能,把几十人月的工作量变成几十人天,大大缩短项目周期、降低项目风险;准确率高,对于比较规整、数据质量比较好的系统,准确率能超过99%。
本发明实施例能够统一用户界面,从原本分散独立的数据源中将数据采样至集中平台,用户在一个界面即可梳理所有系统的所有数据。
本领域普通技术人员可以理解:附图只是一个实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置及系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。