本发明涉及全文检索技术领域,尤其涉及一种建立分词索引库的方法和装置。
背景技术:
随着科技的发展,在日常生活中,人们常常通过关键字进行全文检索查找所需的文本内容,而全文检索的准确性取决于检索内容的准确性,全文检索的速度取决于检索内容的大小,即,事先建立的索引库中索引项少而精确,全文检索的速度就越快,检索结果就越准确。
目前,大多数的索引库的建立过程如下:在获得文本中的语句内容后,采用IKAnalyzer对语句内容进行分词处理,得到符合字典的词语作为索引项,IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包,其采用的是特有的“正向迭代最细粒度切分算法“,具有60万字/秒的高速处理能力。
但是,发明人经过研究发现,采用IKAnalyzer对语句内容进行分词处理,分出的词语数量较多,生成的索引项较大,而且分出的词语虽然是字典中存在的词语但并没有实际含义,从而在后续全文检索时,需要对索引项较大的索引库进行检索,造成全文检索的速度大大降低,检索结果准确率也大大降低。
技术实现要素:
本发明所要解决的技术问题是,提供一种建立分词索引库的方法和装置,使得拆分出的词语既具有实际含义且数量较少,即,建立的索引库中的生成的索引项少而精确,从而在后续全文检索时,能够大大提升全文检索的速度,极大地提高检索结果准确率。
第一方面,本发明实施例提供了一种建立分词索引库的方法,该方法包括:
根据待分词文本中的标点符号,获取待分词语句;
采用反向最大分词匹配算法拆分所述待分词语句,获得拆分后的词语作为索引项;
根据所述索引项和对应的索引信息,建立分词索引库,所述索引信息为索引项所属待分词文本的信息。
优选的,所述采用反向最大分词匹配算法拆分所述待分词语句,获得拆分后的词语作为索引项,包括:
从所述待分词语句获取n-m后的m个字符,所述待分词语句有n个字符,所述m为最大分词字符;
若所述n-m后的m个字符是字典中的词语,则将所述n-m后的m个字符作为索引项,将n-m赋值给n,返回执行从所述待分词语句获取n-m后的m个字符,直至n=0;
若所述n-m后的m个字符不是字典中的词语,则将m-1赋值给m,返回执行从所述待分词语句获取n-m后的m个字符。
优选的,所述根据所述索引项和对应的索引信息,建立分词索引库,具体为:
根据所述索引项和对应的索引信息,采用倒排索引的格式建立分词索引库。
优选的,还包括:
获取待检索词语;
根据所述待检索词语检索所述分词索引库,获得目标索引项,所述目标索引项与所述待检索词语相匹配;
根据所述目标索引项,获得对应的目标索引信息。
优选的,所述根据待分词文本中的标点符号,获取待分词语句,包括:
获取待分词文本,所述待分词文本包括待分词语句和标点符号;
通过所述标点符号拆分待分词文本,获得待分词语句。
第二方面,本发明实施例提供了一种建立分词索引库的装置,其特征在于,包括:
待分词语句获取单元,用于根据待分词文本中的标点符号,获取待分词语句;
索引项获得单元,用于采用反向最大分词匹配算法拆分所述待分词语句,获得拆分后的词语作为索引项;
分词索引库建立单元,用于根据所述索引项和对应的索引信息,建立分词索引库,所述索引信息为索引项所属待分词文本的信息。
优选的,所述索引项获得单元包括:
字符获取子单元,用于从所述待分词语句获取n-m后的m个字符,所述待分词语句有n个字符,所述m为最大分词字符;
拆分返回子单元,用于若所述n-m后的m个字符是字典中的词语,则将所述n-m后的m个字符作为索引项,将n-m赋值给n,返回执行从所述待分词语句获取n-m后的m个字符,直至n=0;
返回子单元,用于若所述n-m后的m个字符不是字典中的词语,则将m-1赋值给m,返回执行从所述待分词语句获取n-m后的m个字符。
优选的,所述分词索引库建立单元具体用于:根据所述索引项和对应的索引信息,采用倒排索引的格式建立分词索引库。
优选的,还包括:
待检索词语获取单元,用于获取待检索词语;
目标索引项获得单元,用于根据所述待检索词语检索所述分词索引库,获得目标索引项,所述目标索引项与所述待检索词语相匹配;
目标索引信息获得单元,用于根据所述目标索引项,获得对应的目标索引信息。
优选的,所述待分词语句获取单元包括:
待分词文本获取子单元,用于获取待分词文本,所述待分词文本包括待分词语句和标点符号;
待分词语句获取子单元,用于获取通过所述标点符号拆分待分词文本,获得待分词语句
与现有技术相比,本发明至少具有以下优点:
采用本发明实施例的技术方案,首先,根据待分词文本中的标点符号,获取待分词语句;然后,采用反向最大分词匹配算法拆分所述待分词语句,获得拆分后的词语作为索引项;最后,根据所述索引项和对应的索引信息,建立分词索引库,所述索引信息为索引项所属待分词文本的信息。由此可见,相较于利用IKAnalyzer进行分词,利用反向最大分词匹配算法对待分词语句进行分词处理,拆分出的词语既具有实际含义,且数量较少,即,生成的索引项少而精确,从而在后续全文检索时,对由上述方式建立的索引项少而精确的索引库进行检索,能够大大提升全文检索的速度,极大地提高检索结果准确率。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为本发明实施例中一种应用场景所涉及的系统框架示意图;
图2为本发明实施例提供的一种建立分词索引库的方法的流程示意图;
图3为本发明实施例提供的一种建立分词索引库的装置的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
目前,全文检索是指根据待检索的词语检索事先建立好的索引库,而现有技术中,大多数的索引库的是获得文本中的语句内容后,采用IKAnalyzer对语句内容进行分词处理,根据得到符合字典的词语作为索引项建立的。其中,IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包,其采用的是“正向迭代最细粒度切分算法“,具有60万字/秒的高速处理能力。
例如,“今天来了许多新同事”,采用IKAnalyzer进行分词处理,具体地,依次判断字典中是否存在“今”、“今天”、“今天来”、“今天来了”、“今天来了许”、“今天来了许多”、“今天来了许多新”、“今天来了许多新同”、“今天来了许多新同事”、“天”、“天来”、“天来了”、“天来了许”、“天来了许多”……“新”、“新同”、“新同事”、“同”、“同事”、“事”,若存在,将其作为索引项,最终分出来作为索引项的词语是:“今”、“今天”、“天”、“来”、“来了”、“了”、“许”、“许多”、“多”、“新”、“同”、“同事”、“事”。
但是,发明人经过研究发现,采用IKAnalyzer对语句内容进行分词处理,分出的词语数量较多,生成的索引项较大,而且分出的词语虽然是字典中存在的词语但并没有实际含义,从而在后续全文检索时,需要对索引项较大的索引库进行检索,造成全文检索的速度大大降低,检索结果准确率也大大降低。
为了解决这一问题,在本发明实施例中,首先,根据待分词文本中的标点符号,获取待分词语句;然后,采用反向最大分词匹配算法拆分所述待分词语句,获得拆分后的词语作为索引项;最后,根据所述索引项和对应的索引信息,建立分词索引库,所述索引信息为索引项所属待分词文本的信息。由此可见,相较于利用IKAnalyzer进行分词,利用反向最大分词匹配算法对待分词语句进行分词处理,拆分出的词语既具有实际含义,且数量较少,即,生成的索引项少而精确,从而在后续全文检索时,对由上述方式建立的索引项少而精确的索引库进行检索,能够大大提升全文检索的速度,极大地提高检索结果准确率。
举例来说,本发明实施例的场景之一,可以是应用到如图1所示的场景中。该场景包括客户端101和服务器102,所述客户端101和所述服务器102进行交互。用户可以通过客户端101向服务器上传待分词文本;服务器102获取到带分词文本后,首先根据待分词文本中的标点符号,获取待分词语句;然后,服务器102采用反向最大分词匹配算法拆分所述待分词语句,获得拆分后的词语作为索引项;最后,服务器102根据所述索引项和对应的索引信息,建立分词索引库,所述索引信息为索引项所属待分词文本的信息,以便于后续用户通过客户端101输入待检索词语后,服务器102可以基于分词索引库检索所述待检索词语。
可以理解的是,在上述应用场景中,虽然将本发明实施方式的动作描述由服务器102执行,但是,本发明在执行主体方面不受限制,只要执行了本发明实施方式所公开的动作即可。
可以理解的是,上述场景仅是本发明实施例提供的一个场景示例,本发明实施例并不限于此场景。
下面结合附图,通过实施例来详细说明本发明实施例中建立分词索引库的方法和装置的具体实现方式。
示例性方法
参见图2,示出了本发明实施例中一种建立分词索引库的方法的流程示意图。在本实施例中,所述方法例如可以包括以下步骤:
步骤201:根据待分词文本中的标点符号,获取待分词语句。
需要说明的是,在服务器通过客户端获取到用于建立全文检索平台的索引库的文本后,需要首先将该文本进行语句拆分,然后对语句进行词语拆分。其中,文本一般是由语句和标点符号组成的,标点符号完美地对文本中的语句进行了分割,所以,语句拆分的原则就是标点符号。因此,在本实施例的一些实施方式中,所述步骤201例如可以包括:获取待分词文本,所述待分词文本包括待分词语句和标点符号;通过所述标点符号拆分待分词文本,获得待分词语句。
步骤202:采用反向最大分词匹配算法拆分所述待分词语句,获得拆分后的词语作为索引项。
需要说明的是,反向最大分词匹配算法就是指按照一定的策略截取待分词语句中的字符串与一个包含有足够多词语的机器字典中的词语进行匹配,若能在字典中找到该字符串,则匹配成功,即拆分出该字符串作为索引项,直至拆分完待分词语句。反向最大分词匹配算法具体实施是从待分词语句尾端截取所设定的最大字符串,以判断字典中是否存在该字符串,若是,则将其作为索引项,继续截取所设定的最大字符串,直至拆分完待分词语句;若否,去掉该字符串中的第一个字符,继续判断字典中是否存在该字符串,直至拆分完待分词语句。因此,在本实施例的一些实施方式中,所述步骤202例如可以包括以下步骤:
步骤A:从所述待分词语句获取n-m后的m个字符,所述待分词语句有n个字符,所述m为最大分词字符;
步骤B:若所述n-m后的m个字符是字典中的词语,则将所述n-m后的m个字符作为索引项,将n-m赋值给n,返回执行从所述待分词语句获取n-m后的m个字符,直至n=0;
步骤C:若所述n-m后的m个字符不是字典中的词语,则将m-1赋值给m,返回执行从所述待分词语句获取n-m后的m个字符。
例如,待分词语句为“今天来了许多新同事”,有9个字符,最大分词字符为5,采用反向最大分词匹配算法进行分词处理,具体地,截取“许多新同事”,判断其是否是字典中词语,判断结果为否,则截取“多新同事”,判断其是否是字典中词语,判断结果为否,则截取“新同事”,判断其是否是字典中词语,判断结果为否,则截取“同事”,判断其是否是字典中词语,判断结果为是,将“同事”作为索引项,则继续截取“来了许多新”,判断其是否是字典中词语,判断结果为否,则截取“了许多新”,判断其是否是字典中词语,判断结果为否,则截取“许多新”,……则继续截取“来了许多新”,判断其是否是字典中词语,判断结果为否,则截取“今天来”,判断其是否是字典中词语,判断结果为否,则截取“天来”,判断其是否是字典中词语,判断结果为否,则截取“来”,判断结果为是,将“来”作为索引项,则继续截取“今天”,判断其是否是字典中词语,判断结果为是,将“今天”作为索引项,至此,n=0,拆分完待分词语句“今天来了许多新同事”。
相比于现有技术中的采用IKAnalyzer对“今天来了许多新同事”进行分词处理,拆分出来作为索引项的词语是:“今”、“今天”、“天”、“来”、“来了”、“了”、“许”、“许多”、“多”、“新”、“同”、“同事”、“事”而言;本实施例采用反向最大分词匹配算法对“今天来了许多新同事”进行分词处理,拆分出来作为索引项的词语是:“今天”、“来”、“了”、“许多”、“新”、和“同事”;拆分出的作为索引项的词语既具有实际含义歧义较少,且数量较少,即,索引项少而精确。
步骤203:根据所述索引项和对应的索引信息,建立分词索引库,所述索引信息为索引项所属待分词文本的信息。
需要说明的是,获得的索引项和对应的索引信息相对较多,为了更好的管理索引项和对应的索引信息,在建立分词索引库时,采用倒排索引的格式的索引数据存储格式。因此,在本实施例的一些实施方式中,所述步骤203例如具体可以为:根据所述索引项和对应的索引信息,采用倒排索引的格式建立分词索引库。倒排索引也可以叫做反向索引、置入档案或反向档案,是一种存储索引数据的格式,在建立分词索引库时能够存储某个词语在一个文档或者一组文档中的存储位置的映射,即,存储索引项和对应的索引信息的映射。
需要说明的是,步骤203建立分词索引库的目的就是为了便于实现用户所需的全文检索,也就是说,全文检索是查看待检索词语与分词索引库中的索引项是否匹配。因此,在本实施例的一些实施方式中,例如还可以包括以下步骤:
步骤204:获取待检索词语;
步骤205:根据所述待检索词语检索所述分词索引库,获得目标索引项,所述目标索引项与所述待检索词语相匹配;
步骤206:根据所述目标索引项,获得对应的目标索引信息。
可以理解的是,由于步骤203中建立的分词索引库索引项少而精确,步骤205的检索速度快、准确度高;而且,步骤203中分词索引库采用倒排索引的格式,是实现词语到文档映射关系的最佳实现方式和最有效的格式,从而步骤206可以根据目标索引项快速获取包含目标索引项的目标索引信息。
例如,整体从分词索引库的建立到关键词全文检索的过程如下所示:
步骤a:获取待分词文本,待分词文本包括待分词语句和标点符号。
步骤b:通过标点符号拆分待分词文本,获得待分词语句。
步骤c:从待分词语句获取n-m后的m个字符,待分词语句有n个字符,m为最大分词字符。
步骤d:判断n-m后的m个字符是否是字典中的词语;若是进入步骤e;若否,进入步骤f。
步骤e:将n-m后的m个字符作为索引项,将n-m赋值给n,返回步骤c,直至n=0。
步骤f:将m-1赋值给m,返回步骤c。
步骤g:根据索引项和对应的索引信息,采用倒排索引的格式建立分词索引库,索引信息为索引项所属待分词文本的信息。
步骤h:获取待检索词语。
步骤i:根据待检索词语检索分词索引库,获得目标索引项,目标索引项与待检索词语相匹配。
步骤j:根据目标索引项,获得对应的目标索引信息。
通过本实施例提供的各种实施方式,首先,根据待分词文本中的标点符号,获取待分词语句;然后,采用反向最大分词匹配算法拆分所述待分词语句,获得拆分后的词语作为索引项;最后,根据所述索引项和对应的索引信息,建立分词索引库,所述索引信息为索引项所属待分词文本的信息。由此可见,相较于利用IKAnalyzer进行分词,利用反向最大分词匹配算法对待分词语句进行分词处理,拆分出的词语既具有实际含义,且数量较少,即,生成的索引项少而精确,从而在后续全文检索时,对由上述方式建立的索引项少而精确的索引库进行检索,能够大大提升全文检索的速度,极大地提高检索结果准确率。
示例性设备
参见图3,示出了本发明实施例中一种建立分词索引库的装置的结构示意图。在本实施例中,所述装置例如具体可以包括:
待分词语句获取单元301,用于根据待分词文本中的标点符号,获取待分词语句;
索引项获得单元302,用于采用反向最大分词匹配算法拆分所述待分词语句,获得拆分后的词语作为索引项;
分词索引库建立单元303,用于根据所述索引项和对应的索引信息,建立分词索引库,所述索引信息为索引项所属待分词文本的信息。
可选的,所述索引项获得单元302包括:
字符获取子单元,用于从所述待分词语句获取n-m后的m个字符,所述待分词语句有n个字符,所述m为最大分词字符;
拆分返回子单元,用于若所述n-m后的m个字符是字典中的词语,则将所述n-m后的m个字符作为索引项,将n-m赋值给n,返回执行从所述待分词语句获取n-m后的m个字符,直至n=0;
返回子单元,用于若所述n-m后的m个字符不是字典中的词语,则将m-1赋值给m,返回执行从所述待分词语句获取n-m后的m个字符。
可选的,所述分词索引库建立单元303具体用于:根据所述索引项和对应的索引信息,采用倒排索引的格式建立分词索引库。
可选的,还包括:
待检索词语获取单元,用于获取待检索词语;
目标索引项获得单元,用于根据所述待检索词语检索所述分词索引库,获得目标索引项,所述目标索引项与所述待检索词语相匹配;
目标索引信息获得单元,用于根据所述目标索引项,获得对应的目标索引信息。
可选的,所述待分词语句获取单元301包括:
待分词文本获取子单元,用于获取待分词文本,所述待分词文本包括待分词语句和标点符号;
待分词语句获取子单元,用于获取通过所述标点符号拆分待分词文本,获得待分词语句
通过本实施例提供的各种实施方式,待分词语句获取单元用于根据待分词文本中的标点符号,获取待分词语句;索引项获得单元用于采用反向最大分词匹配算法拆分所述待分词语句,获得拆分后的词语作为索引项;分词索引库建立单元用于根据所述索引项和对应的索引信息,建立分词索引库,所述索引信息为索引项所属待分词文本的信息。由此可见,相较于利用IKAnalyzer进行分词,利用反向最大分词匹配算法对待分词语句进行分词处理,拆分出的词语既具有实际含义,且数量较少,即,生成的索引项少而精确,从而在后续全文检索时,对由上述方式建立的索引项少而精确的索引库进行检索,能够大大提升全文检索的速度,极大地提高检索结果准确率。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制。虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明。任何熟悉本领域的技术人员,在不脱离本发明技术方案范围情况下,都可利用上述揭示的方法和技术内容对本发明技术方案做出许多可能的变动和修饰,或修改为等同变化的等效实施例。因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均仍属于本发明技术方案保护的范围内。