一种识别搜索需求的方法和装置的制作方法

文档序号:6433551阅读:177来源:国知局
专利名称:一种识别搜索需求的方法和装置的制作方法
一种识别搜索需求的方法和装置
技术领域
本发明涉及计算机技术领域,特别涉及一种识别搜索需求的方法和装置。
背景技术
在搜索技术中,搜索引擎为了能够向用户返回准确的搜索结果,需要对用户搜索请求(query)进行需求识别,从而能够根据识别出的需求返回相应数据资源的搜索结果,或者根据识别出的需求对搜索结果进行相应形式的展现。用户表达的某一类query通常符合某种模式,在现有的搜索需求识别技术中,通常将具有相同需求的query归纳起来形成一种或多种模板的形式,预先建立模板与搜索需求的对应关系。接收到用户query后,首先将用户query与词典进行匹配,根据词典的匹配结果确定出用户query中各词语的属性,利用确定的各词语的属性与模板逐一进行匹配, 将匹配的模板对应的搜索需求识别为用户query的搜索需求。然而,在现有的搜索需求中,在匹配过程中需要逐一与数据库中的词典和各模板进行匹配,而通常数据库中的词典和模板的数量很大,这就会造成识别用户query的搜索需求的效率很低,每天海量的搜索会对搜索引擎的性能带来很大的计算压力。

发明内容有鉴于此,本发明提供了一种识别搜索需求的方法和装置,以便于提高识别搜索需求的效率,降低搜索对搜索引擎的性能所带来的压力。具体技术方案如下—种识别搜索需求的方法,在数据库中分别以特里Trie树的形式存储词典和需求识别模板,分别得到词典Trie树和模板Trie树;所述方法包括接收到用户搜索请求query后,结合所述词典Trie树和模板Trie树对所述用户query进行匹配,确定匹配到的模板所对应的需求类型。其中,所述词典Trie树中根节点指示初始状态,叶节点和部分中间节点指示匹配到的词语属性,节点与节点之间的转移条件为字符;所述模板Trie树中根节点指示初始状态,叶节点指示模板匹配成功,节点和节点之间的转移条件包括具体词语、词语属性、通配符或函数。具体地,在数据库中以Trie树的形式存储词典得到词典Trie树包括Al、在数据库中建立词典Trie树的根节点,该根节点指示初始状态;A2、从所述词典中获取一个尚未添加到词典Trie树中的词语,读取当前获取的词语中的第一个字符,将词典Trie树的根节点作为当前添加位置;A3、判断当前读取到的字符是否已经存在于从当前添加位置开始的转移条件,如果是,执行步骤A4 ;否则,执行步骤A6 ;A4、在词典Trie树中,将当前读取到的字符所存在的转移条件对应的下一级节点作为当前添加位置;
A5、判断当前读取到的词语是否存在下一个字符,如果是,读取当前获取的词语的 下一个字符,转至步骤A3 ;否则,执行步骤A9 ;
A6、将当前读取到的字符添加为从当前添加位置开始的一个转移条件;
A7、判断当前获取的词语中是否存在下一个字符,如果是,执行步骤AS ;否则,将 当前获取的词语的属性添加到步骤A6所添加转移条件对应的下一级节点中,执行步骤A9 ;
AS、将步骤A6所添加转移条件对应的下一级节点作为当前添加位置,读取当前获 取的词语中的下一个字符,转至步骤A3 ;
A9、结束当前获取的词语的添加过程,如果所述词典中存在尚未添加到词典Trie 树中的词语,则转至步骤A2 ;否则,得到词典Trie树。
具体地,在数据库中以Trie树的形式存储模板得到模板Trie树包括
B1、在数据库中建立模板Trie树的根节点,该根节点指示初始状态;
B2、获取一个尚未添加到模板Trie树中的模板,读取当前获取的模板中第一个模 板槽的内容,将模板Trie树的根节点作为当前添加位置;
B3、判断当前读取到的模板槽的内容是否已经存在于当前添加位置开始的转移条 件,如果是,执行步骤B4 ;否则执行步骤B7 ;
B4、在模板Trie树中,将当前读取到的模板槽的内容所在的转移条件对应的下一 级节点作为当前添加位置;
B5、判断当前读取的模板槽是否存在下一个模板槽,如果是,读取下一个模板槽的 内容,转至步骤B3 ;否则,执行步骤B6 ;
B6、在当前添加位置中添加模板匹配成功的指示,执行步骤B8 ;
B7、将当前读取的模板槽的内容添加为从当前添加位置开始的一个转移条件,将 该转移条件对应的下一级节点作为当前添加位置,转至步骤B5 ;
B8、结束当前获取的模板的添加过程,如果存在尚未添加到模板Trie树的模板, 则转至步骤B2 ;否则,得到模板Trie树。
更进一步地,在所述步骤B6中还可以包括在当前添加位置中添加当前获取的模 板所对应需求类型信息的出口,或者添加当前获取的模板所对应的需求类型信息。
其中,结合所述词典Trie树和模板Trie树对所述用户query进行匹配,确定匹配 到的模板所对应的需求类型具体包括
Cl、从所述用户query的第一个字符开始与所述词典Trie树进行匹配,记录每一 轮词典Trie树匹配到的各项内容得到所述用户query的各种词全切分结果,所述词全切分 结果包括词语以及词语的属性,且每一种词全切分结果中的词语构成所述用户query ;
C2、逐一针对每一种词全切分结果分别在所述模板Trie树上进行匹配,确定匹配 到的模板所对应的需求类型。
具体地,所述步骤Cl可以包括
Cl1、接收到所述用户query后,词典指针指向所述用户query的第一个字符;
C12、将词典Trie树的根节点作为当前匹配位置;
C13、判断当前读取的字符是否匹配到从当前匹配位置开始的转移条件,如果是, 执行步骤C14 ;否则,执行步骤C17 ;
C14、确定匹配到的转移条件对应的下一级节点,判断当前确定的节点是否指示词语属性,如果是,执行步骤C15 ;否则,执行步骤C16 ;C15、获取并记录当前确定的节点指示的词语属性和匹配到的字符构成的词语;C16 ;判断当前读取的字符在所述用户query中是否存在下一个字符,如果是,读取下一个字符转至所述步骤C13 ;否则结束步骤Cl ;C17、确定当前词典指针位置时记录的词语中的最短词语,判断该最短词语在用户query中是否存在下一个字符,如果是,将词典指针指向该最短词语在用户query中的下一个字符,读取词典指针指向的字符,转至步骤C12。具体地,在所述步骤C2中针对每一种词全切分结果分别执行以下步骤C21、将模板指针指向所述用户query的第一个字符,将模板Trie树的根节点作为当前匹配到的节点;C22、确定当前词全切分结果中以当前模板指针所指向的字符开始的词语;C23、判断当前读取的词语或该词语的属性是否匹配到模板Trie树中从当前匹配到的节点开始的转移条件,如果是,执行步骤C24;否则,结束对当前词全切分结果的模板匹配;C24、确定匹配到的转移条件对应的下一级节点,判断当前确定的节点是否指示模板匹配成功,如果是,执行步骤C25 ;否则,执行步骤C26 ;C25、获取当前确定的节点指示的搜索需求,结束步骤C2 ;C26、判断当前读取的词语在所述用户query中是否存在下一个字符,如果是,执行步骤C27 ;否则,结束步骤C2 ;C27、将模板指针指向当前读取的词语在所述用户query中的下一个字符,转至步骤 C22。另外,结合所述词典Trie树和模板Trie树对所述用户query进行匹配,确定匹配到的模板所对应的需求类型具体包括D1、将词典指针指向用户query的第一个字符;D2、从词典指针指向的字符开始与所述词典Trie树进行匹配;D3、一轮词典Trie树匹配结束后,将本轮词典Trie树匹配到的各项内容从上一轮模板Trie树匹配结束时匹配到的位置开始进行匹配,所述各项内容包括词语以及词语的属性,本轮模板Trie树匹配结束后,将词典指针指向本轮模板Trie树匹配所使用词语在用户query中的下一个字符,转至步骤D2开始下一轮词典Trie树的匹配,直至匹配到模板或者模板Trie树匹配失败;确定匹配到的模板所对应的需求类型。所述步骤D2具体包括D21、将词典Trie树的根节点作为当前匹配位置;D22、读取当前词典指针指向的字符,判断当前读取的字符是否匹配到从当前匹配位置开始的转移条件,如果否,本轮词典Trie树匹配结束,记录本轮词典Trie树匹配到的各项内容;如果是,执行步骤D23 ;D23、确定匹配到的转移条件对应的下一级节点,判断当前确定的节点是否指示词语属性,如果是,执行步骤D24 ;否则,执行步骤D25 ;D24、获取并记录当前确定的节点指示的词语属性以及匹配到的字符构成的词语,执行步骤D25 ;
D25、判断当前读取的字符在所述用户query中是否存在下一个字符,如果是,读 取下一个字符,将当前确定的节点作为当前匹配位置,转至所述步骤D22 ;否则,转至所述 步骤D3。
在步骤D3中,分别读取本轮词典Trie树匹配到的各项内容,并分别针对读取的各 项内容执行以下匹配过程
D31、判断当前读取的词语或该词语的属性是否匹配到模板Trie树中从当前匹配 到的节点开始的转移条件,所述当前匹配到的节点的初始位置为所述模板Trie树的根节 点;如果是,执行步骤D32 ;否则,结束针对当前读取的内容的模板Trie树匹配;
D32、确定匹配到的转移条件对应的下一级节点,判断当前确定的节点是否指示模 板匹配成功,如果是,执行步骤D33 ;否则,将当前确定的节点作为当前匹配位置,词典指针 指向当前读取的内容中词语在用户query中的下一个字符,转至所述步骤D2 ;
D33、确定匹配到的模板对应的搜索需求,结束针对当前读取的内容的模板Trie 树匹配。
具体地,判断当前读取的词语或该词语的属性是否匹配到模板Trie树中从当前 匹配到的节点开始的转移条件包括
如果从当前匹配到的节点开始的转移条件是词语属性,则如果当前读取的词语的 属性与转移条件中的词语属性一致,则确定两者匹配;或者,
如果从当前匹配到的节点开始的转移条件是具体词语,则如果当前读取的词语与 转移条件中的具体词语一致,则确定两者匹配;或者,
如果从当前匹配到的节点开始的转移条件是通配符,则确认两者匹配,从当前读 取的词语开始在query中截取通配符所指示长度,将截取的内容作为当前读取的词语;或 者,
如果从当前匹配到的节点开始的转移条件是函数,则调用所述函数从读取的词语 开始在所述用户query中进行识别,如果识别结果满足预设的函数要求,则确认两者匹配, 将满足预设的函数要求的识别结果所对应的词语作为当前读取的词语。
一种识别搜索需求的装置,在数据库中分别以特里Trie树的形式存储词典和需 求识别模板,分别得到词典Trie树和模板Trie树;该装置包括
请求接收单元,用于接收用户搜索请求query ;
需求匹配单元,用于结合所述词典Trie树和模板Trie树对所述用户query进行 匹配,确定匹配到的模板所对应的需求类型。
其中,所述词典Trie树中根节点指示初始状态,叶节点和部分中间节点指示匹配 到的词语属性,节点与节点之间的转移条件为字符;
所述模板Trie树中根节点指示初始状态,叶节点指示模板匹配成功,节点和节点 之间的转移条件包括具体词语、词语属性、通配符或函数。
更进一步地,该装置还可以包括词典树建立单元,用于执行以下操作
Al、在数据库中建立词典Trie树的根节点,该根节点指示初始状态;
A2、从所述词典中获取一个尚未添加到词典Trie树中的词语,读取当前获取的词 语中的第一个字符,将词典Trie树的根节点作为当前添加位置;
A3、判断当前读取到的字符是否已经存在于从当前添加位置开始的转移条件,如果是,执行操作A4 ;否则,执行操作A6 ;A4、在词典Trie树中,将当前读取到的字符所存在的转移条件对应的下一级节点作为当前添加位置;A5、判断当前读取到的词语是否存在下一个字符,如果是,读取当前获取的词语的下一个字符,转至操作A3 ;否则,执行操作A9 ;A6、将当前读取到的字符添加为从当前添加位置开始的一个转移条件;A7、判断当前获取的词语中是否存在下一个字符,如果是,执行操作AS ;否则,将当前获取的词语的属性添加到操作A6所添加转移条件对应的下一级节点中,执行操作A9 ;A8、将操作A6所添加转移条件对应的下一级节点作为当前添加位置,读取当前获取的词语中的下一个字符,转至操作A3 ;A9、结束当前获取的词语的添加过程,如果所述词典中存在尚未添加到词典Trie树中的词语,则转至操作A2 ;否则,得到词典Trie树。该装置还包括模板树建立单元,用于执行以下操作B1、在数据库中建立模板Trie树的根节点,该根节点指示初始状态;B2、获取一个尚未添加到模板Trie树中的模板,读取当前获取的模板中第一个模板槽的内容,将模板Trie树的根节点作为当前添加位置;B3、判断当前读取到的模板槽的内容是否已经存在于当前添加位置开始的转移条件,如果是,执行操作B4 ;否则执行操作B7 ;B4、在模板Trie树中,将当前读取到的模板槽的内容所在的转移条件对应的下一级节点作为当前添加位置;B5、判断当前读取的模板槽是否存在下一个模板槽,如果是,读取下一个模板槽的内容,转至操作B3 ;否则,执行操作B6 ;B6、在当前添加位置中添加模板匹配成功的指示,执行操作B8 ;B7、将当前读取的模板槽的内容添加为从当前添加位置开始的一个转移条件,将该转移条件对应的下一级节点作为当前添加位置,转至操作B5 ;B8、结束当前获取的模板的添加过程,如果存在尚未添加到模板Trie树的模板,则转至操作B2 ;否则,得到模板Trie树。更进一步地,所述模板树建立单元在执行所述操作B6时,还用于在当前添加位置中添加当前获取的模板所对应需求类型信息的出口,或者添加当前获取的模板所对应的需求类型信息。其中,所述需求匹配单元具体包括第一词典树匹配模块和第一模板树匹配模块;所述第一词典树匹配模块,用于从所述用户query的第一个字符开始与所述词典Trie树进行匹配,记录每一轮词典Trie树匹配到的各项内容得到所述用户query的各种词全切分结果,所述词全切分结果包括词语以及词语的属性,且每一种词全切分结果中的词语构成所述用户query ;所述第一模板树匹配模块,用于逐一针对每一种词全切分结果分别在所述模板Trie树上进行匹配,确定匹配到的模板所对应的需求类型。所述第一词典树匹配模块具体执行以下操作
Cl1、接收到所述用户query后,词典指针指向所述用户query的第一个字符;
C12、将词典Trie树的根节点作为当前匹配位置;
C13、判断当前读取的字符是否匹配到从当前匹配位置开始的转移条件,如果是, 执行操作C14 ;否则,执行操作C17 ;
C14、确定匹配到的转移条件对应的下一级节点,判断当前确定的节点是否指示词 语属性,如果是,执行操作C15 ;否则,执行操作C16 ;
C15、获取并记录当前确定的节点指示的词语属性和匹配到的字符构成的词语;
C16 ;判断当前读取的字符在所述用户query中是否存在下一个字符,如果是,读 取下一个字符转至所述操作C13 ;否则结束操作;
C17、确定当前词典指针位置时记录的词语中的最短词语,判断该最短词语在用户 query中是否存在下一个字符,如果是,将词典指针指向该最短词语在用户query中的下一 个字符,读取词典指针指向的字符,转至操作C12。
所述第一模板树匹配模块具体执行以下操作
C21、将模板指针指向所述用户query的第一个字符,将模板Trie树的根节点作为 当前匹配到的节点;
C22、确定当前词全切分结果中以当前模板指针所指向的字符开始的词语;
C23、判断当前读取的词语或该词语的属性是否匹配到模板Trie树中从当前匹配 到的节点开始的转移条件,如果是,执行操作C24 ;否则,结束对当前词全切分结果的模板 匹配;
C24、确定匹配到的转移条件对应的下一级节点,判断当前确定的节点是否指示模 板匹配成功,如果是,执行操作C25 ;否则,执行操作C26 ;
C25、获取当前确定的节点指示的搜索需求,结束操作;
C26、判断当前读取的词语在所述用户query中是否存在下一个字符,如果是,执 行操作C27;否则,结束操作;
C27、将模板指针指向当前读取的词语在所述用户query中的下一个字符,转至操 作 C22。
具体地,所述需求匹配单元可以包括词典指针设置模块、第二词典树匹配模块和 第二模板树匹配模块;
所述词典指针设置模块,用于将词典指针指向用户query的第一个字符;
所述第二词典树匹配模块,用于从词典指针指向的字符开始与所述词典Trie树 进行匹配;
所述第二模板树匹配模块,用于在一轮词典Trie树匹配结束后,将所述第二词典 树匹配模块本轮在词典Trie树匹配到的各项内容从上一轮模板Trie树匹配结束时匹配到 的位置开始进行匹配,所述各项内容包括词语以及词语的属性,本轮模板Trie树匹配结束 后,触发所述词典指针设置模块将词典指针指向本轮模板Trie树匹配所使用词语在用户 query中的下一个字符,并触发所述第二词典树匹配模块开始下一轮词典Trie树的匹配, 直至匹配到模板或者模板Trie树匹配失败;确定匹配到的模板所对应的需求类型。
其中,所述第二词典树匹配模块具体执行以下操作
D21、将词典Trie树的根节点作为当前匹配位置;
D22、读取当前词典指针指向的字符,判断当前读取的字符是否匹配到从当前匹配位置开始的转移条件,如果否,本轮词典Trie树匹配结束,记录本轮词典Trie树匹配到的各项内容;如果是,执行操作D23 ;D23、确定匹配到的转移条件对应的下一级节点,判断当前确定的节点是否指示词语属性,如果是,执行操作D24 ;否则,执行操作D25 ;D24、获取并记录当前确定的节点指示的词语属性以及匹配到的字符构成的词语,执行操作D25 ;D25、判断当前读取的字符在所述用户query中是否存在下一个字符,如果是,读取下一个字符,将当前确定的节点作为当前匹配位置,转至所述操作D22 ;否则,本轮词典Trie树匹配结束。 具体地,所述第二模板树匹配模块分别读取所述第二词典树匹配模块本轮词典Tire树匹配到的各项内容,并分别针对读取的各项内容执行以下匹配操作D31、判断当前读取的词语或该词语的属性是否匹配到模板Trie树中从当前匹配到的节点开始的转移条件,所述当前匹配到的节点的初始位置为所述模板Trie树的根节点;如果是,执行操作D32 ;否则,结束针对当前读取的内容的模板Trie树匹配;D32、确定匹配到的转移条件对应的下一级节点,判断当前确定的节点是否指示模板匹配成功,如果是,执行操作D33 ;否则,将当前确定的节点作为当前匹配位置,词典指针指向当前读取的内容中词语在用户query中的下一个字符,转至所述操作D2 ;D33、确定匹配到的模板对应的搜索需求,结束针对当前读取的内容的模板Trie树匹配。判断当前读取的词语或该词语的属性是否匹配到模板Trie树中从当前匹配到的节点开始的转移条件包括如果从当前匹配到的节点开始的转移条件是词语属性,则如果当前读取的词语的属性与转移条件中的词语属性一致,则确定两者匹配;或者,如果从当前匹配到的节点开始的转移条件是具体词语,则如果当前读取的词语与转移条件中的具体词语一致,则确定两者匹配;或者,如果从当前匹配到的节点开始的转移条件是通配符,则确认两者匹配,从当前读取的词语开始在query中截取通配符所指示长度,将截取的内容作为当前读取的词语;或者,如果从当前匹配到的节点开始的转移条件是函数,则调用所述函数从读取的词语开始在所述用户query中进行识别,如果识别结果满足预设的函数要求,则确认两者匹配,将满足预设的函数要求的识别结果所对应的词语作为当前读取的词语。由以上技术方案可以看出,本发明通过Trie树的形式存储词典和需求识别模板,使得接收到用户query后,能够通过结合匹配词典Trie树和模板Trie树的方式确定匹配到的模板所对应的需求类型,相比较逐一与数据库中的词典和各模板进行匹配的方式,大大提高了识别搜索需求的效率,降低了搜索对搜索引擎的性能所带来的计算压力。

图1为本发明实施例一提供的建立词典Trie树的流程图2为本发明实施例一提供的词典Trie树的实例图;图3为本发明实施例二提供的建立模板Trie树的流程图;图4为本发明实施例二提供的模板Tire树的实例图;图5为本发明实施例三提供的一种确定需求类型的方法流程图;图6为本发明实施例四提供的另一种确定需求类型的方法流程图;图7为本发明实施例五提供的一种装置结构图;图8为本发明实施例五提供的另一种装置结构图。
具体实施方式为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对 本发明进行详细描述。本发明提供的方法主要包括在数据库中分别以特里(Trie)树的形式存储词典 和需求识别模板,分别得到词典Trie树和模板Trie树;接收到用户query后,利用词典 Trie树和模板Trie树对该用户query进行匹配,确定匹配到的模板所对应的需求类型。Trie树中包括层级结构的节点以及节点与节点之间的转移条件,其中,每一个节 点指示状态信息,根节点指示初始状态。在词典Trie树中,根节点指示初始状态,叶节点指示匹配到的词语属性。中间节 点指示中间状态,也可能指示匹配到的词语属性,节点与节点之间的转移条件为字符。在模板Trie树中,根节点指示初始状态,叶节点指示模板匹配成功,节点和节点 之间的转移条件包括词语属性、具体词语、通配符或函数。词语属性可以包括但不限于 词性、命名实体类型等。其中具体词语可以包括常用的实体词或者助词、虚词等可忽略词。首先通过实施例一和实施例二分别对词典Trie树的建立过程和模板Trie树的建 立过程进行描述。实施例一、图1为本发明实施例一提供的建立词典Trie树的流程图,如图1所示,包括以下 步骤步骤101 :建立词典Trie树的根节点,该根节点指示初始状态。在词典Trie树中,根节点仅是一个匹配的开始位置,因此指示的是初始状态。该 根节点的建立仅需要在初始读取词典中的第一个词语时执行。步骤102 :从词典中获取一个尚未添加到词典Trie树中的词语,读取当前获取的 词语中的第一个字符,将词典Trie树的根节点作为当前添加位置。步骤103 :判断当前读取到的字符是否已经存在于从当前添加位置开始的转移条 件,如果是,执行步骤104 ;否则,执行步骤106。步骤104 :在词典Trie树中,将当前读取到的字符所存在的转移条件对应的下一 级节点作为当前添加位置。步骤105 :判断当前获取到的词语中是否存在下一个字符,如果是,读取当前获取 的词语中的下一个字符,转至步骤103 ;否则,结束当前获取的词语的添加过程,则转至步 骤 102。实际上,在结束当前获取的词语的添加过程时,如果词典中存在尚未添加到词典Trie树中的词语,则转至步骤102 ;否则,结束建立词典Trie树的流程,得到词典Trie树。步骤106 :将当前读取到的字符添加为从当前添加位置开始的一个转移条件。步骤107 :判断当前获取的词语中是否存在下一个字符,如果是,执行步骤108 ;否贝U,将当前获取的词语的词语属性添加到步骤106所添加转移条件对应的下一级节点中,结束当前获取的词语的添加过程,转至步骤102。同样,实际上,在结束当前获取的词语的添加过程时,如果词典中存在尚未添加到词典Trie树中的词语,则转至步骤102 ;否则,结束建立词典Trie树的流程,得到词典Trie树。步骤108 :将步骤106所添加转移条件对应的下一级节点作为当前添加位置,读取当前获取的词语中的下一个字符,转至步骤103。举一个具体的实例,将词典中存在的“三江”、“三江口 ”和“三江县”三个词语添加到词典Trie树中,这三个词语在词典中的词语属性均为址名。如图2所示,建立词典Trie树的根节点(图2中的节点I)后,获取词语“三江”,首先读取字符“三”,假设从根节点开始的转移条件中并不存在“三”,则将“三”添加为从根节点开始的一个转移条件,将该转移条件对应的下一级节点(图2中的节点2)作为当前添加位置。继续读取下一个字符“江”,假设从节点2开始的转移条件中不存在“江”,则将“江”添加为从节点2开始的一个转移条件,在该转移条件对应的下一级节点(即图2中的节点3)中添加词语属性地名,词语“三江”的添加完毕。继续获取词语“三江口 ”,首先读取字符“三”,从根节点开始的转移条件中已经存在“三”,则将该转移条件对应的下一级节点(即图2中的节点2)作为当前添加位置。读取下一个字符“江”,从节点2开始的转移条件中已经包含字符“江”,则将该转移条件对应的下一级节点(即图2中的节点3)作为当前添加位置。读取下一个字符“ 口”,从节点3开始的转移条件中不存在字符“ 口 ”,将“ 口 ”添加为从节点3开始的转移条件,并在该转移条件对应的下一级节点(即图2中的节点4)中添加词语属性地名,至此,“三江口”的添加过程结束。“三江县”的添加过程与“三江口 ”类似,在此不再赘述,最终这三个词语在词典Trie树中的状况如图2所示。通过上述方法能够将词典中所有的词语均在一个词典Trie树中展现,所有词语均共用一个根节点。后续在利用词典Trie树进行词语匹配时,均从词典Trie树的根节点开始。至此实施例一所示流程结束。实施例二、图3为本发明实施例二提供的建立模板Trie树的流程图,该过程利用预先存在的各模板与需求类型信息之间的对应关系形成模板Trie树,如图3所示,包括以下步骤步骤301 :建立模板Trie树的根节点,该根节点指示初始状态。在模板Trie树中,根节点仅是一个匹配的开始位置,因此指示的是初始状态。该根节点的建立仅需要在初始读取模板中的第一个模板时执行。步骤302 :获取一个尚未添加到模板Trie树中的模板,读取当前获取的模板中第一个模板槽的内容,将模板Trie树的根节点作为当前添加位置。模板中各模板槽的内容可以包括但不限于词语属性、具体词语、通配符或者函数。在是通配符时,还可以同时指示通配符的长度。
步骤303 :判断当前读取到的模板槽的内容是否已经存在于从当前添加位置开始 的转移条件,如果是,执行步骤304 ;否则,执行步骤307。
步骤304 :在模板Trie树中,将当前读取到的模板槽的内容所在的转移条件对应 的下一级节点作为当前添加位置。
步骤305 :判断当前获取的模板槽是否存在下一个模板槽,如果是,读取下一个模 板槽的内容,转至步骤303 ;否则,执行步骤306。
步骤306 :在当前添加位置中添加模板匹配成功的指示,结束当前获取的模板的 添加过程,转至步骤302。
实际上,在结束当前获取的模板的添加过程后,如果存在尚未添加到模板Trie树 的模板,则转至步骤302 ;否则,结束模板Trie树的建立过程,得到模板Trie树。
步骤307 :将当前获取的模板槽的内容添加为从当前添加位置开始的一个转移条 件,将该转移条件对应的下一级节点作为当前添加位置,转至步骤305。
在上述的步骤306中,除了在当前添加位置中添加模板匹配成功的指示之外,还 可以进一步添加一个指向该模板所对应需求类型信息的出口,或者直接添加该模板所对应 需求类型信息。
举一个具体的实例,假设要将模板[地名][到][地名]、[机构名][到][机构 名]添加到Trie树中,这两个模板分别对应列车查询需求和地图线路查询需求。
如图4所示,建立模板Trie树的根节点(图4中的节点I)后,获取模板[地名] [到][地名],首先读取第一个模板槽的内容“地名”(是一个词语属性),假设从根节点开 始的转移条件中并不存在词语属性“地名”,则将“地名”添加为从根节点开始的一个转移条 件,将该转移条件对应的下一级节点(图4中的节点2)作为当前添加位置。继续读取下一 个模板槽的内容“到”,假设从节点2开始的转移条件中不存在具体的词语“到”,则将“到” 添加为从节点2开始的一个转移条件,将该转移条件对应的下一级节点(即图4中的节点 4)作为当前添加位置。继续读取下一个模板槽的内容“地名”,假设从节点4开始的转移条 件中不存在词语属性“地名”,则将“地名”添加为从节点4开始的一个转移条件,在该转移 条件的下一级节点(图4中的节点6)中指示模板匹配成功,且添加需求类型信息为列车 查询需求类型。
继续获取下一个模板[机构名][到][机构名],首先读取第一个模板槽的内容 “结构名”(是一个词语属性),假设从根节点开始的转移条件中并不存在词语属性“结构 名”,则将“结构名”添加为从根节点开始的一个转移条件,将该转移条件对应的下一级节点 (图4中的节点3)作为当前添加位置。继续读取下一个模板槽的内容“到”,假设从节点3 开始的转移条件中不存在具体的词语“到”,则将“到”添加为从节点3开始的一个转移条 件,将该转移条件对应的下一级节点(即图4中的节点5)作为当前添加位置。继续读取下 一个模板槽的内容“机构名”,假设从节点5开始的转移条件中不存在词语属性“机构名”, 则将“机构名”添加为从节点5开始的一个转移条件,在该转移条件的下一级节点(图4中 的节点7)中指示模板匹配成功,且添加需求类型信息为地图线路查询需求类型。
至此实施例二的过程结束。
在利用词典Trie树和模板Trie树对用户query进行匹配时,实际上是利用词典Trie树对用户query进行词全切分处理,将用户query进行词全切分处理的结果与模板Trie树进行匹配,从而得到与用户query匹配的模板,并确定匹配到的模板对应的需求类型。其中,利用词典Trie树的匹配和利用模板Trie树的匹配可以先后进行,即先利用词典Trie树对用户query进行词全切分处理完毕后,再进行模板Trie树的匹配;也可以交替进行,即每执行一轮词典Trie树的匹配时,就将本轮切分出的词语在模板Trie树中进行下一个节点的匹配,匹配到模板Trie树的下一个节点后,再回到词典Trie树进行下一轮的匹配。下面通过实施例三和实施例四对上述两种匹配方式进行详细描述。实施例三、在该实施例中采用先对用户query进行词典Trie树的匹配进行词全切分处理完毕后,再利用模板Trie树进行匹配确定需求类型的方式。图5为本发明实施例三提供的一种确定需求类型的方法流程图,如图5所示,该方法可以包括以下步骤步骤501 :接收用户query,词典指针指向用户query的第一个字符,读取当前词典指针指向的字符。步骤502 :将词典Trie树的根节点作为当前匹配位置。步骤503 :判断当前读取的字符是否匹配到从当前匹配位置开始的转移条件,如果否,则执行步骤507 ;如果是,执行步骤504。步骤504 :确定匹配到的转移条件对应的下一级节点,判断当前确定的节点是否指示词语属性,如果是,执行步骤505 ;否则,执行步骤506。步骤505 :获取并记录当前确定的节点指示的词语属性和匹配到的字符构成的词语,执行步骤506。步骤506 :判断当前读取的字符在用户query中是否存在下一个字符,如果是,读取下一个字符,将当前确定的节点作为当前匹配位置,转至步骤503 ;否则,执行步骤508。步骤507 :确定当前词典指针位置时记录的词语中的最短词语,判断该最短词语在用户query中是否存在下一个字符,如果是,将词典指针指向该最短词语在用户query中的下一个字符,读取词典指针指向的字符,转至步骤502 ;否则,执行步骤508。步骤508 :词典Trie树的匹配过程结束,利用从该用户query中记录的词语及其属性得到用户query的各种词全切分结果,各种词全切分结果中的词语构成整个用户queryο逐一针对各种词全切分结果分别执行以下模板Trie树的匹配过程。步骤509 :将模板指针指向用户query的第一个字符,将模板Trie树的根节点作为当前匹配到的节点。步骤510 :确定当前词全切分结果中以当前模板指针所指向的字符开始的词语。步骤511 :判断当前读取的词语或其属性是否匹配到模板Trie树中从当前匹配到的节点开始的转移条件,如果是,执行步骤512;否则,结束对当前词全切分结果的模板匹配流程。在本步骤中,判断当前读取的内容是否匹配到模板Tire树中从当前匹配到的节点开始的转移条件时,可以存在以下几种情况如果从当前匹配到的节点开始的转移条件是词语属性,则如果当前读取的内容中词语属性与转移条件中的词语属性一致,则确定两者匹配。
如果从当前匹配到的节点开始的转移条件是具体词语,则如果当前读取的内容中词语与转移条件中的具体词语一致,则确定两者匹配。
如果从当前匹配到的节点开始的转移条件是通配符,则确认两者匹配,在这种情况下,可以从当前读取的词语开始在query中截取通配符所指示长度,将截取的内容作为当前读取的词语后,再执行步骤512。
假设用户query为“从三江口到三江的火车”,如果当前读取的词语“三江口”,转移条件是指示长度为4个词语的通配符时,直接确认两者匹配,但会将“三江口到”作为当前读取的词语,下一步开始从“三江”对模板Trie树进行匹配。
如果从当前匹配到的节点开始的转移条件是函数,则调用该函数从读取的词语开始在query中进行识别,如果识别结果满足预设的函数要求,则确定两者匹配,将满足预设的函数要求的识别结果所对应的词语作为当前读取的词语后,再执行步骤512。
以识别数字的函数为转移条件为例,如果用户query为“ 13100000000的归属地”, 如果当前读取的词语从数字“ I ”开始,那么调用该函数从“ I ”开始识别,识别出满足数字的函数要求,返回数字长度作为识别结果,识别完成后,13100000000作为当前读取的词语,接下来从“的”开始匹配。
步骤512 :确定匹配到的转移条件对应的下一级节点,判断当前确定的节点是否指示模板匹配成功,如果是,执行步骤513 ;否则,执行步骤514。
步骤513 :获取当前确定的节点指示的搜索需求,结束流程。
步骤514 :判断当前读取的词语在用户query中是否存在下一个字符,如果是,执行步骤515;否则,结束流程。
步骤515 :将模板指针指向当前读取的词语在用户query中的下一个字符,转至步骤 510。
举一个具体的实例,假设接收到的用户query为“三江口到三江的火车”。
首先利用图2所示的词典Trie树进行匹配,词典指针指向用户query的第一个字符,g卩“三”,读取“三”。从根节点I开始,按顺序读取用户query中未匹配过的字符,即从 “三”开始,能够匹配到从根节点I开始的转移条件,到节点2,在读取“江”,能够匹配到从节点2开始的转移条件,到节点3。由于节点3具有词语属性,则获取并记录“三江”及其对应的词语属性(即地名)。继续读取“ 口 ”,能够匹配到从节点3开始的转移条件“ 口 ”,到节点 4,由于节点4具有词语属性,则获取并记录“三江口”及其对应的词语属性(即地名)。
在当前词典指针位置时记录的词语中最短词语为“三江”,因此,将词典指针指向 “三江”在用户query中的下 一个字符,即“ 口 ”,重复进行上述过程与词典Trie树进行匹配后,将用户query进行分词后得到的各种分词词全切分的结果为三江(地名)、口(名词)、到(动词)、三江(地名)、的(助词)、火车(名词);三江口(地名)、到(动词)、三江(地名)、的(助词)、火车(名词)口(名词)、到(动词)、三江(地名)、的(助词)、 火车(名词)。
对各种全切分结果与模板Trie树进行匹配,首先针对第一种词全切分结果将模板指针指向用户query的第一个字符“三”,确定词全切分结果中以当前模板指针所指向的字符开始的词语“三江”,首先对“三江”从根节点即节点I开始匹配转移条件,“三江”匹配到转移条件后进入节点2,然后将模板指针指向“三江”的下一个字符“ 口 ”,确定词全切分结果中以“口”为首字符的词语及其属性,与以节点2开始的转移条件开始匹配,匹配失败。针对第二种词全切分结果与模板Trie树进行匹配,对“三江口 ”从根节点即节点I开始匹配转移条件,匹配到后转向节点2,然后将模板指针指向“三江口”的下一个字符“到”,确定词全切分结果中以“到”及其属性,即将“到”及其属性与从节点2的转移条件开始匹配,转至节点4。将模板指针指向“到”的下一个字符“三”,确定以该字符为首的词语“三江”,匹配从节点4开始的转移条件,匹配到后进入节点6,模板匹配成功,确定需求类型为列车查询。实施例四、在该实施例中采用词典Trie树与模板Trie树交替匹配确定需求类型的方式。图6为本发明实施例四提供的另一种确定需求类型的方法流程图,如图6所示,该方法可以包括以下步骤步骤601 :接收到用户query后,将模板Trie树的根节点作为当前匹配到的节点,词典指针指向用户query的第一个字符。步骤602 :将词典Trie树的根节点作为当前匹配位置。步骤603 :读取当前词典指针指向的字符,判断当前读取的字符是否匹配到从当前匹配位置开始的转移条件,如果否,则执行步骤607 ;如果是,执行步骤604。步骤604 :确定匹配到的转移条件对应的下一级节点,判断当前确定的节点是否指示词语属性,如果是,执行步骤605 ;否则,执行步骤606。步骤605 :获取并记录当前确定的节点指示的词语属性以及匹配到的字符构成的词语,执行步骤606。步骤606 :判断当前读取的字符在用户query中是否存在下一个字符,如果是,读取下一个字符,将当前确定的节点作为当前匹配位置,转至步骤603 ;否则,转至步骤608。步骤607 :退出本次词典Trie树的匹配,获取本次通过词典Trie树记录的各项内容,其中各项内容包括词语及其词语属性,分别读取记录的各项内容并分别针对读取的各项内容执行以下模板树的匹配过程,即开始执行步骤608。步骤608 :转入模板Trie树的匹配,判断当前读取的词语及其词语属性是否匹配到模板Trie树中从当前匹配到的节点开始的转移条件,如果是,执行步骤609 ;如果否,结束针对当前读取的词语的模板Trie树匹配。在本步骤中,在判断最新获取到的词语或者词语属性是否匹配到模板Trie树中从当前匹配到的节点开始的转移条件时,可以存在以下几种情况如果从当前匹配到的节点开始的转移条件是词语属性,则如果当前获取到的词语属性与转移条件中的词语属性一致,则确定两者匹配。如果从当前匹配到的节点开始的转移条件是具体词语,则如果当前获取到的词语与转移条件中的具体词语一致,则确定两者匹配。如果从当前匹配到的节点开始的转移条件是通配符,则直接确认两者匹配,在这种情况下,可以从当前读取的词语开始在query中截取通配符所指示长度,将截取的内容作为当前读取的词语后,再执行步骤609。同样假设用户query为“从三江口到三江的火车”,如果当前读取的词语“三江口 ”,转移条件是指示长度为4个词语的通配符时,直接确认两者匹配,但会将“三江口到”作 为当前读取的词语,如果模板Trie树中的下一级节点没有指示模板匹配成功的话,下一步 从“三江口到”之后的“三”开始转至词典Trie树的匹配。
如果从当前匹配到的节点开始的转移条件是函数,则调用该函数从读取的词语开 始在query中进行识别,如果识别结果满足预设的函数要求,则确定两者匹配,将满足预设 的函数要求的识别结果所对应的词语作为当前读取的词语后,再执行步骤609。
步骤609 :确定匹配到的转移条件对应的下一级节点,判断当前确定的节点是否 指示模板匹配成功,如果是,执行步骤610 ;否则,将当前确定的节点作为当前匹配位置,词 典指针指向当前读取的词语在用户query中的下一个字符,转至步骤602。
步骤610 :确定匹配到的模板对应的搜索需求,结束针对当前读取的词语的模板 Trie树匹配。
仍以接收到的用户query为“三江口到三江的火车”为例,首先进入模板Trie树 的根节点。进入词典Trie树的根节点,首先利用图2所示的词典Trie树进行匹配,从根节 点I开始,按顺序读取用户query中未匹配过的字符,即从“三”开始,能够匹配到从根节点 I开始的转移条件,到节点2,在读取“江”,能够匹配到从节点2开始的转移条件,到节点3。 由于节点3具有词语属性,则获取并记录“三江”及其对应的词语属性(即地名)。继续读 取“ 口 ”,能够匹配到从节点3开始的转移条件“ 口 ”,到节点4,由于节点4具有词语属性,则 获取并记录“三江口”及其对应的词语属性(即地名)。“到”不能继续匹配词典Trie树, 退出词典Trie树的匹配流程,进入模板Trie树。
由于本次词典Trie树的匹配得到了两项内容“三江(地名)”和“三江口(地 名)”,因此,因此分别针对“三江(地名)”和“三江口(地名)”进入模板Trie树的匹配, 即存在两个分支的模板Trie树的匹配过程。
第一个分支的模板Trie树的匹配过程,将“三江(地名)”与从模板Trie树的根 节点开始的转移条件开始匹配,进入节点2,由于节点2没有指示模板匹配成功,将节点2作 为当前匹配位置后,将词典指针指向当前读取的词语在用户query中的下一个字符,回到 词典Trie树的根节点。读取当前词典指针指向的字符,即“口”,判断当前读取的字符是否 匹配到从词典Trie树根节点开始的转移条件,匹配出“ 口 ”后,退出本次词典Trie树的匹 配,由于本次通过词典Trie树记录的内容为“ 口(名词)”,转入模板Trie树的匹配后,无 法匹配到模板,结束该分支的匹配。
第二个分支的模板Trie树匹配过程,将“三江口(地名)”与从模板Trie树的根 节点开始的转移条件开始匹配,进入节点2,由于节点2没有指示模板匹配成功,将节点2作 为当前匹配位置后,将词典指针指向当前读取的词语在用户query中的下一个字符,回到 词典Trie树的根节点。读取当前词典指针指向的字符,即“到”,判断当前读取的字符是否 匹配到从词典Trie树根节点开始的转移条件,匹配出“到”后,退出本次词典Trie树的匹 配,由于本次通过词典Trie树记录的内容为“到”,转入模板Trie树,由于当前匹配到的节 点为节点2,“到”匹配到从节点2开始的转移条件,进入节点4。将节点4作为当前匹配到 的节点,将词典指针指向当前读取的词语在用户query中的下一个字符即“三”,再回到词 典Trie树的根节点。通过词典Trie树的匹配能够匹配出“三江(地名)”,转入模板Trie 树,能够匹配到从节点4开始的转移条件,进入节点6。由于节点6指示模板匹配成功,确定该用户query的需求类型为列车查询。以上是对本发明所提供方法进行的描述,下面结合实施例五对本发明所提供的识别搜索需求的装置进行详细描述。实施例五、图7为本发明实施例五提供的装置结构图,预先在数据库中分别以Trie树的形式存储词典和需求识别模板,分别得到词典Trie树和模板Trie树;如图7所示,该装置可以包括请求接收单元710和需求匹配单元720。请求接收单元710接收用户query。需求匹配单元720结合词典Trie树和模板Trie树对用户query进行匹配,确定匹配到的模板所对应的需求类型。其中,词典Trie树中根节点指示初始状态,叶节点和部分中间节点指示匹配到的词语属性,节点与节点之间的转移条件为字符。模板Trie树中根节点指示初始状态,叶节点指示模板匹配成功,节点和节点之间的转移条件可以包括但不限于具体词语、词语属性、通配符或函数。为了实现词典Trie树的建立,该装置还可以包括词典树建立单元730,用于执行以下操作操作Al、在数据库中建立词典Trie树的根节点,该根节点指示初始状态。操作A2、从词典中获取一个尚未添加到词典Trie树中的词语,读取当前获取的词语中的第一个字符,将词典Trie树的根节点作为当前添加位置。操作A3、判断当前读取到的字符是否已经存在于从当前添加位置开始的转移条件,如果是,执行操作A4 ;否则,执行操作A6。操作A4、在词典Trie树中,将当前读取到的字符所存在的转移条件对应的下一级节点作为当前添加位置。操作A5、判断当前读取到的词语是否存在下一个字符,如果是,读取当前获取的词语的下一个字符,转至操作A3 ;否则,执行操作A9。操作A6、将当前读取到的字符添加为从当前添加位置开始的一个转移条件。操作A7、判断当前获取的词语中是否存在下一个字符,如果是,执行操作AS;否贝U,将当前获取的词语的属性添加到操作A6所添加转移条件对应的下一级节点中,执行操作A9。操作AS、将操作A6所添加转移条件对应的下一级节点作为当前添加位置,读取当前获取的词语中的下一个字符,转至操作A3。操作A9、结束当前获取的词语的添加过程,如果词典中存在尚未添加到词典Trie树中的词语,则转至操作A2 ;否则,得到词典Trie树。为了实现模板树的建立,该装置还可以包括模板树建立单元740,用于执行以下操作操作B1、在数据库中建立模板Trie树的根节点,该根节点指示初始状态。操作B2、获取一个尚未添加到模板Trie树中的模板,读取当前获取的模板中第一个模板槽的内容,将模板Trie树的根节点作为当前添加位置。操作B3、判断当前读取到的模板槽的内容是否已经存在于当前添加位置开始的转移条件,如果是,执行操作B4 ;否则执行操作B7。
操作B4、在模板Trie树中,将当前读取到的模板槽的内容所在的转移条件对应的 下一级节点作为当前添加位置。
操作B5、判断当前读取的模板槽是否存在下一个模板槽,如果是,读取下一个模板 槽的内容,转至操作B3 ;否则,执行操作B6。
操作B6、在当前添加位置中添加模板匹配成功的指示,执行操作B8。
操作B7、将当前读取的模板槽的内容添加为从当前添加位置开始的一个转移条 件,将该转移条件对应的下一级节点作为当前添加位置,转至操作B5。
操作B8、结束当前获取的模板的添加过程,如果存在尚未添加到模板Trie树的模 板,则转至操作B2 ;否则,得到模板Trie树。
在本发明实施例中可以在通过查找模板Trie树确定出匹配的模板后,在通过预 先建立的模板与需求类型的对应关系识别出用户query的需求类型。优选地,模板树建 立单元也可以在执行操作B6时,在当前添加位置中添加当前获取的模板所对应需求类型 信息的出口,或者添加当前获取的模板所对应的需求类型信息,这样就能够通过查找模板 Trie树直接确定出对应的需求类型。
其中,需求匹配单元720可以存在两种结构
第一种结构,需求匹配单元720可以首先通过匹配词典Trie树对用户query进行 词全切分完毕后,再通过匹配模板Trie树确定匹配的模板。此时,需求匹配单元720可以 具体包括第一词典树匹配模块721和第一模板树匹配模块722。
第一词典树匹配模块721从用户query的第一个字符开始与词典Trie树进行匹 配,记录每一轮词典Trie树匹配到的各项内容得到用户query的各种词全切分结果,词全 切分结果包括词语以及词语的属性,且每一种词全切分结果中的词语构成用户query。
第一模板树匹配模块722逐一针对每一种词全切分结果分别在模板Trie树上进 行匹配,确定匹配到的模板所对应的需求类型。
其中,上述第一词典树匹配模块721具体执行以下操作
操作Cl1、接收到用户query后,词典指针指向用户query的第一个字符。
操作C12、将词典Trie树的根节点作为当前匹配位置。
操作C13、判断当前读取的字符是否匹配到从当前匹配位置开始的转移条件,如果 是,执行操作C14 ;否则,执行操作C17。
操作C14、确定匹配到的转移条件对应的下一级节点,判断当前确定的节点是否指 示词语属性,如果是,执行操作C15 ;否则,执行操作C16。
操作C15、获取并记录当前确定的节点指示的词语属性和匹配到的字符构成的词语。
操作C16 ;判断当前读取的字符在用户query中是否存在下一个字符,如果是,读 取下一个字符转至操作C13 ;否则结束操作。
操作C17、确定当前词典指针位置时记录的词语中的最短词语,判断该最短词语在 用户query中是否存在下一个字符,如果是,将词典指针指向该最短词语在用户query中的 下一个字符,读取词典指针指向的字符,转至操作C12。
另外,第一模板树匹配模块722具体执行以下操作
操作C21、将模板指针指向用户query的第一个字符,将模板Trie树的根节点作为当前匹配到的节点。操作C22、确定当前词全切分结果中以当前模板指针所指向的字符开始的词语。操作C23、判断当前读取的词语或该词语的属性是否匹配到模板Trie树中从当前匹配到的节点开始的转移条件,如果是,执行操作C24;否则,结束对当前词全切分结果的模板匹配。操作C24、确定匹配到的转移条件对应的下一级节点,判断当前确定的节点是否指示模板匹配成功,如果是,执行操作C25 ;否则,执行操作C26。操作C25、获取当前确定的节点指示的搜索需求,结束操作。操作C26、判断当前读取的词语在用户query中是否存在下一个字符,如果是,执行操作C27;否则,结束操作。操作C27、将模板指针指向当前读取的词语在用户query中的下一个字符,转至操作 C22。第二种结构需求匹配单元720可以交替匹配词典Trie树和模板Trie树,即每执行一轮词典Trie树的匹配时,就将本轮切分出的词语在模板Trie树中进行下一个节点的匹配,匹配到模板Trie树的下一个节点后,再回到词典Trie树进行下一轮的匹配。此时,如图8所示,需求匹配单元720可以具体包括词典指针设置模块821、第二词典树匹配模块822和第二模板树匹配模块823。词典指针设置模块821将词典指针指向用户query的第一个字符。第二词典树匹配模块822从词典指针指向的字符开始与词典Trie树进行匹配。第二模板树匹配模块823在一轮词典Trie树匹配结束后,将第二词典树匹配模块822本轮在词典Trie树匹配到的各项内容从上一轮模板Trie树匹配结束时匹配到的位置开始进行匹配,各项内容包括词语以及词语的属性,本轮模板Trie树匹配结束后,触发词典指针设置模块821将词典指针指向本轮模板Trie树匹配所使用词语在用户query中的下一个字符,并触发第二词典树匹配模块822开始下一轮词典Trie树的匹配,直至匹配到模板或者模板Trie树匹配失败;确定匹配到的模板所对应的需求类型。其中,第二词典树匹配模块822可以具体执行以下操作操作D21、将词典Trie树的根节点作为当前匹配位置。操作D22、读取当前词典指针指向的字符,判断当前读取的字符是否匹配到从当前匹配位置开始的转移条件,如果否,本轮词典Trie树匹配结束,记录本轮词典Trie树匹配到的各项内容;如果是,执行操作D23。操作D23、确定匹配到的转移条件对应的下一级节点,判断当前确定的节点是否指示词语属性,如果是,执行操作D24 ;否则,执行操作D25。操作D24、获取并记录当前确定的节点指示的词语属性以及匹配到的字符构成的词语,执行操作D25。操作D25、判断当前读取的字符在用户query中是否存在下一个字符,如果是,读取下一个字符,将当前确定的节点作为当前匹配位置,转至操作D22;否则,本轮词典Trie树匹配结束。另外,第二模板树匹配模块823分别读取第二词典树匹配模块822本轮词典Tire树匹配到的各项内容,并分别针对读取的各项内容执行以下匹配操作
操作D31、判断当前读取的词语或该词语的属性是否匹配到模板Trie树中从当前 匹配到的节点开始的转移条件,当前匹配到的节点的初始位置为模板Trie树的根节点;如 果是,执行操作D32 ;否则,结束针对当前读取的内容的模板Trie树匹配。
操作D32、确定匹配到的转移条件对应的下一级节点,判断当前确定的节点是否指 示模板匹配成功,如果是,执行操作D33;否则,将当前确定的节点作为当前匹配位置,词典 指针指向当前读取的内容中词语在用户query中的下一个字符,转至操作D2。
操作D33、确定匹配到的模板对应的搜索需求,结束针对当前读取的内容的模板 Trie树匹配。
其中,第一种结构中的第一模板树匹配模块722和第二种结构中的第二模板树匹 配模块823在判断当前读取的词语或该词语的属性是否匹配到模板Trie树中从当前匹配 到的节点开始的转移条件时,包括以下情况中的至少一种
如果从当前匹配到的节点开始的转移条件是词语属性,则如果当前读取的词语的 属性与转移条件中的词语属性一致,则确定两者匹配。
如果从当前匹配到的节点开始的转移条件是具体词语,则如果当前读取的词语与 转移条件中的具体词语一致,则确定两者匹配。
如果从当前匹配到的节点开始的转移条件是通配符,则确认两者匹配,从当前读 取的词语开始在query中截取通配符所指示长度,将截取的内容作为当前读取的词语。
如果从当前匹配到的节点开始的转移条件是函数,则调用函数从读取的词语开始 在用户query中进行识别,如果识别结果满足预设的函数要求,则确认两者匹配,将满足预 设的函数要求的识别结果所对应的词语作为当前读取的词语。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精 神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
权利要求
1.一种识别搜索需求的方法,其特征在于,在数据库中分别以特里Trie树的形式存储词典和需求识别模板,分别得到词典Trie树和模板Trie树;所述方法包括 接收到用户搜索请求query后,结合所述词典Trie树和模板Trie树对所述用户query进行匹配,确定匹配到的模板所对应的需求类型。
2.根据权利要求1所述的方法,其特征在于,所述词典Trie树中根节点指示初始状态,叶节点和部分中间节点指示匹配到的词语属性,节点与节点之间的转移条件为字符; 所述模板Trie树中根节点指示初始状态,叶节点指示模板匹配成功,节点和节点之间的转移条件包括具体词语、词语属性、通配符或函数。
3.根据权利要求1或2所述的方法,其特征在于,在数据库中以Trie树的形式存储词典得到词典Trie树具体包括 Al、在数据库中建立词典Trie树的根节点,该根节点指示初始状态; A2、从所述词典中获取一个尚未添加到词典Trie树中的词语,读取当前获取的词语中的第一个字符,将词典Trie树的根节点作为当前添加位置; A3、判断当前读取到的字符是否已经存在于从当前添加位置开始的转移条件,如果是,执行步骤A4 ;否则,执行步骤A6 ; A4、在词典Trie树中,将当前读取到的字符所存在的转移条件对应的下一级节点作为当前添加位置; A5、判断当前读取到的词语是否存在下一个字符,如果是,读取当前获取的词语的下一个字符,转至步骤A3 ;否则,执行步骤A9 ; A6、将当前读取到的字符添加为从当前添加位置开始的一个转移条件; A7、判断当前获取的词语中是否存在下一个字符,如果是,执行步骤AS ;否则,将当前获取的词语的属性添加到步骤A6所添加转移条件对应的下一级节点中,执行步骤A9 ; AS、将步骤A6所添加转移条件对应的下一级节点作为当前添加位置,读取当前获取的词语中的下一个字符,转至步骤A3 ; A9、结束当前获取的词语的添加过程,如果所述词典中存在尚未添加到词典Trie树中的词语,则转至步骤A2 ;否则,得到词典Trie树。
4.根据权利要求1或2所述的方法,其特征在于,在数据库中以Trie树的形式存储模板得到模板Trie树具体包括 B1、在数据库中建立模板Trie树的根节点,该根节点指示初始状态; B2、获取一个尚未添加到模板Trie树中的模板,读取当前获取的模板中第一个模板槽的内容,将模板Trie树的根节点作为当前添加位置; B3、判断当前读取到的模板槽的内容是否已经存在于当前添加位置开始的转移条件,如果是,执行步骤B4 ;否则执行步骤B7 ; B4、在模板Trie树中,将当前读取到的模板槽的内容所在的转移条件对应的下一级节点作为当前添加位置; B5、判断当前读取的模板槽是否存在下一个模板槽,如果是,读取下一个模板槽的内容,转至步骤B3 ;否则,执行步骤B6 ; B6、在当前添加位置中添加模板匹配成功的指示,执行步骤B8 ; B7、将当前读取的模板槽的内容添加为从当前添加位置开始的一个转移条件,将该转移条件对应的下一级节点作为当前添加位置,转至步骤B5 ; B8、结束当前获取的模板的添加过程,如果存在尚未添加到模板Trie树的模板,则转至步骤B2 ;否则,得到模板Trie树。
5.根据权利要求4所述的方法,其特征在于,在所述步骤B6中还包括在当前添加位置中添加当前获取的模板所对应需求类型信息的出口,或者添加当前获取的模板所对应的需求类型信息。
6.根据权利要求1所述的方法,其特征在于,结合所述词典Trie树和模板Trie树对所述用户query进行匹配,确定匹配到的模板所对应的需求类型具体包括 Cl、从所述用户query的第一个字符开始与所述词典Trie树进行匹配,记录每一轮词典Trie树匹配到的各项内容得到所述用户query的各种词全切分结果,所述词全切分结果包括词语以及词语的属性,且每一种词全切分结果中的词语构成所述用户query ; C2、逐一针对每一种词全切分结果分别在所述模板Trie树上进行匹配,确定匹配到的模板所对应的需求类型。
7.根据权利要求6所述的方法,其特征在于,所述步骤Cl具体包括 Cl1、接收到所述用户query后,词典指针指向所述用户query的第一个字符; C12、将词典Trie树的根节点作为当前匹配位置; C13、判断当前读取的字符是否匹配到从当前匹配位置开始的转移条件,如果是,执行步骤C14 ;否则,执行步骤C17 ; C14、确定匹配到的转移条件对应的下一级节点,判断当前确定的节点是否指示词语属性,如果是,执行步骤C15 ;否则,执行步骤C16 ; C15、获取并记录当前确定的节点指示的词语属性和匹配到的字符构成的词语; C16 ;判断当前读取的字符在所述用户query中是否存在下一个字符,如果是,读取下一个字符转至所述步骤C13 ;否则结束步骤Cl ; C17、确定当前词典指针位置时记录的词语中的最短词语,判断该最短词语在用户query中是否存在下一个字符,如果是,将词典指针指向该最短词语在用户query中的下一个字符,读取词典指针指向的字符,转至步骤C12。
8.根据权利要求6所述的方法,其特征在于,在所述步骤C2中针对每一种词全切分结果分别执行以下步骤 C21、将模板指针指向所述用户query的第一个字符,将模板Trie树的根节点作为当前匹配到的节点; C22、确定当前词全切分结果中以当前模板指针所指向的字符开始的词语; C23、判断当前读取的词语或该词语的属性是否匹配到模板Trie树中从当前匹配到的节点开始的转移条件,如果是,执行步骤C24 ;否则,结束对当前词全切分结果的模板匹配;C24、确定匹配到的转移条件对应的下一级节点,判断当前确定的节点是否指示模板匹配成功,如果是,执行步骤C25 ;否则,执行步骤C26 ; C25、获取当前确定的节点指示的搜索需求,结束步骤C2 ; C26、判断当前读取的词语在所述用户query中是否存在下一个字符,如果是,执行步骤C27 ;否则,结束步骤C2 ; C27、将模板指针指向当前读取的词语在所述用户query中的下一个字符,转至步骤C22。
9.根据权利要求1所述的方法,其特征在于,结合所述词典Trie树和模板Trie树对所述用户query进行匹配,确定匹配到的模板所对应的需求类型具体包括 D1、将词典指针指向用户query的第一个字符; D2、从词典指针指向的字符开始与所述词典Trie树进行匹配; D3、一轮词典Trie树匹配结束后,将本轮词典Trie树匹配到的各项内容从上一轮模板Trie树匹配结束时匹配到的位置开始进行匹配,所述各项内容包括词语以及词语的属性,本轮模板Trie树匹配结束后,将词典指针指向本轮模板Trie树匹配所使用词语在用户query中的下一个字符,转至步骤D2开始下一轮词典Trie树的匹配,直至匹配到模板或者模板Trie树匹配失败;确定匹配到的模板所对应的需求类型。
10.根据权利要求9所述的方法,其特征在于,所述步骤D2具体包括 D21、将词典Trie树的根节点作为当前匹配位置; D22、读取当前词典指针指向的字符,判断当前读取的字符是否匹配到从当前匹配位置开始的转移条件,如果否,本轮词典Trie树匹配结束,记录本轮词典Trie树匹配到的各项内容;如果是,执行步骤D23 ; D23、确定匹配到的转移条件对应的下一级节点,判断当前确定的节点是否指示词语属性,如果是,执行步骤D24 ;否则,执行步骤D25 ; D24、获取并记录当前确定的节点指示的词语属性以及匹配到的字符构成的词语,执行步骤D25 ; D25、判断当前读取的字符在所述用户query中是否存在下一个字符,如果是,读取下一个字符,将当前确定的节点作为当前匹配位置,转至所述步骤D22;否则,转至所述步骤D3。
11.根据权利要求9所述的方法,其特征在于,在步骤D3中,分别读取本轮词典Trie树匹配到的各项内容,并分别针对读取的各项内容执行以下匹配过程 D31、判断当前读取的词语或该词语的属性是否匹配到模板Trie树中从当前匹配到的节点开始的转移条件,所述当前匹配到的节点的初始位置为所述模板Trie树的根节点;如果是,执行步骤D32 ;否则,结束针对当前读取的内容的模板Trie树匹配; D32、确定匹配到的转移条件对应的下一级节点,判断当前确定的节点是否指示模板匹配成功,如果是,执行步骤D33 ;否则,将当前确定的节点作为当前匹配位置,词典指针指向当前读取的内容中词语在用户query中的下一个字符,转至所述步骤D2 ; D33、确定匹配到的模板对应的搜索需求,结束针对当前读取的内容的模板Trie树匹配。
12.根据权利要求8或11所述的方法,其特征在于,判断当前读取的词语或该词语的属性是否匹配到模板Trie树中从当前匹配到的节点开始的转移条件包括 如果从当前匹配到的节点开始的转移条件是词语属性,则如果当前读取的词语的属性与转移条件中的词语属性一致,则确定两者匹配;或者, 如果从当前匹配到的节点开始的转移条件是具体词语,则如果当前读取的词语与转移条件中的具体词语一致,则确定两者匹配;或者, 如果从当前匹配到的节点开始的转移条件是通配符,则确认两者匹配,从当前读取的词语开始在query中截取通配符所指示长度,将截取的内容作为当前读取的词语;或者,如果从当前匹配到的节点开始的转移条件是函数,则调用所述函数从读取的词语开始在所述用户query中进行识别,如果识别结果满足预设的函数要求,则确认两者匹配,将满足预设的函数要求的识别结果所对应的词语作为当前读取的词语。
13.一种识别搜索需求的装置,其特征在于,在数据库中分别以特里Trie树的形式存储词典和需求识别模板,分别得到词典Trie树和模板Trie树;该装置包括 请求接收单元,用于接收用户搜索请求query ; 需求匹配单元,用于结合所述词典Trie树和模板Trie树对所述用户query进行匹配,确定匹配到的模板所对应的需求类型。
14.根据权利要求13所述的装置,其特征在于,所述词典Trie树中根节点指示初始状态,叶节点和部分中间节点指示匹配到的词语属性,节点与节点之间的转移条件为字符; 所述模板Trie树中根节点指示初始状态,叶节点指示模板匹配成功,节点和节点之间的转移条件包括具体词语、词语属性、通配符或函数。
15.根据权利要求13或14所述的装置,其特征在于,该装置还包括词典树建立单元,用于执行以下操作 Al、在数据库中建立词典Trie树的根节点,该根节点指示初始状态; A2、从所述词典中获取一个尚未添加到词典Trie树中的词语,读取当前获取的词语中的第一个字符,将词典Trie树的根节点作为当前添加位置; A3、判断当前读取到的字符是否已经存在于从当前添加位置开始的转移条件,如果是,执行操作A4 ;否则,执行操作A6 ; A4、在词典Trie树中,将当前读取到的字符所存在的转移条件对应的下一级节点作为当前添加位置; A5、判断当前读取到的词语是否存在下一个字符,如果是,读取当前获取的词语的下一个字符,转至操作A3 ;否则,执行操作A9 ; A6、将当前读取到的字符添加为从当前添加位置开始的一个转移条件; A7、判断当前获取的词语中是否存在下一个字符,如果是,执行操作AS;否则,将当前获取的词语的属性添加到操作A6所添加转移条件对应的下一级节点中,执行操作A9 ; A8、将操作A6所添加转移条件对应的下一级节点作为当前添加位置,读取当前获取的词语中的下一个字符,转至操作A3 ; A9、结束当前获取的词语的添加过程,如果所述词典中存在尚未添加到词典Trie树中的词语,则转至操作A2 ;否则,得到词典Trie树。
16.根据权利要求13或14所述的装置,其特征在于,该装置还包括模板树建立单元,用于执行以下操作 B1、在数据库中建立模板Trie树的根节点,该根节点指示初始状态; B2、获取一个尚未添加到模板Trie树中的模板,读取当前获取的模板中第一个模板槽的内容,将模板Trie树的根节点作为当前添加位置; B3、判断当前读取到的模板槽的内容是否已经存在于当前添加位置开始的转移条件,如果是,执行操作B4 ;否则执行操作B7 ; B4、在模板Trie树中,将当前读取到的模板槽的内容所在的转移条件对应的下一级节点作为当前添加位置; B5、判断当前读取的模板槽是否存在下一个模板槽,如果是,读取下一个模板槽的内容,转至操作B3 ;否则,执行操作B6 ; B6、在当前添加位置中添加模板匹配成功的指示,执行操作B8 ; B7、将当前读取的模板槽的内容添加为从当前添加位置开始的一个转移条件,将该转移条件对应的下一级节点作为当前添加位置,转至操作B5 ; B8、结束当前获取的模板的添加过程,如果存在尚未添加到模板Trie树的模板,则转至操作B2 ;否则,得到模板Trie树。
17.根据权利要求16所述的装置,其特征在于,所述模板树建立单元在执行所述操作B6时,还用于在当前添加位置中添加当前获取的模板所对应需求类型信息的出口,或者添加当前获取的模板所对应的需求类型信息。
18.根据权利要求13所述的装置,其特征在于,所述需求匹配单元具体包括第一词典树匹配模块和第一模板树匹配模块; 所述第一词典树匹配模块,用于从所述用户query的第一个字符开始与所述词典Trie树进行匹配,记录每一轮词典Trie树匹配到的各项内容得到所述用户query的各种词全切分结果,所述词全切分结果包括词语以及词语的属性,且每一种词全切分结果中的词语构成所述用户query ; 所述第一模板树匹配模块,用于逐一针对每一种词全切分结果分别在所述模板Trie树上进行匹配,确定匹配到的模板所对应的需求类型。
19.根据权利要求18所述的装置,其特征在于,所述第一词典树匹配模块具体执行以下操作 C11、接收到所述用户query后,词典指针指向所述用户query的第一个字符; C12、将词典Trie树的根节点作为当前匹配位置; C13、判断当前读取的字符是否匹配到从当前匹配位置开始的转移条件,如果是,执行操作C14 ;否则,执行操作C17 ; C14、确定匹配到的转移条件对应的下一级节点,判断当前确定的节点是否指示词语属性,如果是,执行操作C15 ;否则,执行操作C16 ; C15、获取并记录当前确定的节点指示的词语属性和匹配到的字符构成的词语; C16 ;判断当前读取的字符在所述用户query中是否存在下一个字符,如果是,读取下一个字符转至所述操作C13 ;否则结束操作; C17、确定当前词典指针位置时记录的词语中的最短词语,判断该最短词语在用户query中是否存在下一个字符,如果是,将词典指针指向该最短词语在用户query中的下一个字符,读取词典指针指向的字符,转至操作C12。
20.根据权利要求18所述的装置,其特征在于,所述第一模板树匹配模块具体执行以下操作 C21、将模板指针指向所述用户query的第一个字符,将模板Trie树的根节点作为当前匹配到的节点; C22、确定当前词全切分结果中以当前模板指针所指向的字符开始的词语; C23、判断当前读取的词语或该词语的属性是否匹配到模板Trie树中从当前匹配到的节点开始的转移条件,如果是,执行操作C24 ;否则,结束对当前词全切分结果的模板匹配;C24、确定匹配到的转移条件对应的下一级节点,判断当前确定的节点是否指示模板匹配成功,如果是,执行操作C25 ;否则,执行操作C26 ; C25、获取当前确定的节点指示的搜索需求,结束操作; C26、判断当前读取的词语在所述用户query中是否存在下一个字符,如果是,执行操作C27 ;否则,结束操作; C27、将模板指针指向当前读取的词语在所述用户query中的下一个字符,转至操作C22。
21.根据权利要求13所述的装置,其特征在于,所述需求匹配单元具体包括词典指针设置模块、第二词典树匹配模块和第二模板树匹配模块; 所述词典指针设置模块,用于将词典指针指向用户query的第一个字符; 所述第二词典树匹配模块,用于从词典指针指向的字符开始与所述词典Trie树进行匹配; 所述第二模板树匹配模块,用于在一轮词典Trie树匹配结束后,将所述第二词典树匹配模块本轮在词典Trie树匹配到的各项内容从上一轮模板Trie树匹配结束时匹配到的位置开始进行匹配,所述各项内容包括词语以及词语的属性,本轮模板Trie树匹配结束后,触发所述词典指针设置模块将词典指针指向本轮模板Trie树匹配所使用词语在用户query中的下一个字符,并触发所述第二词典树匹配模块开始下一轮词典Trie树的匹配,直至匹配到模板或者模板Trie树匹配失败;确定匹配到的模板所对应的需求类型。
22.根据权利要求21所述的装置,其特征在于,所述第二词典树匹配模块具体执行以下操作 D21、将词典Trie树的根节点作为当前匹配位置; D22、读取当前词典指针指向的字符,判断当前读取的字符是否匹配到从当前匹配位置开始的转移条件,如果否,本轮词典Trie树匹配结束,记录本轮词典Trie树匹配到的各项内容;如果是,执行操作D23 ; D23、确定匹配到的转移条件对应的下一级节点,判断当前确定的节点是否指示词语属性,如果是,执行操作D24 ;否则,执行操作D25 ; D24、获取并记录当前确定的节点指示的词语属性以及匹配到的字符构成的词语,执行操作D25 ; D25、判断当前读取的字符在所述用户query中是否存在下一个字符,如果是,读取下一个字符,将当前确定的节点作为当前匹配位置,转至所述操作D22;否则,本轮词典Trie树匹配结束。
23.根据权利要求21所述的装置,其特征在于,所述第二模板树匹配模块分别读取所述第二词典树匹配模块本轮词典Tire树匹配到的各项内容,并分别针对读取的各项内容执行以下匹配操作 D31、判断当前读取的词语或该词语的属性是否匹配到模板Trie树中从当前匹配到的节点开始的转移条件,所述当前匹配到的节点的初始位置为所述模板Trie树的根节点;如果是,执行操作D32 ;否则,结束针对当前读取的内容的模板Trie树匹配; D32、确定匹配到的转移条件对应的下一级节点,判断当前确定的节点是否指示模板匹配成功,如果是,执行操作D33 ;否则,将当前确定的节点作为当前匹配位置,词典指针指向当前读取的内容中词语在用户query中的下一个字符,转至所述操作D2 ; D33、确定匹配到的模板对应的搜索需求,结束针对当前读取的内容的模板Trie树匹配。
24.根据权利要求20或23所述的装置,其特征在于,判断当前读取的词语或该词语的属性是否匹配到模板Trie树中从当前匹配到的节点开始的转移条件包括 如果从当前匹配到的节点开始的转移条件是词语属性,则如果当前读取的词语的属性与转移条件中的词语属性一致,则确定两者匹配;或者, 如果从当前匹配到的节点开始的转移条件是具体词语,则如果当前读取的词语与转移条件中的具体词语一致,则确定两者匹配;或者, 如果从当前匹配到的节点开始的转移条件是通配符,则确认两者匹配,从当前读取的词语开始在query中截取通配符所指示长度,将截取的内容作为当前读取的词语;或者,如果从当前匹配到的节点开始的转移条件是函数,则调用所述函数从读取的词语开始在所述用户query中进行识别,如果识别结果满足预设的函数要求,则确认两者匹配,将满足预设的函数要求的识别结果所对应的词语作为当前读取的词语。
全文摘要
本发明提供了一种识别搜索需求的方法和装置,在数据库中分别以特里(Trie)树的形式存储词典和需求识别模板,分别得到词典Trie树和模板Trie树;该方法包括接收到用户搜索请求(query)后,结合词典Trie树和模板Trie树对用户query进行匹配,确定匹配到的模板所对应的需求类型。通过本发明能够提高识别搜索需求的效率,降低了搜索对搜索引擎的性能所带来的计算压力。
文档编号G06F17/30GK103020052SQ20111027943
公开日2013年4月3日 申请日期2011年9月20日 优先权日2011年9月20日
发明者施少杰, 刘建柱, 薛阳阳 申请人:北京百度网讯科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1