本说明书实施例涉及互联网技术领域,尤其涉及一种组合字符串的匹配方法及装置和电子设备。
背景技术:
字符串的匹配方法是一种用于从主字符串(以下简称为主串)中匹配是否存在给定的子字符串(以下简称为子串)的方法。例如:主串为:zifuchuanpipei;子串为:pipei时,匹配的目标为:在“zifuchuanpipei”中匹配是否存在“pipei”,如果存在则输出匹配到的字符串,如果不存在则输出空(说明主串中不存在子串);显然该示例中在主串中包含子串“pipei”,则可以输出匹配到的字符串“pipei”。通常,可以将上述针对单个子串的匹配方式称之为模式匹配,例如从主串a中匹配子串b的这种形式。类似的,针对多个单一子串的匹配时,对每个子串都进行一次模式匹配。例如子串b、子串c、子串d,即分别从主串a中匹配子串b、子串c、子串d。
在相关技术中,一般可以采用预设的匹配算法来提高字符串匹配的效率,例如可以采用aho–corasick算法(在业内通常可以称之为ac自动机)、boyer-moore算法、horspool算法等。然而,上述匹配算法针对模式匹配的效率较高,而对于组合字符串的匹配的效率较低。所述组合字符串是指多个子串同时进行匹配的情况,例如从主串a中匹配子串b和子串c是否同时存在,所述子串b和子串c可以记为“子串b^子串c”,其中“^”表示“且”。
因此,需要一种高效的组合字符串的匹配方案。
技术实现要素:
本说明书实施例提供的一种组合字符串的匹配方法及装置和电子设备,以及埋点分析方法及装置和电子设备:
根据本说明书实施例的第一方面,提供一种组合字符串的匹配方法,所述方法包括:
获取主字符串和组合字符串;
针对所述组合字符串构建与基础子字符串的索引信息;其中,所述基础子字符串由所述组合字符串拆分得到;
基于所述基础子字符串对所述主字符串进行模式匹配,得到匹配字符串;
根据所述匹配字符串从所述索引信息中确定目标组合字符串;其中,所述目标组合字符串的基础子字符串同时存在与所述主字符串中。
根据本说明书实施例的第二方面,提供一种组合字符串的匹配装置,所述装置包括:
获取单元,获取主字符串和组合字符串;
建立索引单元,针对所述组合字符串构建与基础子字符串的索引信息;其中,所述基础子字符串由所述组合字符串拆分得到;
模式匹配单元,基于所述基础子字符串对所述主字符串进行模式匹配,得到匹配字符串;
组合匹配单元,根据所述匹配字符串从所述索引信息中确定目标组合字符串;其中,所述目标组合字符串的基础子字符串同时存在与所述主字符串中。
根据本说明书实施例的第五方面,提供一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为上述任一项组合字符串的匹配方法。
本说明书实施例,提供了一种组合字符串的匹配方案,利用索引技术(例如倒排索引)对组合字符串的基础子串进行信息构建;然后,再利用ac自动机对基础子串进行模式匹配,最后基于索引信息对匹配字符串进行筛选,从而得到存在与主串中的目标组合字符串;有效提高组合字符串匹配的效率。
附图说明
图1是本说明书一实施例提供的组合字符串的匹配方法的流程图;
图2是本说明书一实施例提供的组合字符串匹配过程的示意图;
图3是本说明书一实施例提供的组合字符串的匹配装置的硬件结构图;
图4是本说明书一实施例提供的组合字符串的匹配装置的模块示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书的一些方面相一致的装置和方法的例子。
在本说明书使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书。在本说明书和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
如前所述,在相关技术中可以采用预设的匹配算法来提高字符串匹配的效率,例如可以采用aho–corasick算法(在业内通常可以称之为ac自动机)、boyer-moore算法、horspool算法等。
为了便于比较字符串匹配效率的高低,通常可以根据时间复杂度这一指标来判断字符串匹配的效率。以ac自动机为例,进行模式匹配时,时间复杂度为o(n+m+z),n表示主串的长度,m表示所有子串的长度,z表示匹配的数量。
以ac自动机为例,进行组合匹配时,需要进行以下步骤:
步骤1:拆分组合字符串,将得到的单个子串作为基础子串(设共有y个基础子串),利用ac自动机获取从主串匹配得到的匹配字符(设共有x个匹配子串)。
举例说明,主串为“zifuchuanpipei”,组合字符串为“zi^ch”,“ua^fa”,“np^uc”;则基础子串可以为zi,ch,ua,fa,np,uc(6个),匹配子串可以为zi,ch,ua,np,uc(5个),基础子串fa匹配不到。
步骤2:针对每个组合字符串,检测是否可以用步骤1得到的字符组合而成。因此,组合匹配的时间复杂度为0(x*y)。
其中,x等同于前述模式匹配下的z,y等同于前述模式匹配下的o(n+m+z);因此,将组合匹配转化为前述匹配模式后,所述时间复杂度为0(x*y)=0(z*o(n+m+z));可见,随着组合字符串的数量增加,可以导致基础子串的数量增加,最终导致时间复杂度不断增加;所以直接使用ac自动机进行组合字符串匹配会严重影响效率。
为了解决上述问题,本说明书提供了一种组合字符串的匹配方法,以下可以参考图1所示的例子介绍,所述方法可以包括以下步骤:
步骤110:获取主字符串和组合字符串。
步骤120:针对所述组合字符串构建与基础子字符串的索引信息;其中,所述基础子字符串由所述组合字符串拆分得到。
步骤130:基于所述基础子字符串对所述主字符串进行模式匹配,得到匹配字符串。
步骤140:根据所述匹配字符串从所述索引信息中确定目标组合字符串;其中,所述目标组合字符串的基础子字符串同时存在与所述主字符串中。
本说明书提供的实施例可以应用于进行字符串匹配的设备,例如客户端或者服务端。
其中,所述的客户端可以指硬件上的客户端设备,例如台式计算机、膝上型计算机、平板计算机、智能手机、手持式计算机、个人数字助理(“pda”),或者其它任何的有线或无线处理器驱动装置。
所述客户端还可以是指软件上的应用客户端,例如即时通讯app、电子钱包app等,这些应用客户端都可能存在字符串匹配的需求,例如即时通讯app中检索聊天记录,电子钱包app中搜索商家信息等。
所述客户端也可以是指软硬结合的客户端,例如安装了电子钱包app的智能手机。
在一实施例中,所述字符串的匹配可以是所述客户端在本地完成的,也就是说所述客户端可以基于本地的计算资源,完成字符串的匹配。在实际应用中,用户在确定了主字符串之后,可以输入组合字符串,从而使得客户端自动进行组合字符串的匹配。
在一实施例中,所述服务端可以包括字符串匹配的服务器、服务器集群或者基于服务器集群构建的云平台。
在一实施例中,所述服务端可以响应客户端发起的字符串匹配请求。在实际应用中,用户在确定了主字符串之后,可以输入组合字符串,客户端进而可以将所述主字符串和组合字符串发送给服务端,由服务端完成组合字符串的匹配。
在一实施例中,所述索引信息可以包括倒排索引(invertedindex)信息。即:所述针对所述组合字符串构建与基础子字符串的索引信息,具体可以包括:
基于hashmap建立所述组合字符串与基础子字符串的倒排索引信息;
统计所述组合字符串内基础子字符串的数量,并将所述数量记入所述倒排索引信息。
其中,hashmap(哈希映射)是一种高效建立映射关系的方式。
其中,所述倒排索引是一种效率较高的数据库检索方式,特别适合海量数据下检索。倒排索引有很多种具体方式,广义上,基于lucene(全文搜索引擎)的搜索服务器都可认为是使用了倒排索引;例如包括es
(elasticsearch)、solr。
值得一提的是,采用倒排索引仅是本说明书提供的一种实现方式,在实际应用中其它任意可以建立索引信息的方式均可以作为本说明书实施例的实现方式。
在一实施例中,所述基础子字符串可以通过如下方式得到:
将所述组合字符串进行拆分,得到单个的字符串;
将所述单个的字符串作为基础子字符串。
如图2所示为本说明书提供的一组合字符串匹配过程的示意图。该示例中,主串为“bace”,组合字符串为“a^b”、“c^d”、“a^c”、“e”;首先,需要构建倒排索引信息:
步骤11:拆分组合字符串,得到基础子串;
拆分“a^b”,得到单个的字符串“a”和“b”;
拆分“c^d”,得到单个的字符串“c”和“d”;
拆分“a^c”,得到单个的字符串“a”和“c”;
拆分“e”,得到单个的字符串“e”;
去重后,剩余的基础子串为“a”、“b”、“c”、“d”和“e”。
本说明书中所述的单个的字符串并非是指一个字符的字符串,而是以符号“^”分隔的字符串,例如组合字符串“abc^ac^db”,则拆分得到的基础子串为“abc”、“ac”和“db”。
步骤12:基于hashmap建立组合字符串与基础子串的倒排索引信息,可以如下所示:
a→a^b,a^c
b→a^b
c→a^c,c^d
d→c^d
e→e
其中,a→a^b,a^c表示基础子串a映射a^b,a^c;其它类似。
步骤13:统计所述组合字符串内基础子字符串的数量,并将所述数量记入所述倒排索引信息,可以如下所示:
a→a^b(2),a^c(2)
b→a^b(2)
c→a^c(2),c^d(2)
d→c^d(2)
e→e(1)
其中,a→a^b(2),a^c(2)表示基础子串a映射a^b,a^c,并且组合字符串a^b有2个基础子串,a^c有2个基础子串;其它类似。
在一实施例中,所述模式匹配可以采用ac自动机实现。即,所述基于所述基础子字符串对所述主字符串进行模式匹配,得到匹配字符串,具体可以包括:
针对所述基础子字符串建立对应的ac自动机;
基于每个基础字符串的ac自动机对所述主字符串进行模式匹配,得到匹配字符串。
如图2所示,主串为“bace”,基础子串有“a”、“b”、“c”、“d”和“e”;分别基于这5个基础子串的ac自动机对主串进行模式匹配:
根据基础子串“a”的ac自动机,在主串“bace”匹配是否存在字符a;由于主串中存在a,因此,可以匹配成功,可以得到匹配字符串“a”;
根据基础子串“b”的ac自动机,在主串“bace”匹配是否存在字符b;由于主串中存在b,因此,可以匹配成功,可以得到匹配字符串“b”;
根据基础子串“c”的ac自动机,在主串“bace”匹配是否存在字符c;由于主串中存在c,因此,可以匹配成功,可以得到匹配字符串“c”;
根据基础子串“d”的ac自动机,在主串“bace”匹配是否存在字符d;由于主串中不存在d,因此,可以匹配失败,输出空null,或者直接进入下一次模式匹配;
根据基础子串“e”的ac自动机,在主串“bace”匹配是否存在字符e;由于主串中存在e,因此,可以匹配成功,可以得到匹配字符串“e”;
综上,可以得到匹配字符串“a”、“b”、“c”和“e”。
在一实施例中,所述根据所述匹配字符串从所述索引信息中确定目标组合字符串,具体可以包括:
从所述索引信息中查找所述匹配字符串映射的组合字符串;
统计每种组合字符串被查找的频次;
将所述组合字符串的频次与基础子字符串的数量一致的组合字符串确定为目标组合字符串。
如图2所示,在获取到匹配字符串后,可以从前述索引信息中查找所述匹配字符串映射的组合字符串:
匹配字符串“a”映射的组合字符串包括“a^b”和“a^c”;
匹配字符串“b”映射的组合字符串包括“a^b”;
匹配字符串“c”映射的组合字符串包括“c^d”和“a^c”;
匹配字符串“e”映射的组合字符串包括“e”。
进一步的,统计每种组合字符串被查找的频次:
可见,组合字符串“a^b”被匹配字符串“a”和“b”查找过,因此,组合字符串“a^b”的频次为2;
组合字符串“a^c”被匹配字符串“a”和“c”查找过,因此,组合字符串“a^c”的频次为2;
组合字符串“c^d”被匹配字符串“c”查找过,因此,组合字符串“c^d”的频次为1;
组合字符串“e”被匹配字符串“e”查找过,因此,组合字符串“e”的频次为1。
最后,比较所述组合字符串的频次与基础子字符串的数量,所述基础子字符串的数量在前述步骤13已经得到,因此直接可以从索引信息中获得:
组合字符串“a^b”的频次为2,基础子串的数量为2,一致;
组合字符串“a^c”的频次为2,基础子串的数量为2,一致;
组合字符串“c^d”的频次为1,基础子串的数量为2,不一致;
组合字符串“e”的频次为1,基础子串的数量为1,一致;
综上,最后确定的目标组合字符串可以为“a^b”、“a^c”和“e”;可以输出所述目标组合字符串。
通过时间复杂度对上述过程的效率进行说明:
1、假设获取到的组合字符串的数量为d,基础子串的数量为y(其中,d<=y)。
2、步骤130中模式匹配得到的匹配字符串的数量设为x。
3、假设步骤140中所述匹配字符串映射的组合字符串的数量设为m,该步骤时间复杂度为0(x),即查找x次。
4、在假设将映射的组合字符串去重后的数量设为n(其中,n<=d);该步骤的时间复杂度为0(m)=0(x*t),其中t为索引序列的平均长度,根据zipf定律t<<d;因此,该步骤的时间复杂度<<0(x*d);
5、步骤140的时间复杂度为0(n),即去重后组合字符串有n个就比较n次频次和数量。
综上,总的时间复杂度为0(x)+0(m)+0(n)=0(x+m+n)。
由于o(x+m+n)<<0(x+x*d+d)=0(x*d)<=0(x*y);这里0(x*y)是前述采用现有ac自动机进行组合匹配的时间复杂度;可见采用本说明书提供的实施例后,在时间复杂度上远远小于仅采用ac自动机的方式,从而提升了组合字符串匹配的效率。
本说明书提供的实施例,利用索引技术(例如倒排索引)对组合字符串的基础子串进行信息构建;然后,再利用ac自动机对基础子串进行模式匹配,最后基于索引信息对匹配字符串进行筛选,从而得到存在与主串中的目标组合字符串;有效提高组合字符串匹配的效率。
与前述组合字符串的匹配方法实施例相对应,本说明书还提供了组合字符串的匹配装置的实施例。所述装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在设备的处理器将非易失性存储器中对应的计算机业务程序指令读取到内存中运行形成的。从硬件层面而言,如图3所示,为本说明书组合字符串的匹配装置所在设备的一种硬件结构图,除了图3所示的处理器、网络接口、内存以及非易失性存储器之外,实施例中装置所在的设备通常根据组合字符串的匹配实际功能,还可以包括其他硬件,对此不再赘述。
请参见图4,为本说明书一实施例提供的组合字符串的匹配装置的模块图,所述装置对应了图1所示实施例,所述装置包括:
获取单元210,获取主字符串和组合字符串;
建立索引单元220,针对所述组合字符串构建与基础子字符串的索引信息;其中,所述基础子字符串由所述组合字符串拆分得到;
模式匹配单元230,基于所述基础子字符串对所述主字符串进行模式匹配,得到匹配字符串;
组合匹配单元240,根据所述匹配字符串从所述索引信息中确定目标组合字符串;其中,所述目标组合字符串的基础子字符串同时存在与所述主字符串中。
可选的,所述建立索引单元220,具体包括:
基于hashmap建立所述组合字符串与基础子字符串的倒排索引信息;
统计所述组合字符串内基础子字符串的数量,并将所述数量记入所述倒排索引信息。
可选的,所述模式匹配单元230,具体包括:
针对所述基础子字符串建立对应的ac自动机;并基于每个基础字符串的ac自动机对所述主字符串进行模式匹配,得到匹配字符串。
可选的,所述组合匹配单元240,具体包括:
从所述索引信息中查找所述匹配字符串映射的组合字符串,统计每种组合字符串被查找的频次;并将所述组合字符串的频次与基础子字符串的数量一致的组合字符串确定为目标组合字符串。
可选的,所述装置还包括:
基础子串获取单元,将所述组合字符串进行拆分,得到单个的字符串;并将所述单个的字符串作为基础子字符串。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上图4描述了组合字符串匹配装置的内部功能模块和结构示意,其实质上的执行主体可以为一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为:
获取主字符串和组合字符串;
针对所述组合字符串构建与基础子字符串的索引信息;其中,所述基础子字符串由所述组合字符串拆分得到;
基于所述基础子字符串对所述主字符串进行模式匹配,得到匹配字符串;
根据所述匹配字符串从所述索引信息中确定目标组合字符串;其中,所述目标组合字符串的基础子字符串同时存在与所述主字符串中。
可选的,所述针对所述组合字符串构建与基础字符的索引信息,具体包括:
基于hashmap建立所述组合字符串与基础子字符串的倒排索引信息;
统计所述组合字符串内基础子字符串的数量,并将所述数量记入所述倒排索引信息。
可选的,所述基于所述基础子字符串对所述主字符串进行模式匹配,得到匹配字符串,具体包括:
针对所述基础子字符串建立对应的ac自动机;
基于每个基础字符串的ac自动机对所述主字符串进行模式匹配,得到匹配字符串。
可选的,所述根据所述匹配字符串从所述索引信息中确定目标组合字符串,具体包括:
从所述索引信息中查找所述匹配字符串映射的组合字符串;
统计每种组合字符串被查找的频次;
将所述组合字符串的频次与基础子字符串的数量一致的组合字符串确定为目标组合字符串。
可选的,还包括:
将所述组合字符串进行拆分,得到单个的字符串;
将所述单个的字符串作为基础子字符串。
在上述电子设备的实施例中,应理解,该处理器可以是中央处理单元(英文:centralprocessingunit,简称:cpu),还可以是其他通用处理器、数字信号处理器(英文:digitalsignalprocessor,简称:dsp)、专用集成电路(英文:applicationspecificintegratedcircuit,简称:asic)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,而前述的存储器可以是只读存储器(英文:read-onlymemory,缩写:rom)、随机存取存储器(英文:randomaccessmemory,简称:ram)、快闪存储器、硬盘或者固态硬盘。结合本发明实施例所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于电子设备实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本说明书的其它实施方案。本说明书旨在涵盖本说明书的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本说明书的一般性原理并包括本说明书未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本说明书的真正范围和精神由下面的权利要求指出。
应当理解的是,本说明书并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本说明书的范围仅由所附的权利要求来限制。