CN109740165A - 字典树构建方法、语句搜索方法、装置、设备及存储介质 - Google Patents
字典树构建方法、语句搜索方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN109740165A CN109740165A CN201910021127.4A CN201910021127A CN109740165A CN 109740165 A CN109740165 A CN 109740165A CN 201910021127 A CN201910021127 A CN 201910021127A CN 109740165 A CN109740165 A CN 109740165A
- Authority
- CN
- China
- Prior art keywords
- sequence
- path
- dictionary tree
- character
- matched
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Machine Translation (AREA)
Abstract
本公开提供了一种字典树构建方法及装置、语句搜索方法及装置、电子设备及计算机可读存储介质,属于计算机技术领域。该字典树构建方法包括:获取一个或多个样本语句;分别对所述一个或多个样本语句进行分词处理,得到每个所述样本语句对应的样本序列,其中,所述样本序列由文本字符和/或特殊字符组成,特殊字符包括空格、括号或引号;以初始的字典树为起始,对于每个所述样本序列,在字典树中查找所述样本序列的路径,如果未查找到所述样本序列的路径,则将所述样本序列作为新的路径插入所述字典树,以更新所述字典树。本公开可以提高特定语料场景下字典树的针对性,并提高基于该字典树进行语句搜索的精确性。
Description
技术领域
本公开涉及计算机技术领域,尤其涉及一种字典树构建方法、语句搜索方法、字典树构建装置、语句搜索装置、电子设备及计算机可读存储介质。
背景技术
随着数字时代的来临,信息的数量呈现爆发性的增长,人们在日常生活中往往会面对海量的信息,为了从中获取到有用信息,需要采取高效的搜索方法。而目前的搜索方法大多依赖于已有的语料库,其针对性较差,影响搜索结果的精确性。
需要说明的是,在上述背景技术部分公开的信息仅用于加强对本公开的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。
发明内容
本公开提供了一种字典树构建方法、语句搜索方法、字典树构建装置、语句搜索装置、电子设备及计算机可读存储介质,进而至少在一定程度上克服现有的搜索方法精确性较低的问题。
本公开的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本公开的实践而习得。
根据本公开的一个方面,提供一种字典树构建方法,包括:获取一个或多个样本语句;分别对所述一个或多个样本语句进行分词处理,得到每个所述样本语句对应的样本序列,其中,所述样本序列由文本字符和/或特殊字符组成,所述特殊字符包括空格、括号或引号;以初始的字典树为起始,对于每个所述样本序列,在所述字典树中查找所述样本序列的路径,如果未查找到所述样本序列的路径,则将所述样本序列作为新的路径插入所述字典树,以更新所述字典树;遍历所述N个样本序列后,得到更新后的所述字典树。
在本公开的一种示例性实施例中,所述在所述字典树中查找所述样本序列的路径,如果未查找到所述样本序列的路径,则将所述样本序列作为新的路径插入所述字典树,以更新所述字典树,包括:将所述字典树的根节点确定为当前节点;将所述样本序列确定为所述样本序列的待匹配序列;重复执行以下步骤,直到生成所述字典树中新的路径或所述待匹配序列为空:将所述当前节点的子树确定为当前目标子树;在所述当前目标子树的第一层查找所述待匹配序列的第一个字符;如果在所述当前目标子树中未查找到所述待匹配序列的第一个字符,则依次将所述待匹配序列的字符插入所述当前目标子树中对应的层,并依次连接所插入的字符,生成所述字典树中新的路径;如果在所述当前目标子树中查找到所述待匹配序列的第一个字符,则将所述当前节点更新为查找到的所述第一个字符,并从所述待匹配序列中移除所述待匹配序列的第一个字符,以更新所述待匹配序列。
根据本公开的一个方面,提供一种语句搜索方法,包括:获取待处理语句;对所述待处理语句进行分词处理,得到待处理序列,其中,所述待处理序列由文本字符和/或特殊字符组成,所述特殊字符包括空格、括号或引号;在字典树中查找所述待处理序列的路径;将查找到的路径确定为所述待处理语句的搜索结果;其中,所述字典树为根据上述任意一项所述的字典树构建方法所构建的字典树。
在本公开的一种示例性实施例中,所述在字典树中查找所述待处理序列的路径,包括:将所述字典树的根节点确定为当前节点;将所述待处理序列确定为所述待处理序列的待匹配序列;执行以下循环过程,直到所述待匹配序列为空,将所述字典树的根节点到所述当前节点的路径确定为所述待处理序列的路径:将所述当前节点的子树确定为当前目标子树;在所述当前目标子树的第一层查找所述待匹配序列的第一个字符;如果在所述当前目标子树中查找到所述待匹配序列的第一个字符,则将所述当前节点更新为查找到的所述第一个字符,并从所述待匹配序列中移除所述待匹配序列的第一个字符,以更新所述待匹配序列。
在本公开的一种示例性实施例中,所述执行以下循环过程,直到所述待匹配序列为空,将所述字典树的根节点到所述当前节点的路径确定为所述待处理序列的路径,包括:执行所述循环过程,直到所述待匹配序列为空,判断所述当前节点是否为所述字典树的结束节点;如果所述当前节点是所述结束节点,则将所述字典树的根节点到所述当前节点的路径确定为所述待处理序列的路径;如果所述当前节点不是所述结束节点,则确定查找失败。
在本公开的一种示例性实施例中,所述执行以下循环过程,直到所述待匹配序列为空,将所述字典树的根节点到所述当前节点的路径确定为所述待处理序列的路径,包括:将所述字典树的根节点到所述当前节点的路径确定为已匹配路径;确定所述待处理序列的查找状态,所述查找状态包括所述已匹配路径、当前节点与待匹配序列;对于每个所述查找状态,执行所述循环过程,直到所述查找状态中的待匹配序列为空,将所述查找状态中的已匹配路径作为所述待处理序列的路径;其中,所述循环过程还包括:在所述当前目标子树的第一层查找所述特殊字符;如果在所述当前目标子树中查找到所述特殊字符,则将所述当前节点更新为查找到的所述特殊字符,并从所述待匹配序列中生成多个子序列,将所述待匹配序列更新为所述多个子序列,以得到待处理序列的多个查找状态。
在本公开的一种示例性实施例中,所述循环过程还包括:如果在所述当前目标子树中未查找到所述待匹配序列的第一个字符且未查找到所述特殊字符,则判断所述当前目标子树是否为空;如果所述当前目标子树为空,则将当前的查找状态中的已匹配路径作为所述待处理序列的一条路径,并对下一查找状态执行所述循环过程;如果所述当前目标子树不为空,则确定当前的查找状态查找失败,并对下一查找状态执行所述循环过程。
在本公开的一种示例性实施例中,所述待匹配序列的多个子序列包括所述待匹配序列的第一子序列、第二子序列、……与第k子序列;其中,k为所述待匹配序列的字符总数,对于[1,k]内的任意自然数i,所述待匹配序列的第i子序列表示所述待匹配序列中以第i个字符为起始、以第k个字符为结束的连续字符序列。
在本公开的一种示例性实施例中,所述将查找到的路径确定为所述待处理语句的搜索结果,包括:如果在所述字典树中查找到与所述待处理序列匹配的多条路径,则将所述多条路径中匹配度最高的路径确定为所述待处理序列的搜索结果。
在本公开的一种示例性实施例中,所述多条路径中匹配度最高的路径为所述多条路径滤除所述特殊字符后最长的路径。
根据本公开的一个方面,提供一种字典树构建装置,包括:语句获取模块,用于获取一个或多个样本语句;分词处理模块,用于分别对所述一个或多个样本语句进行分词处理,得到每个所述样本语句对应的样本序列,其中,所述样本序列由文本字符和/或特殊字符组成,所述特殊字符包括空格、括号或引号;字典树更新模块,用于以初始的字典树为起始,对于每个所述样本序列,在所述字典树中查找所述样本序列的路径,如果未查找到所述样本序列的路径,则将所述样本序列作为新的路径插入所述字典树,以更新所述字典树。
在一示例性实施例中,所述字典树更新模块包括:当前节点确定单元,用于将字典树的根节点确定为当前节点;待匹配序列确定单元,用于将样本序列确定为样本序列的待匹配序列;循环处理单元,用于重复执行以下步骤,直到生成字典树中新的路径或待匹配序列为空:将当前节点的子树确定为当前目标子树;在当前目标子树的第一层查找待匹配序列的第一个字符;如果在当前目标子树中未查找到待匹配序列的第一个字符,则依次将待匹配序列的字符插入当前目标子树中对应的层,并依次连接所插入的字符,生成字典树中新的路径;如果在当前目标子树中查找到待匹配序列的第一个字符,则调度当前节点确定单元将当前节点更新为查找到的第一个字符,并调度待匹配序列确定单元从待匹配序列中移除待匹配序列的第一个字符,以更新待匹配序列。
根据本公开的一个方面,提供一种语句搜索装置,包括:语句获取模块,用于获取待处理语句;分词处理模块,用于对所述待处理语句进行分词处理,得到待处理序列,其中,所述待处理序列由文本字符和/或特殊字符组成,所述特殊字符包括空格、括号或引号;路径查找模块,用于在字典树中查找所述待处理序列的路径,并将查找到的路径确定为所述待处理语句的搜索结果;其中,所述字典树为根据上述任意一项所述的字典树构建方法所构建的字典树。
在一示例性实施例中,所述路径查找模块包括:当前节点确定单元,用于将字典树的根节点确定为当前节点;待匹配序列确定单元,用于将待处理序列确定为待处理序列的待匹配序列;循环处理单元,用于执行以下循环过程,直到待匹配序列为空,将字典树的根节点到当前节点的路径确定为待处理序列的路径:将当前节点的子树确定为当前目标子树;在当前目标子树的第一层查找待匹配序列的第一个字符;如果在当前目标子树中查找到待匹配序列的第一个字符,则调度当前节点确定单元将当前节点更新为查找到的第一个字符,并调度待匹配序列确定单元从待匹配序列中移除待匹配序列的第一个字符,以更新待匹配序列。
在一示例性实施例中,所述循环处理单元还用于执行循环过程,直到待匹配序列为空,判断当前节点是否为字典树的结束节点,如果当前节点是结束节点,则将字典树的根节点到当前节点的路径确定为待处理序列的路径,以及如果当前节点不是结束节点,则确定查找失败。
在一示例性实施例中,所述路径查找模块还包括:已匹配路径确定单元,用于将字典树的根节点到当前节点的路径确定为已匹配路径;查找状态确定单元,用于确定待处理序列的查找状态,查找状态包括已匹配路径、当前节点与待匹配序列;循环处理单元用于对于每个查找状态,执行循环过程,直到查找状态中的待匹配序列为空,将查找状态中的已匹配路径作为待处理序列的路径;其中,循环过程还包括:在当前目标子树的第一层查找特殊字符;如果在当前目标子树中查找到特殊字符,则将当前节点更新为查找到的特殊字符,并从待匹配序列中生成多个子序列,将待匹配序列更新为多个子序列,调度查找状态确定单元生成待处理序列的多个查找状态。
在一示例性实施例中,所述循环过程还包括:如果在当前目标子树中未查找到待匹配序列的第一个字符且未查找到特殊字符,则判断当前目标子树是否为空;如果当前目标子树为空,则将当前的查找状态中的已匹配路径作为待处理序列的一条路径,并对下一查找状态执行循环过程;如果当前目标子树不为空,则确定当前的查找状态查找失败,并对下一查找状态执行循环过程。
在一示例性实施例中,待匹配序列的多个子序列包括待匹配序列的第一子序列、第二子序列、……与第k子序列;其中,k为待匹配序列的字符总数,对于[1,k]内的任意自然数i,待匹配序列的第i子序列表示待匹配序列中以第i个字符为起始、以第k个字符为结束的连续字符序列。
在一示例性实施例中,路径查找模块还包括:搜索结果确定单元,用于如果在字典树中查找到与待处理序列匹配的多条路径,则将多条路径中匹配度最高的路径确定为待处理序列的搜索结果。
在一示例性实施例中,所述多条路径中匹配度最高的路径为所述多条路径滤除特殊字符后最长的路径。
根据本公开的一个方面,提供一种电子设备,包括:处理器;以及存储器,用于存储所述处理器的可执行指令;其中,所述处理器配置为经由执行所述可执行指令来执行上述任意一项所述的字典树构建方法或上述任意一项所述的语句搜索方法。
根据本公开的一个方面,提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任意一项所述的字典树构建方法或上述任意一项所述的语句搜索方法。
本公开的示例性实施例具有以下有益效果:
在字典树构建方法中,对样本语句进行分词处理,得到样本序列,样本序列包括文本字符与特殊字符,通过样本序列插入路径的方式构建并更新字典树。一方面,本示例性实施例提出了一种快速构建字典树的方法,可以针对不同的语料场景,根据场景中的语句构建字典树,使得字典树具有较强的针对性,可以更好的适用于特定的语料场景,提高语句搜索的精确性。另一方面,由于在多数情况下特殊字符对于语句语义有实质性作用,字典树中包含特殊字符的节点,可以覆盖到文本字符与特殊字符各种组合的情况,使得字典树中的语句更加丰富全面。
在语句搜索方法中,基于包含特殊字符的字典树,通过匹配路径的方式进行语句搜索,可以针对包含特殊字符的待处理语句进行精准的查找匹配,以获得与语句的完整语义更加匹配的搜索结果,提高语句搜索的精确性以及搜索效率。
在本公开的一些示例性实施例中,可以对待处理语句进行“分化”处理,以进行模糊查找,从而降低特殊字符对于语句中连续语义的影响,提供较为全面的语句搜索结果。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出本示例性实施例中一种字典树构建方法的流程图;
图2示出本示例性实施例中另一种字典树构建方法的流程图;
图3示出本示例性实施例中一种字典树的示意图;
图4示出本示例性实施例中插入新路径后的字典树示意图;
图5示出本示例性实施例中一种语句搜索方法的流程图;
图6示出本示例性实施例中另一种语句搜索方法的流程图;
图7示出本示例性实施例中再一种语句搜索方法的流程图;
图8示出本示例性实施例中一种字典树构建装置的结构框图;
图9示出本示例性实施例中一种语句搜索装置的结构框图;
图10示出本示例性实施例中一种用于实现上述方法的电子设备;
图11示出本示例性实施例中一种用于实现上述方法的计算机可读存储介质。
具体实施方式
现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本公开将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施方式中。
本公开的示例性实施例首先提供了一种字典树构建方法。字典树是指包含大量语句的结构树,以语句的字符为节点,并通过一定的连接方式连接各节点以形成树形结构,字典树通常包括多个层级与多个路径,不同层级的节点之间连接形成路径,每个路径代表一个语句。字典树可用于进行语句搜索。
如图1所示,该字典树构建方法可以包括以下步骤S110~S140:
步骤S110,获取一个或多个样本语句。
样本语句可以是通过任意方式获取的真实语句,本示例性实施例中,可以根据字典树的具体应用的语料场景采集样本语句,例如:为了构建听音乐场景中的字典树,可以从音乐App(Application,应用程序)内的用户搜索语句、评论语句、曲目信息语句、歌词语句等相关的语句中采集样本语句;为了构建游戏中的字典树,可以从游戏内的玩家聊天语句、系统信息语句、游戏剧情语句、NPC(Non-Player Character,非玩家角色)语句中采集样本语句;这些样本语句都与各自的语料场景高度相关,可用于后续构建特定语料场景的字典树,具有较强的针对性。
本示例性实施例中,可以获取N个样本语句,N可以是任意自然数,N的数值越大,表示样本语句的数量越多,则后续构建的字典树能够更好覆盖到语料场景中的各种语句。
在采集样本语句时,可以从语句池中随机抽取,也可以基于一定的规则抽取,例如对样本语句的长度、所包含字符的类型进行限定等。在一示例性实施中,为了保证样本语句能够充分覆盖语料场景中各种类型的语句,可以按照预定的比例获取不同类型的样本语句,例如采集不同长度的样本语句,使得样本语句包括数量均衡的短语句、一般长度语句与长语句等。在一示例性实施例中,也可以将服务器一侧所能获取到的全部用户语句作为样本语句。
步骤S120,分别对上述一个或多个样本语句进行分词处理,得到每个样本语句对应的样本序列。
其中,样本序列是指样本语句进行分词后的字符序列,主要由文本字符组成,也可以包括一些特殊字符。文本字符是指具有文本实体的字符,例如中文的汉字、词语或英文的字母、单词。特殊字符是指非确定结束性的符号,例如空格、括号或引号等,通常空格、括号或引号并不代表语句的结束,其前后的内容属于同一语句,其他具有相似功能的符号也可以作为特殊字符处理;本示例性实施例中,可以将所有的特殊字符作为同一种字符处理,例如空格、括号与引号都转换为一种特殊字符(如“\0”或“O”),也可以对不同类型的特殊字符分别处理,例如空格、括号与引号转换为三种不同的特殊字符(如“\0”、“\1”与“\2”)。
分词可以通过分词工具实现,例如结巴分词,哈工大LTP语言云平台,斯坦福大学NLP分词工具等。需要说明的是,本示例性实施例对于分词的粒度不做特别限定,例如可以将中文部分的语句划分为一个个汉字或一个个词语,可以将英文部分的语句划分为一个个字母或一个个单词等。在一示例性实施例中,可以根据unicode(统一码)的字符编码进行分词,以获得兼容多种语言的样本序列。
对于样本语句分词的过程举例说明:样本语句为“精灵O热门O活动”,其中O为空格,将其分词后,得到样本序列(精,灵,O,热,门,O,活,动)。
本示例性实施例中,对于N个样本语句中的每个样本语句进行分词处理,得到每个样本语句对应的样本序列,则一共得到N个样本序列。
步骤S130,以初始的字典树为起始,对于每个样本序列,在字典树中查找该样本序列的路径,如果未查找到该样本序列的路径,则将该样本序列作为新的路径插入字典树,以更新字典树。
其中,初始的字典树可以是任意的已有的字典树,也可以是空的字典树(即未填入任何字符的字典树)。可以将样本序列以任意的规则排序,例如按照获取的时间顺序、字符数顺序、首个字符的字母顺序排序或随机排序等,在初始的字典树中查找第一个样本序列的路径,如果查找到第一个样本序列的路径,则不对字典树做任何更改,继续查找第二个样本序列的路径;如果未查找到第一个样本序列的路径,则将第一个样本序列的路径插入字典树,得到更新后的字典树,并在此基础上继续查找第二个样本序列的路径。依此类推,对字典树逐次添加新的路径,直到处理完最后一个样本序列,获得最终的字典树,该字典树包含所有样本序列的路径。例如,若一共有N个样本序列,遍历N个样本序列后,得到最终的字典树。
在查找样本序列的路径时,可以在字典树中逐层查找序列中的每一个字符,具体而言,可以在字典树的任一层查找样本序列的第一个字符,如果查找到,则在该字符的下一层,与该字符连接的节点中查找样本序列的第二个字符,并依此类推,所查找到的每一个字符在字典树中是连接成一条路径的,该路径在字典树中也可以在首尾两侧延伸出若干个字符,使得样本序列的字符串属于完整路径的一个子串。在一示例性实施例中,可以规定样本序列与路径之间精确匹配,即样本序列的第一个字符应当位于该路径的第一个节点,是字典树中第一层的节点,样本序列的最后一个字符应当位于该路径的最后一个节点,是字典树的叶子节点。
在上述逐层查找的过程中,如果存在样本序列中任意一个字符无法查找到,则判断查找失败,将样本序列作为新的路径插入字典树,具体而言,将样本序列中的字符顺次连接形成字符串,并将该字符串插入字典树中,使样本序列的第一个字符位于第一层,第二个字符位于第二层,并依此类推,直到样本序列的最后一个字符。
在一示例性实施例中,以空的字典树为初始的字典树,以特定语料场景中的海量语句为样本语句,并转换为样本序列,可以从零开始,构建该语料场景专用的字典树,其中该字典树的第一条路径即第一个样本序列的路径。
在一示例性实施例中,如图2所示,步骤S130中在字典树中查找该样本序列的路径,如果未查找到该样本序列的路径,则将该样本序列作为新的路径插入字典树,以更新字典树,可以通过以下步骤S131~S136实现:
步骤S131,将字典树的根节点确定为当前节点;
步骤S132,将样本序列确定为样本序列的待匹配序列;
重复执行步骤S133~S136,直到生成字典树中新的路径或待匹配序列为空:
步骤S133,将当前节点的子树确定为当前目标子树;
步骤S134,在当前目标子树的第一层查找待匹配序列的第一个字符;
步骤S135,如果在当前目标子树中未查找到待匹配序列的第一个字符,则依次将待匹配序列的字符插入当前目标子树中对应的层,并依次连接所插入的字符,生成字典树中新的路径;
步骤S136,如果在当前目标子树中查找到待匹配序列的第一个字符,则将当前节点更新为查找到的第一个字符,并从待匹配序列中移除待匹配序列的第一个字符,以更新待匹配序列。
图3示例性示出了一种字典树300,字典树300的根节点以“R”表示,是最上层的单独节点,不代表任何实体字符,表示起始的意思,当然,本公开对于根节点的表示方法不做限定。根节点R的下一层为字典树300的第一层(根节点R不算做一层),包括“精”、“矮”、“热”三个节点,根节点R与第一层的所有节点相连,因此字典树300的每一条路径都是从根节点R开始的。“O”表示特殊字符,字典树300中将空格、括号或引号等特殊字符统一用字符“O”表示。字典树中的每一条路径代表一个语句,“E”为结束节点,表示一条路径结束,例如字典树300中,“精灵”、“精气值”、“精灵O天赋”等都是字典树中已有的语句,与结束节点“E”连接的字符节点是字典树的叶子节点。当前目标子树是指字典树中以当前节点为根节点的子树,例如图3中“精”节点为当前节点时,其子树为310,子树可视作字典树的一个子集。特别的,如果当前节点为整个字典树的根节点,例如图3中的根节点“R”,则当前目标子树就是字典树本身。
应当理解,图3中的字典树300仅作为示例性说明。在实际应用中,字典树可以表现为各种不同的形式,例如根节点位于最下方,从下向上的分布结构,或者将字典树表现为表格的形式,使每一行或每一列代表字典树的一层。在一示例性实施例中,可以在字典树中移除根节点“R”与结束节点“E”,对第一层的节点通过标记确定其为起始节点,对叶子节点通过另一种标记确定其为结束节点。
在字典树中查找样本序列的路径时,是对样本序列中的字符逐个查找的,先查找第一个字符,再查找第二个字符,并依此类推,其中,样本序列中未查找的字符所形成的子序列为待匹配序列,例如查找到第一个字符后,以第二个字符为起始,与其后续的第三个字符、第四个字符直到最后一个字符形成待匹配序列;可见,在开始查找样本序列时,样本序列的整个序列就是其待匹配序列,随着查找的进行,待匹配序列逐渐缩短,直到最后一个字符被查找到,此时待匹配序列为空,表示查找完成。
举例而言,样本语句为“精灵O热门O活动”,将其分词为样本序列(精,灵,O,热,门,O,活,动)。首先将根节点R确定为当前节点,当前的待匹配序列就是样本序列(精,灵,O,热,门,O,活,动),将当前节点的子树确定为当前目标子树,则当前目标子树就是字典树300。在当前目标子树的第一层查找“精”,查找到之后,将“精”确定为当前节点,当前目标子树更新为子树310,待匹配序列更新为(灵,O,热,门,O,活,动)。继续在子树310的第一层查找“灵”,查找到之后,将“灵”确定为当前节点,当前目标子树更新为“灵”的子树,待匹配序列更新为(O,热,门,O,活,动);重复上述过程,直到查找到“门”之后,需要在“门”的子树的第一层查找待匹配序列(O,活,动)的第一个字符“O”,此时无法查找到“O”,则将匹配序列(O,活,动)顺次插入“门”的子树中,使“O”位于该子树的第一层,“活”位于第二层,“动”位于第三层。结束该样本语句的处理过程,可以进行下一个样本语句的处理。通过插入新的路径,实现了字典树的更新,更新为图4中的字典树400,相比于字典树300,字典树400增加了样本语句“精灵O热门O活动”所对应的路径。
在本示例性实施例中,对样本语句进行分词处理,得到样本序列,样本序列包括文本字符与特殊字符,通过样本序列插入路径的方式构建并更新字典树。一方面,本示例性实施例提出了一种快速构建字典树的方法,可以针对不同的语料场景,根据场景中的语句构建字典树,使得字典树具有较强的针对性,可以更好的适用于特定的语料场景,提高语句搜索的精确性。另一方面,由于在多数情况下特殊字符对于语句语义有实质性作用,字典树中包含特殊字符的节点,可以覆盖到文本字符与特殊字符各种组合的情况,使得字典树中的语句更加丰富全面。
本公开的示例性实施例还提供了一种语句搜索方法,可以基于上述示例性实施例中的字典树进行语句搜索。如图5所示,该语句搜索方法可以包括以下步骤:
步骤S510,获取待处理语句;
步骤S520,对待处理语句进行分词处理,得到待处理序列;
步骤S530,在字典树中查找待处理序列的路径;
步骤S540,将查找到的路径确定为待处理语句的搜索结果。
其中,待处理语句即需要搜索的语句,例如用户在搜索栏输入的语句,可以通过与步骤S120相同的方式对待处理语句进行分词处理,得到待处理序列,待处理序列由文本字符或文本字符加特殊字符组成。在查找待处理序列的路径时,可以在字典树中逐层查找序列中的每一个字符,具体而言,可以在字典树的任一层查找待处理序列的第一个字符,如果查找到,则在该字符的子树的第一层查找待处理序列的第二个字符,并依此类推,所查找到的每一个字符在字典树中是连接成一条路径的,该路径在字典树中也可以在首尾两侧延伸出若干个字符,使得待处理序列的字符串属于完整路径的一个子串。在一示例性实施例中,可以规定待处理序列与路径之间精确匹配,即待处理序列的第一个字符应当位于该路径的第一个节点,是字典树中第一层的节点,待处理序列的最后一个字符应当位于该路径的最后一个节点,是字典树的叶子节点。最终查找到一个或多个与待处理序列匹配的路径,即为待处理语句的搜索结果,可以将其呈现出来。
本示例性实施例中,基于包含特殊字符的字典树,通过匹配路径的方式进行语句搜索,可以针对包含特殊字符的待处理语句进行精准的查找匹配,以获得与语句的完整语义更加匹配的搜索结果,提高语句搜索的精确性以及搜索效率。
在一示例性实施例中,如图6所示,步骤S530可以通过以下步骤S531~S536实现:
步骤S531,将字典树的根节点确定为当前节点;
步骤S532,将待处理序列确定为待处理序列的待匹配序列;
步骤S533,执行循环过程,直到待匹配序列为空,将字典树的根节点到当前节点的路径确定为待处理序列的路径;
循环过程包括步骤S534~S536:
步骤S534,将当前节点的子树确定为当前目标子树;
步骤S535,在当前目标子树的第一层查找待匹配序列的第一个字符;
步骤S536,如果在当前目标子树中查找到待匹配序列的第一个字符,则将当前节点更新为查找到的第一个字符,并从待匹配序列中移除待匹配序列的第一个字符,以更新待匹配序列。
其中,字典树的根节点、当前节点、子树、当前目标子树等名称的含义与图2中的含义相同。
假设待处理序列Query=(q1,q2,...,qt),其中q1、q2等表示Query中的元字符,可以是文本字符或特殊字符,Query中一共有t个字符。如果当前已查找到qm(m<t),则可以将待处理序列分割为已匹配序列与待匹配序列:
已匹配序列为Pm=(q1,q2,...,qm);
待匹配序列为Qm=(qm+1,qm+2,...,qt);
其中,已匹配序列Pm在字典树中已查找到了对应的路径,则可以确定已匹配路径Pathm=(R,q1,q2,...,qm),R为字典树的根节点,Pathm表示在字典树中已匹配到了节点q1、q2、…、qm,这些节点顺次连接形成了已匹配路径。
以qm为当前节点,由于字典树中可能包含多个qm的节点,定义E(Pathm)为字典树中路径Pathm的尾部节点,即为当前节点。可以将当前的查找进度以查找状态的形式表示,定义当前的查找状态为:
Sm={Pathm,E(Pathm),Qm};
此外,也可以定义子树T(Pathm)为以E(Pathm)为根节点的子树,则T(Pathm)为当前目标子树,当前节点E(Pathm)与当前目标子树T(Pathm)之间具有一一对应的关系,通过其中的一个可以确定另一个。查找状态Sm的处理过程为:在当前目标子树T(Pathm)的第一层查找Qm的第一个字符qm+1,如果为查找到,可以结束查找状态Sm的查找过程,如果查找到,则更新查找状态为:
Sm+1={Pathm+1,E(Pathm+1),Qm+1};
可以依此对待处理序列中的字符逐个查找,直到最后一个查找状态St-1={Patht-1,E(Patht-1),Qt-1},其中Qt-1=(qt),在当前节点子树E(Patht-1)的子树T(Patht-1)的第一层查找qt,如果查找到qt,则得到最终匹配的路径Patht=(q1,q2,...,qt),即为待处理语句的搜索结果。
进一步的,为了实现精确查找,在一示例性实施例中,步骤S533可以通过以下步骤实现:
执行循环过程,直到待匹配序列为空,判断当前节点是否为字典树的结束节点;
如果当前节点是结束节点,则将字典树的根节点到当前节点的路径确定为待处理序列的路径;
如果当前节点不是结束节点,则确定查找失败。
其中,结束节点是字典树中的叶子节点,可以如图3中所示的与“E”直接相连的节点,例如“灵”、“赋”、“题”等,表示路径可以在结束节点处结束,代表一个语句结束。如果当前节点是结束节点,则认为已查找到的路径有效,将其作为搜索结果,如果当前节点不是结束节点,则认为已查找到的路径不是一条完整的路径,不代表一个完整的语句,可以判定其无效,查找失败。
在一示例性实施例中,如图7所示,步骤S533可以包括以下步骤:
步骤S5331:将字典树的根节点到当前节点的路径确定为已匹配路径;
步骤S5332:确定待处理序列的查找状态,查找状态包括已匹配路径、当前节点与待匹配序列;
步骤S5333:对于每个查找状态,执行循环过程,直到该查找状态中的待匹配序列为空,将该查找状态中的已匹配路径作为待处理序列的路径。
其中,如果待处理序列Query=(q1,q2,...,qt),当前已查找到qm(m<t),已匹配路径可以是Pathm=(R,q1,q2,...,qm),待匹配序列可以是Qm=(qm+1,qm+2,...,qt),查找状态可以是Sm={Pathm,E(Pathm),Qm}。通常按照待处理序列中的字符逐个查找,在同一时刻只有一个查找状态;本示例性实施例中,在一些情况下,可以对查找状态进行一定的“分化”,以在同一时刻生成多个并列的查找状态,则对于每个查找状态执行图6中的循环过程(即步骤S534~S536循环),可视为对查找状态不断更新的过程,直到该查找状态中的待匹配序列为空。以下对查找状态“分化”的情况进行示例性说明。
在一示例性实施例中,如果查找状态中待匹配序列的第一个字符为特殊字符,则可以将该特殊字符移除,生成该待匹配序列的一个并列的待匹配序列,并与该查找状态中的已匹配路径、当前节点共同形成一个并列的查找状态,从而由一个查找状态“分化”为两个查找状态。
在一示例性实施例中,如果待处理序列中包含多个特殊字符,可以在查找进行多次特殊字符的移除,每次针对于原始的待处理序列随机移除其中的一个或多个特殊字符,以获得多个待匹配序列,则后续每个待匹配序列可以生成查找状态,从而将初始的查找状态“分化”为多个并列的查找状态。该方式是对待处理序列进行一定程度的模糊查找。
还可以通过其他方式在出现特殊字符的情况下对待处理语句进行模糊查找,在一示例性实施例中,参考上述图7所示,循环过程在图6中步骤S534~S536循环的基础上,还可以包括以下步骤:
步骤S5371,在当前目标子树的第一层查找特殊字符;
步骤S5372,如果在当前目标子树中查找到特殊字符,则将当前节点更新为查找到的特殊字符,并从待匹配序列中生成多个子序列,将待匹配序列更新为多个子序列,以得到待处理序列的多个查找状态。
下面进行示例性说明,假设待处理序列Query=(q1,q2,...,qt),当前已查找到qm(m<t),则已匹配路径为Pathm=(R,q1,q2,...,qm),待匹配序列为Qm=(qm+1,qm+2,...,qt),查找状态为Sm={Pathm,E(Pathm),Qm};如果在当前目标子树T(Pathm)的第一层查找到特殊字符O,则更新已匹配路径为Pathm→O=(R,q1,q2,...,qm,O),更新当前节点为E(Pathm→O),待匹配序列仍然为Qm,则可以从Qm中生成多个子序列,待匹配序列的子序列是指待匹配序列中任意一个或多个连续字符形成的子序列,Qm的子序列可以如下:
Qmv=(qm+e,qm+e+1,...,qm+e+f),e为自然数,e+f<t-m;
举例说明,如果待匹配序列为(参,加,活,动),则其子序列可以是:(参,加),(加,活,动),(加,活),(参)等等。当然,也可以为子序列设定一定的生成规则,例如规定子序列的字符数量处于预设的数值区间内,子序列必须包含待匹配序列中的特定字符等。
由上可知,Qm中可以生成多个子序列,假设为Qm1、Qm2……,则每个子序列可以对应得到一个查找状态:
Sm1={Pathm→O,E(Pathm→O),Qm1};
Sm2={Pathm→O,E(Pathm→O),Qm2}……
从而“分化”出多个并列的查找状态,可以针对于待处理序列中的剩余部分(即待匹配序列),进行深度的模糊查找,以提供较为全面的语句搜索结果。
在一示例性实施例中,参考上述图7所示,循环过程还可以包括以下步骤:
步骤S5381,如果在当前目标子树中未查找到待匹配序列的第一个字符且未查找到特殊字符,则判断当前目标子树是否为空;
步骤S5382,如果当前目标子树为空,则将当前的查找状态中的已匹配路径作为待处理序列的一条路径,并对下一查找状态执行循环过程;
步骤S5383,如果当前目标子树不为空,则确定当前的查找状态查找失败,并对下一查找状态执行循环过程。
其中,当前目标子树为空是指当前目标子树中只有当前节点一个根节点,再无后续节点,说明在字典树的已匹配路径中,当前节点无法再与其他字符连接形成更长的语句,已匹配路径所代表的语句在待处理语句中可能是一个完整语句单元(如词语、分句等),可将其作为待处理序列的一条路径;如果当前目标子树不为空,说明当前节点还可以与其他字符连接以形成更长的语句,则当前节点在待处理语句中通常不是完整语句单元的节点,可以确定当前的查找状态查找失败。在上述过程中,无论是否查找到一条路径,都可以跳转到下一查找状态,并执行循环过程以继续查找。步骤S5381~S5383可视作对于模糊查找的补充方法,可以进一步提高待处理语句搜索结果的全面性。
在对全部查找状态通过循环过程进行处理后,可以执行步骤S539,判断是否遍历全部查找状态,若是,则结束查找。
需要说明的是,如果待匹配序列中的第一个字符恰好是特殊字符,则在当前目标子树的第一层查找到特殊字符后,可以按照步骤S534~S536进行处理,也可以按照步骤S5371~S5372进行处理,本公开对此不做特别限定。
在一示例性实施例中,上述待匹配序列的多个子序列可以包括待匹配序列的第一子序列、第二子序列、……与第k子序列;其中,k为待匹配序列的字符总数,对于[1,k]内的任意自然数i,待匹配序列的第i子序列表示待匹配序列中以第i个字符为起始、以第k个字符为结束的连续字符序列。
举例说明,如果待匹配序列为Q0=(q1,q2,...,qk),则第一子序列、第二子序列、……、第k-1子序列与第k子序列分别为:
Q1=(q1,q2,...,qk)(即为待匹配序列本身);
Q2=(q2,q3,...,qk)……
Qk-1=(qk-1,qk);
Qk=(qk);
并且每个子序列可以对应的生成一个并列的查找状态,使得当前的查找状态“分化”为k个查找状态,可以实现对于待匹配序列较为完全的模糊查找。
在上述实施例中,示例性地说明了查找状态出现“分化”的情况,基于多个并列的查找状态,最终可能在字典树中得到多条待处理序列的路径。基于此,在一示例性实施例中,步骤S540可以包括:
如果在字典树中查找到与待处理序列匹配的多条路径,则将多条路径中匹配度最高的路径确定为待处理序列的搜索结果。
其中,匹配度可以是路径与待处理序列的一致程度,可通过多种具体的计算方法得到,例如可以计算待处理序列在各条路径中所占的长度比例,以长度比例表示匹配度,也可以待处理序列与各条路径的不一致字符数,以该字符数表示匹配度等。在一示例性实施例中,还可以将各条路径滤除特殊字符后的长度作为匹配度,则多条路径中匹配度最高的路径可以是多条路径滤除特殊字符后最长的路径,该路径与待处理序列匹配一致的文本字符最多,通常匹配度最高。
通过上述通过匹配度筛选最终搜索结果的方式,可以在近似结果中确定出精确查找的结果,可视作最优的搜索结果,从而进一步提高语句搜索的精确性。
下面通过一个具体示例对上述过程进行说明。基于图4中的字典树进行语句搜索,假设用户输入的待处理语句为“精灵有热门活动”,进行分词后得到待处理序列Query=(精,灵,有,热,门,活,动)。首先生成初始的查找状态如下:
S0={PathR,E(PathR),(精,灵,有,热,门,活,动)};
R表示字典树的根节点,当前目标子树为T(PathR),即字典树本身,在字典树的第一层查找到“精”,且未查找到特殊字符。得到已匹配路径Path1=(R,精),并更新查找状态如下:
S1={Path1,E(Path1),(灵,有,热,门,活,动)};
当前目标子树为T(Path1),在其第一层查找到“灵”,且未查找到特殊字符。得到已匹配路径Path2=(R,精,灵),并更新查找状态如下:
S2={Path2,E(Path2),(有,热,门,活,动)};
当前目标子树为T(Path2),在其第一层未查找到“有”,查找到特殊字符O。得到已匹配路径Path2→O=(R,精,灵,O),从待匹配序列(有,热,门,活,动)中生成多个子序列,以得到下列多个查找状态:
S21={Path2→O,E(Path2→O),(有,热,门,活,动)};
S22={Path2→O,E(Path2→O),(热,门,活,动)};
S23={Path2→O,E(Path2→O),(门,活,动)};
S24={Path2→O,E(Path2→O),(活,动)};
S25={Path2→O,E(Path2→O),(动)};
对于上述5个查找状态依次执行循环过程。
先进行查找状态S21,在当前目标子树T(Path2→O)的第一层未查找到“有”,也未查找到特殊字符,判断T(Path2→O)是否为空;不为空,则确定查找状态S21查找失败,进行下一查找状态S22。
对于查找状态S22,在当前目标子树T(Path2→O)的第一层查找到“热”,未查找到特殊字符,得到已匹配路径Path3=(R,精,灵,O,热),并更新查找状态:S32={Path3,E(Path3),(门,活,动)}。在当前目标子树T(Path3)下继续查找,第一层查找到“门”,未查找到特殊字符,得到已匹配路径Path4=(R,精,灵,O,热,门),并更新查找状态:S42={Path4,E(Path4),(活,动)}。在当前目标子树T(Path4)下继续查找,第一层未查找到“活”,但查找到特殊字符O,得到已匹配路径Path4→O=(R,精,灵,O,热,门,O),从待匹配序列(活,动)中生成两个子序列,以得到两个查找状态:
S421={Path4→O,E(Path4→O),(活,动)};
S422={Path4→O,E(Path4→O),(动)};
对于查找状态S421,在当前目标子树T(Path4→O)的第一层查找到“活”,未查找到特殊字符,得到已匹配路径Path5=(R,精,灵,O,热,门,O,活),并更新查找状态:S521={Path5,E(Path5),(动)}。在当前目标子树T(Path5)下继续查找,第一层查找到“动”,未查找到特殊字符,得到已匹配路径Path6=(R,精,灵,O,热,门,O,活,动),并更新查找状态S621={Path6,E(Path6),()},此时待匹配序列为空,该查找状态下的循环过程结束,判断当前节点E(Path6)是否为结束节点,是结束节点(图中与“E”相连),因此得到一条匹配路径Path6=(R,精,灵,O,热,门,O,活,动)。进行下一查找状态S422。
对于查找状态S422,在当前目标子树T(Path4→O)的第一层未查找到“活”,也未查找到特殊字符,判断T(Path4→O)不为空,则确定查找状态S422查找失败,进行下一查找状态S23。
对于查找状态S23,在当前目标子树T(Path2→O)的第一层未查找到“门”,也未查找到特殊字符,判断T(Path2→O)不为空,则确定查找状态S23查找失败,进行下一查找状态S24。
对于查找状态S24,在当前目标子树T(Path2→O)的第一层查找到“活”,未查找到特殊字符,得到已匹配路径Path7=(R,精,灵,O,活),更新查找状态:S34={Path7,E(Path7),(动)};然后在当前目标子树T(Path7)的第一层查找到“动”,未查找到特殊字符,得到已匹配路径Path8=(R,精,灵,O,活,动),更新查找状态S44={Path8,E(Path8),()},此时待匹配序列为空,该查找状态下的循环过程结束,判断当前节点E(Path8)是否为结束节点,是结束节点(图中与“E”相连),因此得到一条匹配路径Path8=(R,精,灵,O,活,动)。进行下一查找状态S25。
对于查找状态S25,在当前目标子树T(Path2→O)的第一层未查找到“动”,也未查找到特殊字符,判断T(Path2→O)不为空,则确定查找状态S25查找失败,进行下一查找状态。
此时已遍历全部查找状态,结束查找过程,得到匹配的路径包括上述Path6与Path8。滤除其中的特殊字符O,得到(精,灵,热,门,活,动)与(精,灵,活,动),其中(精,灵,热,门,活,动)为最长的路径,即为待处理语句“精灵有热门活动”最终的搜索结果。
本公开的示例性实施例还提供了一种字典树构建装置,如图8所示,该装置800可以包括:语句获取模块810,用于获取一个或多个样本语句;分词处理模块820,用于分别对该一个或多个样本语句进行分词处理,得到每个样语句对应的样本序列,其中,样本序列由文本字符和/或特殊字符组成,特殊字符包括空格、括号或引号;字典树更新模块830,用于以初始的字典树为起始,对于每个样本序列,在字典树中查找该样本序列的路径,如果未查找到该样本序列的路径,则将该样本序列作为新的路径插入字典树,以更新字典树。
在一示例性实施例中,字典树更新模块可以包括:当前节点确定单元,用于将字典树的根节点确定为当前节点;待匹配序列确定单元,用于将样本序列确定为样本序列的待匹配序列;循环处理单元,用于重复执行以下步骤,直到生成字典树中新的路径或待匹配序列为空:将当前节点的子树确定为当前目标子树;在当前目标子树的第一层查找待匹配序列的第一个字符;如果在当前目标子树中未查找到待匹配序列的第一个字符,则依次将待匹配序列的字符插入当前目标子树中对应的层,并依次连接所插入的字符,生成字典树中新的路径;如果在当前目标子树中查找到待匹配序列的第一个字符,则调度当前节点确定单元将当前节点更新为查找到的第一个字符,并调度待匹配序列确定单元从待匹配序列中移除待匹配序列的第一个字符,以更新待匹配序列。
本公开的示例性实施例还提供了一种语句搜索装置,如图9所示,该装置900可以包括:语句获取模块910,用于获取待处理语句;分词处理模块920,用于对待处理语句进行分词处理,得到待处理序列,其中,待处理序列由文本字符和/或特殊字符组成,特殊字符包括空格、括号或引号;路径查找模块930,用于在字典树中查找待处理序列的路径,并将查找到的路径确定为待处理语句的搜索结果;其中,该字典树为本示例性实施例中任一种字典树构建方法所构建的字典树。
在一示例性实施例中,路径查找模块可以包括:当前节点确定单元,用于将字典树的根节点确定为当前节点;待匹配序列确定单元,用于将待处理序列确定为待处理序列的待匹配序列;循环处理单元,用于执行以下循环过程,直到待匹配序列为空,将字典树的根节点到当前节点的路径确定为待处理序列的路径:将当前节点的子树确定为当前目标子树;在当前目标子树的第一层查找待匹配序列的第一个字符;如果在当前目标子树中查找到待匹配序列的第一个字符,则调度当前节点确定单元将当前节点更新为查找到的第一个字符,并调度待匹配序列确定单元从待匹配序列中移除待匹配序列的第一个字符,以更新待匹配序列。
在一示例性实施例中,循环处理单元还可以用于执行循环过程,直到待匹配序列为空,判断当前节点是否为字典树的结束节点,如果当前节点是结束节点,则将字典树的根节点到当前节点的路径确定为待处理序列的路径,以及如果当前节点不是结束节点,则确定查找失败。
在一示例性实施例中,路径查找模块还可以包括:已匹配路径确定单元,用于将字典树的根节点到当前节点的路径确定为已匹配路径;查找状态确定单元,用于确定待处理序列的查找状态,查找状态包括已匹配路径、当前节点与待匹配序列;循环处理单元用于对于每个查找状态,执行循环过程,直到查找状态中的待匹配序列为空,将查找状态中的已匹配路径作为待处理序列的路径;其中,循环过程还包括:在当前目标子树的第一层查找特殊字符;如果在当前目标子树中查找到特殊字符,则将当前节点更新为查找到的特殊字符,并从待匹配序列中生成多个子序列,将待匹配序列更新为多个子序列,调度查找状态确定单元生成待处理序列的多个查找状态。
在一示例性实施例中,循环过程还可以包括:如果在当前目标子树中未查找到待匹配序列的第一个字符且未查找到特殊字符,则判断当前目标子树是否为空;如果当前目标子树为空,则将当前的查找状态中的已匹配路径作为待处理序列的一条路径,并对下一查找状态执行循环过程;如果当前目标子树不为空,则确定当前的查找状态查找失败,并对下一查找状态执行循环过程。
在一示例性实施例中,待匹配序列的多个子序列包括待匹配序列的第一子序列、第二子序列、……与第k子序列;其中,k为待匹配序列的字符总数,对于[1,k]内的任意自然数i,待匹配序列的第i子序列表示待匹配序列中以第i个字符为起始、以第k个字符为结束的连续字符序列。
在一示例性实施例中,路径查找模块还可以包括:搜索结果确定单元,用于如果在字典树中查找到与待处理序列匹配的多条路径,则将多条路径中匹配度最高的路径确定为待处理序列的搜索结果。
在一示例性实施例中,上述多条路径中匹配度最高的路径为多条路径滤除特殊字符后最长的路径。
上述各模块/单元的具体细节已经在对应的方法部分实施例中进行了详细的描述,因此不再赘述。
本公开的示例性实施例还提供了一种能够实现上述方法的电子设备。
所属技术领域的技术人员能够理解,本公开的各个方面可以实现为系统、方法或程序产品。因此,本公开的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。
下面参照图10来描述根据本公开的这种示例性实施例的电子设备1000。图10显示的电子设备1000仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图10所示,电子设备1000以通用计算设备的形式表现。电子设备1000的组件可以包括但不限于:上述至少一个处理单元1010、上述至少一个存储单元1020、连接不同系统组件(包括存储单元1020和处理单元1010)的总线1030、显示单元1040。
其中,存储单元存储有程序代码,程序代码可以被处理单元1010执行,使得处理单元1010执行本说明书上述“示例性方法”部分中描述的根据本公开各种示例性实施方式的步骤。例如,处理单元1010可以执行图1或图2所示的方法步骤等。
存储单元1020可以包括易失性存储单元形式的可读介质,例如随机存取存储单元(RAM)1021和/或高速缓存存储单元1022,还可以进一步包括只读存储单元(ROM)1023。
存储单元1020还可以包括具有一组(至少一个)程序模块1025的程序/实用工具1024,这样的程序模块1025包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
总线1030可以为表示几类总线结构中的一种或多种,包括存储单元总线或者存储单元控制器、外围总线、图形加速端口、处理单元或者使用多种总线结构中的任意总线结构的局域总线。
电子设备1000也可以与一个或多个外部设备1200(例如键盘、指向设备、蓝牙设备等)通信,还可与一个或者多个使得用户能与该电子设备1000交互的设备通信,和/或与使得该电子设备1000能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口1050进行。并且,电子设备1000还可以通过网络适配器1060与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器1060通过总线1030与电子设备1000的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备1000使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本公开实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、终端装置、或者网络设备等)执行根据本公开示例性实施例的方法。
本公开的示例性实施例还提供了一种计算机可读存储介质,其上存储有能够实现本说明书上述方法的程序产品。在一些可能的实施方式中,本公开的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当程序产品在终端设备上运行时,程序代码用于使终端设备执行本说明书上述“示例性方法”部分中描述的根据本公开各种示例性实施方式的步骤。
参考图11所示,描述了根据本公开的示例性实施例的用于实现上述方法的程序产品1100,其可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在终端设备,例如个人电脑上运行。然而,本公开的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本公开操作的程序代码,程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
此外,上述附图仅是根据本公开示例性实施例的方法所包括的处理的示意性说明,而不是限制目的。易于理解,上述附图所示的处理并不表明或限制这些处理的时间顺序。另外,也易于理解,这些处理可以是例如在多个模块中同步或异步执行的。
应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本公开的示例性实施例,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其他实施例。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限。
Claims (14)
1.一种字典树构建方法,其特征在于,包括:
获取一个或多个样本语句;
分别对所述一个或多个样本语句进行分词处理,得到每个所述样本语句对应的样本序列,其中,所述样本序列由文本字符和/或特殊字符组成,所述特殊字符包括空格、括号或引号;
以初始的字典树为起始,对于每个所述样本序列,在所述字典树中查找所述样本序列的路径,如果未查找到所述样本序列的路径,则将所述样本序列作为新的路径插入所述字典树,以更新所述字典树。
2.根据权利要求1所述的方法,其特征在于,所述在所述字典树中查找所述样本序列的路径,如果未查找到所述样本序列的路径,则将所述样本序列作为新的路径插入所述字典树,以更新所述字典树,包括:
将所述字典树的根节点确定为当前节点;
将所述样本序列确定为所述样本序列的待匹配序列;
重复执行以下步骤,直到生成所述字典树中新的路径或所述待匹配序列为空:
将所述当前节点的子树确定为当前目标子树;
在所述当前目标子树的第一层查找所述待匹配序列的第一个字符;
如果在所述当前目标子树中未查找到所述待匹配序列的第一个字符,则依次将所述待匹配序列的字符插入所述当前目标子树中对应的层,并依次连接所插入的字符,生成所述字典树中新的路径;
如果在所述当前目标子树中查找到所述待匹配序列的第一个字符,则将所述当前节点更新为查找到的所述第一个字符,并从所述待匹配序列中移除所述待匹配序列的第一个字符,以更新所述待匹配序列。
3.一种语句搜索方法,其特征在于,包括:
获取待处理语句;
对所述待处理语句进行分词处理,得到待处理序列,其中,所述待处理序列由文本字符和/或特殊字符组成,所述特殊字符包括空格、括号或引号;
在字典树中查找所述待处理序列的路径;
将查找到的路径确定为所述待处理语句的搜索结果;
其中,所述字典树为根据权利要求1或2所述的方法所构建的字典树。
4.根据权利要求3所述的方法,其特征在于,所述在字典树中查找所述待处理序列的路径,包括:
将所述字典树的根节点确定为当前节点;
将所述待处理序列确定为所述待处理序列的待匹配序列;
执行以下循环过程,直到所述待匹配序列为空,将所述字典树的根节点到所述当前节点的路径确定为所述待处理序列的路径:
将所述当前节点的子树确定为当前目标子树;
在所述当前目标子树的第一层查找所述待匹配序列的第一个字符;
如果在所述当前目标子树中查找到所述待匹配序列的第一个字符,则将所述当前节点更新为查找到的所述第一个字符,并从所述待匹配序列中移除所述待匹配序列的第一个字符,以更新所述待匹配序列。
5.根据权利要求4所述的方法,其特征在于,所述执行以下循环过程,直到所述待匹配序列为空,将所述字典树的根节点到所述当前节点的路径确定为所述待处理序列的路径,包括:
执行所述循环过程,直到所述待匹配序列为空,判断所述当前节点是否为所述字典树的结束节点;
如果所述当前节点是所述结束节点,则将所述字典树的根节点到所述当前节点的路径确定为所述待处理序列的路径;
如果所述当前节点不是所述结束节点,则确定查找失败。
6.根据权利要求4所述的方法,其特征在于,所述执行以下循环过程,直到所述待匹配序列为空,将所述字典树的根节点到所述当前节点的路径确定为所述待处理序列的路径,包括:
将所述字典树的根节点到所述当前节点的路径确定为已匹配路径;
确定所述待处理序列的查找状态,所述查找状态包括所述已匹配路径、当前节点与待匹配序列;
对于每个所述查找状态,执行所述循环过程,直到所述查找状态中的待匹配序列为空,将所述查找状态中的已匹配路径作为所述待处理序列的路径;
其中,所述循环过程还包括:
在所述当前目标子树的第一层查找所述特殊字符;
如果在所述当前目标子树中查找到所述特殊字符,则将所述当前节点更新为查找到的所述特殊字符,并从所述待匹配序列中生成多个子序列,将所述待匹配序列更新为所述多个子序列,以得到待处理序列的多个查找状态。
7.根据权利要求6所述的方法,其特征在于,所述循环过程还包括:
如果在所述当前目标子树中未查找到所述待匹配序列的第一个字符且未查找到所述特殊字符,则判断所述当前目标子树是否为空;
如果所述当前目标子树为空,则将当前的查找状态中的已匹配路径作为所述待处理序列的一条路径,并对下一查找状态执行所述循环过程;
如果所述当前目标子树不为空,则确定当前的查找状态查找失败,并对下一查找状态执行所述循环过程。
8.根据权利要求6所述的方法,其特征在于,所述待匹配序列的多个子序列包括所述待匹配序列的第一子序列、第二子序列、……与第k子序列;
其中,k为所述待匹配序列的字符总数,对于[1,k]内的任意自然数i,所述待匹配序列的第i子序列表示所述待匹配序列中以第i个字符为起始、以第k个字符为结束的连续字符序列。
9.根据权利要求3所述的方法,其特征在于,所述将查找到的路径确定为所述待处理语句的搜索结果,包括:
如果在所述字典树中查找到与所述待处理序列匹配的多条路径,则将所述多条路径中匹配度最高的路径确定为所述待处理序列的搜索结果。
10.根据权利要求9所述的方法,其特征在于,所述多条路径中匹配度最高的路径为所述多条路径滤除所述特殊字符后最长的路径。
11.一种字典树构建装置,其特征在于,包括:
语句获取模块,用于获取一个或多个样本语句;
分词处理模块,用于分别对所述一个或多个样本语句进行分词处理,得到每个所述样本语句对应的样本序列,其中,所述样本序列由文本字符和/或特殊字符组成,所述特殊字符包括空格、括号或引号;
字典树更新模块,用于以初始的字典树为起始,对于每个所述样本序列,在所述字典树中查找所述样本序列的路径,如果未查找到所述样本序列的路径,则将所述样本序列作为新的路径插入所述字典树,以更新所述字典树。
12.一种语句搜索装置,其特征在于,包括:
语句获取模块,用于获取待处理语句;
分词处理模块,用于对所述待处理语句进行分词处理,得到待处理序列,其中,所述待处理序列由文本字符和/或特殊字符组成,所述特殊字符包括空格、括号或引号;
路径查找模块,用于在字典树中查找所述待处理序列的路径,并将查找到的路径确定为所述待处理语句的搜索结果;
其中,所述字典树为根据权利要求1或2所述的方法所构建的字典树。
13.一种电子设备,其特征在于,包括:
处理器;以及
存储器,用于存储所述处理器的可执行指令;
其中,所述处理器配置为经由执行所述可执行指令来执行权利要求1-2任一项所述的字典树构建方法或权利要求3-10任一项所述的语句搜索方法。
14.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1-2任一项所述的字典树构建方法或权利要求3-10任一项所述的语句搜索方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910021127.4A CN109740165A (zh) | 2019-01-09 | 2019-01-09 | 字典树构建方法、语句搜索方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910021127.4A CN109740165A (zh) | 2019-01-09 | 2019-01-09 | 字典树构建方法、语句搜索方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109740165A true CN109740165A (zh) | 2019-05-10 |
Family
ID=66364205
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910021127.4A Pending CN109740165A (zh) | 2019-01-09 | 2019-01-09 | 字典树构建方法、语句搜索方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109740165A (zh) |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110147433A (zh) * | 2019-05-21 | 2019-08-20 | 北京鸿联九五信息产业有限公司 | 一种基于字典树的文本模板提取方法 |
CN111222323A (zh) * | 2019-12-30 | 2020-06-02 | 深圳市优必选科技股份有限公司 | 一种词槽抽取方法、词槽抽取装置及电子设备 |
CN111274805A (zh) * | 2020-01-19 | 2020-06-12 | 上海众言网络科技有限公司 | 对疑似词进行处理的方法和装置 |
CN111310450A (zh) * | 2020-03-23 | 2020-06-19 | 中国建设银行股份有限公司 | 一种字符串分词方法、装置、设备及存储介质 |
CN111679747A (zh) * | 2020-06-09 | 2020-09-18 | 腾讯科技(深圳)有限公司 | 代码输入方法、装置、电子设备及存储介质 |
CN112632285A (zh) * | 2020-12-31 | 2021-04-09 | 北京有竹居网络技术有限公司 | 一种文本聚类方法、装置、电子设备及存储介质 |
CN112819513A (zh) * | 2021-01-22 | 2021-05-18 | 北京有竹居网络技术有限公司 | 一种文本链生成方法、装置、设备及介质 |
CN113377917A (zh) * | 2021-06-22 | 2021-09-10 | 云知声智能科技股份有限公司 | 一种多模式匹配方法、装置、电子设备和存储介质 |
CN113434661A (zh) * | 2021-06-29 | 2021-09-24 | 平安科技(深圳)有限公司 | 公文拟稿提示方法、装置、电子设备及存储介质 |
CN113555069A (zh) * | 2021-07-22 | 2021-10-26 | 杭州叙简科技股份有限公司 | 一种基于ac自动机的化学品名称检索和抽取方法及装置 |
CN114822532A (zh) * | 2022-04-12 | 2022-07-29 | 广州小鹏汽车科技有限公司 | 语音交互方法、电子设备和存储介质 |
CN116541784A (zh) * | 2023-07-04 | 2023-08-04 | 乐山师范学院 | 一种基于字典树和覆盖度的时间序列分类方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106547644A (zh) * | 2015-09-21 | 2017-03-29 | 伊姆西公司 | 增量备份方法和设备 |
CN107102981A (zh) * | 2016-02-19 | 2017-08-29 | 腾讯科技(深圳)有限公司 | 词向量生成方法和装置 |
CN107992481A (zh) * | 2017-12-25 | 2018-05-04 | 中科鼎富(北京)科技发展有限公司 | 一种基于多叉树的正则表达式匹配方法、装置及系统 |
CN108549694A (zh) * | 2018-04-16 | 2018-09-18 | 南京云问网络技术有限公司 | 一种文本中时间信息的处理方法 |
CN108563685A (zh) * | 2018-03-13 | 2018-09-21 | 阿里巴巴集团控股有限公司 | 一种银行标识代码的查询方法、装置及设备 |
-
2019
- 2019-01-09 CN CN201910021127.4A patent/CN109740165A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106547644A (zh) * | 2015-09-21 | 2017-03-29 | 伊姆西公司 | 增量备份方法和设备 |
CN107102981A (zh) * | 2016-02-19 | 2017-08-29 | 腾讯科技(深圳)有限公司 | 词向量生成方法和装置 |
CN107992481A (zh) * | 2017-12-25 | 2018-05-04 | 中科鼎富(北京)科技发展有限公司 | 一种基于多叉树的正则表达式匹配方法、装置及系统 |
CN108563685A (zh) * | 2018-03-13 | 2018-09-21 | 阿里巴巴集团控股有限公司 | 一种银行标识代码的查询方法、装置及设备 |
CN108549694A (zh) * | 2018-04-16 | 2018-09-18 | 南京云问网络技术有限公司 | 一种文本中时间信息的处理方法 |
Cited By (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110147433A (zh) * | 2019-05-21 | 2019-08-20 | 北京鸿联九五信息产业有限公司 | 一种基于字典树的文本模板提取方法 |
CN111222323A (zh) * | 2019-12-30 | 2020-06-02 | 深圳市优必选科技股份有限公司 | 一种词槽抽取方法、词槽抽取装置及电子设备 |
CN111222323B (zh) * | 2019-12-30 | 2024-05-03 | 深圳市优必选科技股份有限公司 | 一种词槽抽取方法、词槽抽取装置及电子设备 |
CN111274805A (zh) * | 2020-01-19 | 2020-06-12 | 上海众言网络科技有限公司 | 对疑似词进行处理的方法和装置 |
CN111274805B (zh) * | 2020-01-19 | 2020-11-20 | 上海众言网络科技有限公司 | 对疑似词进行处理的方法和装置 |
CN111310450A (zh) * | 2020-03-23 | 2020-06-19 | 中国建设银行股份有限公司 | 一种字符串分词方法、装置、设备及存储介质 |
CN111310450B (zh) * | 2020-03-23 | 2023-07-14 | 中国建设银行股份有限公司 | 一种字符串分词方法、装置、设备及存储介质 |
CN111679747A (zh) * | 2020-06-09 | 2020-09-18 | 腾讯科技(深圳)有限公司 | 代码输入方法、装置、电子设备及存储介质 |
CN112632285A (zh) * | 2020-12-31 | 2021-04-09 | 北京有竹居网络技术有限公司 | 一种文本聚类方法、装置、电子设备及存储介质 |
WO2022156794A1 (zh) * | 2021-01-22 | 2022-07-28 | 北京有竹居网络技术有限公司 | 文本链生成方法、装置、设备及介质 |
CN112819513A (zh) * | 2021-01-22 | 2021-05-18 | 北京有竹居网络技术有限公司 | 一种文本链生成方法、装置、设备及介质 |
CN113377917A (zh) * | 2021-06-22 | 2021-09-10 | 云知声智能科技股份有限公司 | 一种多模式匹配方法、装置、电子设备和存储介质 |
CN113434661A (zh) * | 2021-06-29 | 2021-09-24 | 平安科技(深圳)有限公司 | 公文拟稿提示方法、装置、电子设备及存储介质 |
CN113555069A (zh) * | 2021-07-22 | 2021-10-26 | 杭州叙简科技股份有限公司 | 一种基于ac自动机的化学品名称检索和抽取方法及装置 |
CN114822532A (zh) * | 2022-04-12 | 2022-07-29 | 广州小鹏汽车科技有限公司 | 语音交互方法、电子设备和存储介质 |
CN116541784A (zh) * | 2023-07-04 | 2023-08-04 | 乐山师范学院 | 一种基于字典树和覆盖度的时间序列分类方法及装置 |
CN116541784B (zh) * | 2023-07-04 | 2023-09-26 | 乐山师范学院 | 一种基于字典树和覆盖度的时间序列分类方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109740165A (zh) | 字典树构建方法、语句搜索方法、装置、设备及存储介质 | |
KR102577514B1 (ko) | 텍스트 창작 방법, 텍스트 창작 장치, 전자 기기 및 저장 매체 | |
CN109918680B (zh) | 实体识别方法、装置及计算机设备 | |
CN106649783B (zh) | 一种同义词挖掘方法和装置 | |
EP3648099B1 (en) | Voice recognition method, device, apparatus, and storage medium | |
WO2021051516A1 (zh) | 基于人工智能的古诗词生成方法、装置、设备及存储介质 | |
CN111090461B (zh) | 一种基于机器翻译模型的代码注释生成方法 | |
JP7169389B2 (ja) | 文書タイトルツリーの構築方法、装置、電子設備、記憶媒体、及びプログラム | |
CN101183281B (zh) | 一种输入法中候选词的相关词输入的方法及系统 | |
CN112487173B (zh) | 人机对话方法、设备和存储介质 | |
CN109657054A (zh) | 摘要生成方法、装置、服务器及存储介质 | |
CN107391549B (zh) | 基于人工智能的新闻召回方法、装置、设备及存储介质 | |
CN111259154B (zh) | 一种数据处理方法、装置、计算机设备及存储介质 | |
CN110147544B (zh) | 一种基于自然语言的指令生成方法、装置以及相关设备 | |
CN111382260A (zh) | 一种检索文本纠错方法、装置和存储介质 | |
CN109961041A (zh) | 一种视频识别方法、装置及存储介质 | |
CN110287282A (zh) | 基于树核计算的智能对话系统应答方法及智能对话系统 | |
CN111859953A (zh) | 训练数据的挖掘方法、装置、电子设备及存储介质 | |
US20230094730A1 (en) | Model training method and method for human-machine interaction | |
CN111813923A (zh) | 文本摘要方法、电子设备及存储介质 | |
CN113360001A (zh) | 输入文本的处理方法、装置、电子设备和存储介质 | |
CN112199502A (zh) | 基于情感的诗句生成方法及装置、电子设备和存储介质 | |
CN114399772B (zh) | 样本生成、模型训练和轨迹识别方法、装置、设备和介质 | |
CN113807106B (zh) | 翻译模型的训练方法、装置、电子设备及存储介质 | |
CN111428487B (zh) | 模型训练方法、歌词生成方法、装置、电子设备及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |