[发明专利]通过预计算优化搜索引擎分词的方法及搜索引擎分词装置有效
申请号: | 201210096557.0 | 申请日: | 2012-04-01 |
公开(公告)号: | CN102651026A | 公开(公告)日: | 2012-08-29 |
发明(设计)人: | 阮星华;张敏 | 申请(专利权)人: | 百度在线网络技术(北京)有限公司 |
主分类号: | G06F17/30 | 分类号: | G06F17/30 |
代理公司: | 北京清亦华知识产权代理事务所(普通合伙) 11201 | 代理人: | 宋合成 |
地址: | 100085 北京市*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 通过 预计 优化 搜索引擎 分词 方法 装置 | ||
技术领域
本发明涉及计算机科学技术领域,特别涉及一种通过预计算优化搜索引擎分词的方法及搜索引擎分词装置。
背景技术
分词是搜索引擎最基本的功能,是搜索引擎根据用户提交的关键词串用各种方法进行匹配的一种技术。现有搜索引擎为了达到较好的分词效果,分词词典容量一般都比较大,并且采用明文分词词典,通过线上计算的方式生成内部的数据结构。现有搜索引擎一般采用线性索引表、倒排表、散列(hash)和搜索树等数据结构。线性索引表和倒排表都是静态索引结构。散列(Hash)是通过特定的散列函数和与之配套的处理冲突方法,将字符映射到某个存储位置,在搜索时只要对字符进行Hash计算就能得到存储位置。
现有技术的缺点如下:
(1)、静态搜索搜索时间与分词词典的大小相关,当词典容量大的时候响应时间长,难以达到O(1)的量级,并且静态搜索在词典变更时需要做的改动较大。
(2)、散列搜索速度快,时间复杂度能够优化到O(1),但是空间利用率低,内存占用大,并且查询时间也依赖于Hash冲突处理机制的设计。
(3)、分词词典大导致载入时间长,使得搜索产品应对故障的响应不够敏捷,容易造成流量的大规模损失,同时模块启动时间长也会影响到日常产品运维的效率。
(4)、载入过程中大量的计算和频繁的IO操作,容易给线上服务的稳定性造成冲击。
发明内容
本发明的目的旨在至少解决上述技术缺陷之一。
为此,本发明的目的在于提出一种通过预计算优化搜索引擎分词的方法,通过优先考虑Trie树子节点数目较多节点的转移字符以及空闲碎片的有效利用,提高了空间利用率,并通过进行线下的预计算,提高了搜索引擎线上分词模块的载入速度,不需要耗费大量计算资源和频繁IO,不会对线上服务的稳定性造成冲击。通过签名还能够有效避免词典文件格式错误或者内容缺失对分词效果的影响。
本发明的第二个目的在于提供一种通过预计算优化搜索引擎分词的系统。
为达到上述目的,本发明第一方面的实施例公开了一种通过预计算优化搜索引擎分词的方法。该方法包括以下步骤:按照Trie树子节点的数目对分词词典中字符进行编码以生成序列码,其中,对所述Trie树子节点的数目多的字符优先进行编码;根据所述序列码进行预计算以生成双数组Trie树的第一数组和第二数组;根据所述序列码、所述第一数组和所述第二数组在所述分词词典中进行分词查询。
由于序列码是优先考虑Trie树子节点数目较多节点的转移字符,因此这部分子节点最后在双数组存储的时候一般都是连续的,从而在查询时间保持O(1)的量级的同时提高了空间利用率,降低了内存占用。
在本发明的一个实施例中,还包括:
将所述序列码、所述第一数组和所述第二数组转换为二进制文件,并生成相应的签名。在搜索引擎线上服务时,分词模块能直接从二进制文件进行载入,载入速度快,避免了大量的计算和频繁的IO操作,并且不会对线上服务的稳定性造成冲击。生成的相应签名能够预防文件格式和内容的错误。
在本发明的一个实施例中,还包括:
将所述序列码、所述第一数组和所述第二数组进行尾部位置空间截断。尾部位置空间截断能够有效节省内存。
在本发明的一个实施例中,所述按照Trie树子节点的数目对分词词典中字符进行编码以生成序列码进一步包括:
计算每个字符的Trie树子节点的数目;
根据所述Trie树子节点的数目依次对所述字符的内码进行哈希计算以生成所述序列码,并根据所述字符在所述分词词典中词语中的位置确定所述字符的节点位置。
在本发明的一个实施例中,所述根据序列码进行预计算以生成双数组Trie树的第一数组和第二数组进一步包括:
根据所述Trie树子节点的数目依次将所述序列码中的字符填入所述第一数组和所述第二数组。
在本发明的一个实施例中,其中,
如果所述字符所代表的词属于所述分词词典,则所述字符在所述第一数组中对应的值为0,或者所述字符在所述第二数组中对应的值为负值;
如果所述字符为中间节点,则所述字符在所述第一数组中对应的值非0。
在本发明的一个实施例中,其中,
如果所述字符在所述第一数组中对应的值为负值,则表示向前查找空闲位置。对于子节点数较少节点的转移字符,在填充数组的时候采用从前向后回溯的方式来填补前面产生的空隙,将之前闲置的零散节点回收利用,从而更进一步提高了空间利用率。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于百度在线网络技术(北京)有限公司,未经百度在线网络技术(北京)有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201210096557.0/2.html,转载请声明来源钻瓜专利网。