一种面向家庭数据库的模糊查询方法转让专利

申请号 : CN201610899834.X

文献号 : CN106528651B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 胡明晓金可仲

申请人 : 温州大学

摘要 :

本发明是一种面向家庭数据库的模糊查询方法,步骤如下:读取要查询的丈夫姓名和妻子姓名,按丈夫姓名、妻子姓名精确匹配或模糊匹配的四种组合方式分别查询,然后对调夫妇姓名,再执行上述四种组合方式查询,最后将查询所得的各记录集合并作为查询结果,其中模糊匹配包括去姓、对调名的两个字、删除名的第一字后的匹配查询。同时计算查询记录的相似度,合并记录集时若有多条同一记录,则按相似度就高原则择一进入查询结果,并按相似度从大到小的顺序输出查询结果。本发明解决了缺姓、两字对调、名的第一字含糊、姓名错填字段、简化称呼等中国人姓名信息常见缺陷情形下的模糊查询问题,实现了字段含义、姓名结构等语义层次意义下的模糊查询。

权利要求 :

1.一种面向家庭数据库的模糊查询方法,其特征在于,包含以下步骤:(1)读取要查询的丈夫姓名和妻子姓名;

(2)按丈夫姓名和妻子姓名均精确匹配的方式查询,得记录集A;

(3)按丈夫姓名模糊匹配、妻子姓名精确匹配的方式查询,得记录集B;

(4)按丈夫姓名精确匹配、妻子姓名模糊匹配的方式查询,得记录集C;

(5)按丈夫姓名和妻子姓名均模糊匹配的方式查询,得记录集D;

(6)将丈夫姓名和妻子姓名对调;

(7)重复步骤(2)~(5),分别得第二批记录集A~D;

(8)合并步骤(2)~(5)得到的两批记录集,作为查询结果返回;

其中步骤(3)~(5)中的所述模糊匹配包含以下步骤:(11)去姓,再以“含有”方式查询;

(12)调换名的两个字,再以“相等”方式查询;

(13)去姓并调换名的两个字,再以“含有”方式查询;

(14)删除名的第一字,再以“相等”方式查询;

(15)删空姓名,再以“相等”方式查询;

(16)取姓名简称,再以“相等”方式查询;

执行模糊匹配所述查询步骤(11)~(16)的同时计算记录的相似度,相似度的计算方法是,查询所得记录的相似度等于执行该查询所经历的下列步骤的相似度因子的乘积:步骤(2)的相似度因子为1,步骤(3)和(4)的相似度因子为p,步骤(5)的相似度因子为p2;步骤(6)的相似度因子为q;步骤(11)的相似度因子为r,步骤(12)的相似度因子为s,步骤(13)的相似度因子为rs,步骤(14)的相似度因子为t,步骤(15)的相似度因子为u,步骤(16)的相似度因子为v;参数p、q、r、s、t、u、v取值为0与1之间的实数;

执行所述合并记录集时,若同一记录多次被查询到,按照相似度就高原则择一进入查询结果,最后按相似度从大到小的顺序返回查询结果。

说明书 :

一种面向家庭数据库的模糊查询方法

技术领域

[0001] 本发明涉及计算机技术领域,特别涉及数据库模糊查询方法。

背景技术

[0002] 在计算机信息管理系统中,以家庭为单位的数据库很常见,如用于水电燃气供应、有线电视服务、计划生育、房产登记、义务教育等领域的管理信息系统。这类数据库通常开有丈夫姓名和妻子姓名两个字段,而实际建库时开始没要求录入双方姓名或只须录入任意一方,完整的夫妻姓名后来逐步补录,所以数据库中经常只录入其中一个字段,或者丈夫(妻子)姓名误填入妻子(丈夫)字段。对单个姓名来讲,又有可能缺姓、两字对调、名的第一字含糊、地域性的姓氏简写、简称录入和异体字写法,比如“潘明晓”,建库时可能简单填写或错误填写成“明晓”、“潘晓明”、“泮明晓”、“阿晓”。通过此类面向家庭数据库办理事务时需要通过用户输入的夫妻双方姓名查询登记记录,所以根据姓名模糊查询面向家庭数据库有其实际需求。
[0003] 姓名作为一种字符串有其特殊性,因为编辑距离对字序调换、姓名语义缺乏识别能力,对姓和名中的不同字符的不同地位不加区别,用通常的编辑距离模糊查询往往效果不佳。

发明内容

[0004] 为了解决面向家庭数据库根据双方姓名的查询问题,尤其是夫妇字段缺项、姓名不完整、错位、对调等信息缺陷情形下的模糊查询问题,本发明采取如下方案。
[0005] 一种面向家庭数据库的模糊查询方法,其特征在于,包含以下步骤:
[0006] (1)读取要查询的丈夫姓名和妻子姓名;
[0007] (2)按丈夫姓名和妻子姓名均精确匹配的方式查询,得记录集A;
[0008] (3)按丈夫姓名模糊匹配、妻子姓名精确匹配的方式查询,得记录集B;
[0009] (4)按丈夫姓名精确匹配、妻子姓名模糊匹配的方式查询,得记录集C;
[0010] (5)按丈夫姓名和妻子姓名均模糊匹配的方式查询,得记录集D;
[0011] (6)将丈夫姓名和妻子姓名对调;
[0012] (7)重复步骤(2)~(5),分别得第二批记录集A~D;
[0013] (8)合并步骤(2)~(5)得到的两批记录集,作为查询结果返回。
[0014] 步骤(3)~(5)中的模糊匹配方法有多种,比如编辑距离、集合并交比、或者退化为精确匹配。优选的,所述模糊匹配包含以下步骤:
[0015] (11)去姓,再以“含有”方式查询;
[0016] (12)调换名的两个字,再以“相等”方式查询;
[0017] (13)去姓并调换名的两个字,再以“含有”方式查询;
[0018] (14删除名的第一字,再以“相等”方式查询;
[0019] (15)删空姓名,再以“相等”方式查询;
[0020] (16)取简称姓名,再以“相等”方式查询。
[0021] 完整的姓名必然含有去姓的姓名,所以步骤(11)的模糊匹配包含精确匹配。步骤(15)即查找姓名空白未录入的记录。步骤(16)的简称姓名有多种,如“老王”、“阿亮”。
[0022] 进一步的,执行所述查询的同时计算记录的相似度,相似度的计算方法是,查询所得记录的相似度等于执行该查询所经历的下列步骤的相似度因子的乘积:步骤(2)的相似度因子为1,步骤(3)和(4)的相似度因子为p,步骤(5)的相似度因子为p2;步骤(6)的相似度因子为q;步骤(11)的相似度因子为r,步骤(12)的相似度因子为s,步骤(13)的相似度因子为rs;步骤(14)的相似度因子为t;步骤(15)的相似度因子为u;步骤(16)的相似度因子为v;参数p、q、r、s、t、u、v取值为0与1之间的实数。
[0023] 执行所述合并记录集时,若同一记录多次被查询到,按照相似度就高原则择一进入查询结果,最后按相似度从大到小的顺序返回查询结果。
[0024] 本发明的技术效果:解决了字段空白、缺姓、名的两字对调、名的第一字错漏、以简称录入、姓名错填字段等中国人姓名信息常见缺陷情形下的模糊查询问题,实现的查询是字段含义、姓名结构等语义层次意义下的模糊查询,而非普通字符串匹配或通用相似度(如编辑距离)意义下的模糊查询,从而使得采用本发明的查询方法和系统能够更加全面、准确地发现数据库中的待查家庭记录的真正所在。

附图说明

[0025] 图1是本发明较佳实施例的总体流程图。
[0026] 图2是本发明较佳实施例中的模糊查询流程图。
[0027] 图3是本发明较佳实施例中的姓名模糊匹配流程图。

具体实施方式

[0028] 为了使本发明更加清晰易懂,下面结合附图对本发明作进一步的详细说明。
[0029] 参照附图1,示出了本发明较佳实施例的总体流程图,该流程图表明实施例按如下顺序执行数据库模糊查询:
[0030] 步骤1:读取要查询的丈夫姓名和妻子姓名;
[0031] 步骤2:运行一次丈夫姓名和妻子姓名的模糊查询;
[0032] 步骤3:对调丈夫姓名和妻子姓名,再重复一次步骤2;
[0033] 步骤4:合并两次步骤2查询所得的数据库记录集。
[0034] 步骤1读取的双方姓名由用户输入,允许一方为空,但不会双方均空,双方均空则不启动本模糊查询程序。
[0035] 步骤2的模糊查询为丈夫姓名、妻子姓名按一定规则去匹配数据库中记录的查询,这些规则可以是双方姓名均模糊匹配,也可以是一方模糊匹配,另一方精确匹配,也可以退化为双方均精确匹配,还可以是以上匹配中两种或多种匹配的组合。本实施例将采用如下四种匹配的组合(如附图2):丈夫姓名精确匹配妻子姓名精确匹配、丈夫姓名模糊匹配妻子姓名精确匹配、丈夫姓名精确匹配妻子姓名模糊匹配和丈夫姓名模糊匹配妻子姓名模糊匹配。查询结果是若干个记录集,一般需要缓存空间保存这些记录集。
[0036] 步骤4所做的合并为数学集合意义上的并集运算,即同一元素重复存在时在合并结果中只取一次。
[0037] 参照附图2,示出了较佳实施例中的模糊查询流程图。模糊查询按照四个并行过程执行。
[0038] 过程A1是执行丈夫姓名精确匹配步骤21、妻子姓名精确匹配步骤21,然后执行查询步骤22,得记录集A;
[0039] 过程A2是执行丈夫姓名模糊匹配步骤23、妻子姓名精确匹配步骤21,然后执行查询步骤22,得记录集B;
[0040] 过程A3是执行丈夫姓名精确匹配步骤21、妻子姓名模糊匹配步骤23,然后执行查询步骤22,得记录集C;
[0041] 过程A4是执行丈夫姓名模糊匹配步骤23、妻子姓名模糊匹配步骤23,然后执行查询步骤22,得记录集D。
[0042] 假设要查询的丈夫姓名为h,妻子姓名为w,数据库中丈夫姓名和妻子姓名的字段名分别Husband和Wife,并假设用SQL语句进行数据库查询,那么过程A1的两个姓名精确匹配步骤21,分别是构造SQL语句的“Husband=h”子句和“Wife=w”子句。实际实施时这两步姓名精确匹配步骤21可合并为“Husband=h AND Wife=w”子句。
[0043] 查询步骤22即调用ExecuteSQL函数(C语言实施时)。
[0044] 姓名模糊匹配步骤23的方法有多种,如SQL的各种LIKE子句,或者d(Wife,w)<=1(d为编辑距离函数),或者是基于汉字笔划的模糊匹配,或者退化为SQL的相等子句Wife=w。本实施例则是去姓、对调名的两个字、去姓且对调名的两个字、删去名的第一字、姓名删空、简称姓名的模糊匹配方法(如附图3)。一般来讲运用模糊匹配方法查询的结果也包含精确匹配的结果,精确匹配作为模糊匹配的一种特例而其查询结果出现在模糊匹配记录集中。
[0045] 假设读入的丈夫姓名为空,则并行过程中的丈夫姓名精确匹配21和丈夫姓名模糊匹配23均不执行,只剩下妻子姓名的匹配,所以四个并行过程实际只剩下两种并行过程。实施时可以考虑此类优化,只执行两个并行过程。当读入的妻子姓名为空,情形类似。
[0046] 并行过程的执行可以通过SQL的OR逻辑运算变成一步执行。
[0047] 例如:若姓名模糊匹配采用前部匹配,模糊查询的SQL语句形如:
[0048] ...WHERE(Husband=h AND Wife=w)OR(Husband LIKE h% AND Wife=w)OR(Husband=h AND Wife LIKE w%)OR(Husband LIKE h% AND Wife LIKE w%)
[0049] 上面语句其实等价于优化的WHERE(Husband LIKE h% AND Wife LIKE w%),此例仅为清晰说明起见。此外当模糊匹配采用另外的方式或者查询的同时需要计算相似度,不一定能做类似优化。
[0050] 参照附图3,示出了较佳实施例中的姓名模糊匹配流程图。此姓名模糊匹配按照六个并行过程执行。
[0051] 过程B1是执行去姓步骤231,再指定查询方式为“含有”方式;
[0052] 过程B2是执行对调名的两个字步骤232,再指定查询方式为“相等”方式;
[0053] 过程B3是执行去姓步骤231和对调名的两个字步骤232,再指定查询方式为“含有”方式;
[0054] 过程B4是执行删除名的第一字步骤233,再指定查询方式为“相等”方式;
[0055] 过程B5是执行删空姓名步骤234,再指定查询方式为“相等”方式;
[0056] 过程B6是执行取姓名简称步骤235,再指定查询方式为“相等”方式。
[0057] 假设要查询的姓名为n,数据库中姓名的字段名为Name,并假设使用SQL语句。去姓步骤231是生成一个新姓名newn1,即姓名两个字或三个字的,删去第一字,姓名四个字的,删去前两字。对调名的两个字步骤232是生成一个新姓名newn2,即姓名三个字的,调换第二字与第三字,姓名四个字的,调换第三字与第四字。生成的既去姓又对调名的两个字的新姓名为newn3。删除名的第一字步骤233是生成一个新姓名newn4,即姓名三个字的,删除第二字,姓名四个字的,删除第三字。取姓名简称步骤235是生成三个新姓名newn5,newn6,newn7,其中newn5=“老”+姓名第一字,newn6=“小”+姓名第一字,newn7=“阿”+姓名最后一字,分别如“老王”、“小王”和“阿亮”(以n=“王明亮”为例)。由于姓名n为字符串常量,具体实施时可以用一个预处理程序先生成上述新姓名newn1~newn7。于是,过程B1采用SQL子句“Name LIKE %newn1%”,过程B2采用SQL子句“Name=newn2”,过程B3采用SQL子句“Name LIKE %newn3%”,过程B4采用SQL子句“Name=newn4”,过程B5采用SQL子句“Name=””,过程B6采用SQL子句“Name IN(newn5,newn6,newn7)”。具体实施时也可以将B1~B6并行过程合并成如下单个SQL子句:“Name LIKE %newn1% OR Name LIKE %newn3% OR Name IN(newn2,newn4,″,newn5,newn6,newn7)”。
[0058] 执行查询的同时还可计算记录的相似度,相似度的计算方法是,查询所得记录的相似度等于执行该查询所经历的下列步骤的相似度因子的乘积:
[0059] “按丈夫姓名和妻子姓名均精确匹配的方式查询,得记录集A”的相似度因子为1;
[0060] “按丈夫姓名模糊匹配、妻子姓名精确匹配的方式查询,得记录集B”和“按丈夫姓名精确匹配、妻子姓名模糊匹配的方式查询,得记录集C”的相似度因子为p;
[0061] “按丈夫姓名和妻子姓名均模糊匹配的方式查询,得记录集D”的相似度因子为p2;
[0062] “将丈夫姓名和妻子姓名对调”的相似度因子为q;
[0063] “去姓,再以‘含有’方式查询”的相似度因子为r;
[0064] “调换名的两个字,再以‘相等’方式查询”的相似度因子为s;
[0065] “去姓并调换名的两个字,再以‘含有’方式查询”的相似度因子为rs;
[0066] “删除名的第一字,再以‘相等’方式查询”的相似度因子为t;
[0067] “删空姓名,再以‘相等’方式查询”的相似度因子为u;
[0068] “取姓名简称,再以‘相等’方式查询”的相似度因子为v。
[0069] 其中参数p、q、r、s、t、u、v取值为0与1之间的实数,一种优选取值为:p=0.75,q=0.7,r=0.8,s=0.6,t=0.6,u=0.4,v=0.5。
[0070] 参照附图1、附图2和附图3,为计算上述步骤的相似度因子,只需将计算工作归约为下列原子步骤的相似度因子:
[0071] 对调夫妇姓名步骤3的相似度因子为q;
[0072] 丈夫或妻子姓名精确匹配步骤21的相似度因子为1;
[0073] 丈夫或妻子姓名模糊匹配步骤23的相似度因子为p;
[0074] 去姓步骤231的相似度因子为r;
[0075] 对调名的两个字步骤232的相似度因子为s;
[0076] 删除名的第一字步骤233的相似度因子为t;
[0077] 删空姓名步骤234的相似度因子为u;
[0078] 取姓名简称步骤235的相似度因子为v。
[0079] 有了以上原子步骤的相似度因子,步骤“按丈夫姓名和妻子姓名均模糊匹配的方式查询,得记录集D”因含两个原子步骤23,其相似度因子为p*p=p2;步骤“去姓并调换名的两个字,再以‘含有’方式查询”因含有一个原子步骤231和一个原子步骤232,其相似度因子为r*s=rs。
[0080] 相似度计算的实施方法是在原子步骤中增加适当的语句:设置一个实数型变量k,初值置为1.0(可在附图1步骤1中加入语句“k=1.0”),在附图1步骤3加入语句“k=q”(注意不是“k=k*q”,因为对调夫妇姓名后视为重新启动第二轮模糊查询),在附图2步骤23加入语句“k=k*p”。如果附图2的步骤23(模糊匹配)按照更加详细的附图3的步骤实施,则附图2步骤23不需加入语句“k=k*p”,而代之以:在附图3步骤231中加入语句“k=k*r”,步骤232中加入语句“k=k*s”,步骤233中加入语句“k=k*t”,步骤234中加入语句“k=k*u”,步骤235中加入语句“k=k*v”。
[0081] 执行合并记录集时,若同一记录多次被查询到,按照相似度就高原则择一进入查询结果,最后按相似度从大到小的顺序返回查询结果。
[0082] 下面通过三组具体的查询实例进一步说明本发明的查询过程及其相似度计算方法。假设输入要查询的夫妇姓名是h=″张佳伟″、w=″韦小英″,并设数据库中存在如下5条记录:
[0083] 1号记录:{Husband=″张佳伟″,Wife=″韦小英″}
[0084] 2号记录:{Husband=″韦小英″,Wife=″张佳伟″}
[0085] 3号记录:{Husband=″张佳伟″,Wife=″″}
[0086] 4号记录:{Husband=″张伟佳″,Wife=″韦英″}
[0087] 5号记录:{Husband=″小英″,Wife=″陈伟佳″}
[0088] 例1:假设仅按照附图1、附图2实施,且模糊匹配结果包含精确匹配结果,并假设模糊匹配模块有能力查到″张佳伟″的模糊记录″张伟佳″,但没能力查到″陈伟佳″,有能力查到″韦小英″的模糊记录″″(空串),但没能力查到″韦英″和″小英″。查询结果及相似度如下:
[0089] 对1号记录,附图2过程A1~A4均能查询到该记录,而且相似度分别是1、p、p、p2,对调夫妇姓名后附图2过程A1~A4不能查到该记录。最后该记录的相似度为1。
[0090] 对2号记录,附图2过程A1~A4均不能查询到该记录,但在经过对调夫妇姓名后进行第二次模糊查询时,附图2过程A1~A4均能查到,而且相似度分别是q、qp、qp、qp2。最后该记录的相似度为q。
[0091] 对3号记录,附图2过程A3、A4能查询到该记录,而且相似度分别为p、p2,对调夫妇姓名后附图2过程A1~A4不能查到。最后该记录的相似度为p。
[0092] 对4号记录,附图2过程A1~A4均不能查询到该记录。对调夫妇姓名后更不能查到。
[0093] 对5号记录,附图2过程A1~A4均不能查询到该记录,对调夫妇姓名后附图2过程A1~A4仍然不能查到。
[0094] 例2:假设仅按照附图1、附图2实施,且模糊匹配结果包含精确匹配结果,并假设模糊匹配模块有能力查到″张佳伟″的模糊记录″张伟佳″,但没能力查到″陈伟佳″。输入要查询的妻子姓名不输入,即h=″张佳伟″、w=″″,由于w为空,附图2过程A1~A4优化后只剩两种并行过程,不妨只取过程A1和A2,对调夫妇姓名后只取过程A1和A3,于是:
[0095] 对1号记录,附图2过程A1和A2均能查询到该记录,而且相似度分别是1、p,对调夫妇姓名后附图2过程A1和A3不能查到该记录。最后该记录的相似度为1。
[0096] 对2号记录,附图2过程A1和A2均不能查询到该记录,但在对调夫妇姓名后进行第二次模糊查询时,附图2过程A1和A3均能查到,而且相似度分别是q、qp。最后该记录的相似度为q。
[0097] 对3号记录,附图2过程A1和A2能查询到该记录,而且相似度分别为1、p,对调夫妇姓名后附图2过程A1和A3均不能查到。最后该记录的相似度为1。
[0098] 对4号记录,附图2过程A2能查询到该记录,相似度为p,对调夫妇姓名后不能查到。最后该记录的相似度为p。
[0099] 对5号记录,附图2过程A1和A2均不能查询到该记录,对调夫妇姓名后,附图2过程A1和A3仍然不能查到。
[0100] 例3:假设按照附图1、附图2、附图3实施,注意到此时模糊匹配模块有能力查到″张佳伟″的模糊记录″张伟佳″、″陈伟佳″等,也有能力查到″韦小英″的模糊记录″″、″韦英″、″小英″等。查询结果及相似度如下:
[0101] 对1号记录,附图2过程A1~A4均能查询到该记录,而且相似度分别是1、p、p、p2,对调夫妇姓名后附图2过程A1~A4不能查到该记录。最后该记录的相似度为1。
[0102] 对2号记录,附图2过程A1~A4均不能查询到该记录,但在对调夫妇姓名后进行第二次模糊查询时,附图2过程A1~A4均能查到,而且相似度分别是q、qp、qp、qp2。最后该记录的相似度为q。
[0103] 对3号记录,附图2过程A3和A4能查询到该记录,而且相似度分别为u、ru,其中在妻子姓名模糊匹配时只有附图3过程B5能查询到(因为Wife=″″),丈夫姓名模糊匹配时只有附图3过程B1能查询到(因为Husband含有″佳伟″)。对调夫妇姓名后附图2过程A1~A4均不能查到。最后该记录的相似度为u。
[0104] 对4号记录,附图2过程A4能查询到该记录,相似度为st,其中在丈夫姓名模糊匹配时附图3过程B2和B3能查询到(因为Husband=″张伟佳″,Husband含有″伟佳″,贡献相似度因子max(s,rs)=s),妻子姓名模糊匹配时只有附图3过程B4能查询到(因为Wife=″韦英″,贡献相似度因子t)。对调夫妇姓名后附图2过程A1~A4均不能查到。最后该记录的相似度为st。
[0105] 对5号记录,附图2过程A1~A4均不能查询到该记录,但在经过对调夫妇姓名后进行第二次模糊查询时,附图2过程A4能查到,相似度为qr2s,其中丈夫姓名模糊匹配时只有附图3过程B1能查到(因为Husband含有″小英″,贡献相似度因子r),妻子姓名模糊匹配时只有附图3过程B3能查询到(因为Wife含有″伟佳″,贡献相似度因子rs)。最后该记录的相似度为qr2s。
[0106] 以上对本发明的模糊查询方法进行了详细介绍,通过具体的实施例阐述了本发明技术路线的核心思想和典型实现方法。由于计算机程序设计的代码组织、函数设计、优化方式变化多样,在实现细节上均会有改变之处,但只要未脱离发明人在本发明权利要求书中主张的步骤限定,都属于本发明的实施方案。