一种快速分词的实现方法.pdf

上传人:00****42 文档编号:972675 上传时间:2018-03-22 格式:PDF 页数:15 大小:571.33KB
返回 下载 相关 举报
摘要
申请专利号:

CN200910107961.1

申请日:

2009.06.16

公开号:

CN101576877A

公开日:

2009.11.11

当前法律状态:

撤回

有效性:

无权

法律详情:

发明专利申请公布后的视为撤回IPC(主分类):G06F 17/27公开日:20091111|||文件的公告送达IPC(主分类):G06F 17/27收件人:程治永文件名称:第一次审查意见通知书|||实质审查的生效|||公开

IPC分类号:

G06F17/27; G06F17/28; G06F17/30

主分类号:

G06F17/27

申请人:

程治永

发明人:

程治永

地址:

518059广东省深圳市南山区前海路星海名城五期2-31K

优先权:

专利代理机构:

代理人:

PDF下载: PDF下载
内容摘要

本发明公开了一种基于词条查找树的快速分词方法,词条查找树由一级索引表和HASH多叉树构成。一级索引表是数组,通过下标直接访问,可快速缩小搜索范围,时间复杂度为常数。HASH多叉树是基于HASH的多叉树,即每个节点的子节点列表通过HASH散列,查找的时候平均时间复杂度为常数。通过本发明的词条查找树能利用相对较少的内存资源,获得近乎常数时间复杂度的分词功能,可支持大型词典,满足海量文本信息的分析需求。

权利要求书

1.  本发明是这样实现的:一种快速分词的实现方法,其特征在于,该方法包括以下步骤:
基于词条查找树的快速分词方法,词条查找树由一级索引表和HASH多叉树构成。一级索引表是数组,通过下标直接访问,可快速缩小搜索范围,时间复杂度为常数。HASH多叉树是基于HASH的多叉树,即每个节点的子节点列表通过HASH散列,查找的时候平均时间复杂度为常数。通过词条添加操作构建词条查找树,利用词条查找树进行快速分词。

2.
  如权利要求1所述HASH多叉树其特征在于:
HASH多叉树和一级索引表相连,以进一步加快词条查找树的搜索速度。
HASH多叉树中的节点为字符节点,字符节点至少包含:字符值,词条结束标志,子节点数,子节点列表,HASH冲突的下一个兄弟节点等信息。子节点列表是通过HASH散列的列表。
HASH桶的大小由子节点数确定,并在增加子节点时自动扩展,并根据新HASH桶大小重新构造节点。动态增长的HASH桶可以减少HASH冲突,同时保证匹配效率和资源利用率。通过子节点数获得最佳HASH桶的大小,可事先构造对应表,以加快计算速度。
根据HASH值获得HASH位置的操作,用与操作替换取模操作可以加快运算速度,即HASH值和一个特定值进行与运算来获得HASH索引,该特定值和HASH桶大小相关,可以取小于HASH桶大小且BIT位连续为1的最大值,可事先构造好对应表,以加快计算速度。HASH冲突的节点相连,以链表的形式组织,并将首节点记录在对应的HASH索引位置。
添加字符节点到子节点列表中的过程。首先根据新的子节点数目计算是否需要扩展当前节点,如果需要扩展则申请新的空间重新构造新节点,并回收旧节点。将字符的值作为HASH值,根据HASH桶的大小获得HASH索引位置,并加入到该索引位置的链表中。

3.
  如权利要求1所述一级索引表其特征在于:
前导字符是首先取出并处理的字符,可快速缩小搜索范围。前导字符和一级索引表密切相关,前导字符的数目等于一级索引表的维数。前导字符至少可以为1个,对应的一级索引表的记录数为256(1×256)。如果最小词条字节数均不小于2则前导字符可以为2个,对应的一级索引表的记录数为65536(256×256)。256是字符值的个数(0-255)。

4.
  如权利要求1所述添加词条操作其特征在于:
步骤1.从被添加词条中取出前导字符,在一级索引表中进行匹配。若记录不存在,为前导字符构造字符节点,并将该节点加入到一级索引表中,并记录为当前节点;若记录存在,则直接记为当前节点。
步骤2.取出被添加词条的下一个字符,在当前节点的子节点列表中进行匹配。如果不存在,则为该字符构造一个字符节点,并添加到当前节点的子节点列表中,并记录新添加节点为当前节点;如果存在则直接设置为当前节点。重复步骤2的过程,直到被添加词条所有字符被加入。
步骤3.在最末节点上设置词条结束标志。

5.
  如权利要求4所述词条添加操作其特征在于:
添加字符节点到当前节点的子节点列表的过程,是添加元素到HASH多叉树的过程。通过该字符的值作为HASH值,计算其在HASH桶中的索引位置,该索引位置已有节点以链表的形式组织。将该节点作为首节点加入到该链表中,并记录在HASH桶的对应索引位置。
若添加过程中需要扩展当前节点,则申请一块新空间,并构造新的当前节点,并将旧节点进行回收。判断是否需要扩展的依据是HASH桶大小是否无法容下新的子节点数。

6.
  如权利要求1所述分词操作其特征在于:
步骤1.取出输入文本的前导字符,在一级索引表中进行匹配,若存在则取出匹配字符节点,并设置为当前节点,检测当前节点是否有词条结束标志,如果有词条结束标志则输出一个匹配词条。
步骤2.取出输入文本的下一个字符,在当前节点的子节点列表中进行匹配,若存在则取出存在匹配字符节点,并设置为当前节点,检测当前节点是否有词条结束标志,如果有词条结束标志则输出一个匹配词条。重复步骤2进行后续字符匹配,直到输入文本匹配完毕或者无法匹配后续字符,输出所有带有词条结束标志的节点对应的词条组合。

7.
  如权利要求4所述添加词条操作和权利要求6所述分词操作其特征在于:
前向匹配和后向匹配的操作分别需要建立对应的一级索引表和HASH多叉树。进行添加词条操作、分词操作时,若是前向匹配则从前往后逐一提取输入字符,若是后向匹配则从后往前逐一提取字符,进行同样的算法匹配。
进一步的说,如果匹配操作不区分英文字母大小写,则将字符统一到大写或者小写即可。

说明书

一种快速分词的实现方法
技术领域
本发明涉及计算机自然语言处理领域,尤其涉及一种快速分词的实现方法。
背景技术
自然语言处理(Natural Language Processing简称NLP)是计算机人工智能和语言学领域的交叉学科。此领域中探讨如何处理及运用自然语言,实现人与计算机之间用自然语言进行有效信息交换。自然语言理解系统把自然语言转化为计算机程序更易于处理的形式。搜索引擎发展成为互联网的基础应用,使得人们能够方便的进行信息的检索,在这个过程中自然语言处理技术得到了很大的推进。
英文是以单词为单位的,句中的单词靠空格隔开,而中文等语言是以字为单位,句子中所有的字连起来才能描述一个意思。例如,英文句子He like apple,用中文则为:“他喜欢苹果”。计算机可通过空格分隔符知道like是一个单词,但要明白“喜”、“欢”两个字合起来才表示一个词则需要进行更多的处理和运算。把文字序列切分成有意义的单独的词,就是分词,有时也称为切词。他喜欢苹果,分词的结果是:他喜欢苹果。在对中文等语言的自然语言处理过程中,需要自动对中文文本进行词语的切分,即像英文那样使得中文句子由字的序列转换为词的序列。中文自动分词被认为是中文自然语言处理中的一个最基本的环节。分词的性能将直接影响自然与语言处理系统的整体性能。
计算机中央处理器(CPU)的计算能力正在不断的增强,存储器的容量和性价比也在不断的提升,与此同时待处理数据也在不断的增加,从2006年到2010年,全球数字信息量将增长6倍,不断高速增长的自然语言文本数据,客观上需要高性能的分词方法以应对海量文本数据的处理。
自动分词的过程是将连续文本进行正向和反向潜在词语切割,罗列出所有潜在的词语组合。在需要最优切割路径的应用中,可先前切出的潜在的词语组合中借助最长匹配、最短路径、概率统计等评估方法,计算出最优的切割路径。因此进行正向和反向潜在词语切割的速度直接决定了分词系统的性能。
发明内容
针对高性能、海量自然语言文本处理的需求,本发明的目的是提供快速分词系统的实现方法。
本发明是这样实现的:一种快速分词的实现方法,包括以下主要过程和步骤:
基于词条查找树的快速分词方法,词条查找树由一级索引表和HASH多叉树构成。一级索引表是数组,通过下标直接访问,可快速缩小搜索范围,时间复杂度为常数。HASH多叉树是基于HASH的多叉树,即每个节点的子节点列表通过HASH散列,查找的时候平均时间复杂度为常数。通过词条添加操作构建词条查找树,利用词条查找树进行快速分词。
所述HASH多叉树:
HASH多叉树和一级索引表相连,以进一步加快词条查找树的搜索速度。
HASH多叉树中的节点为字符节点,字符节点至少包含:字符值,词条结束标志,子节点数,子节点列表,在上级节点中的HASH冲突的下一个兄弟节等信息。子节点列表是通过HASH散列的列表。
HASH桶的大小由子节点数确定,并在增加子节点时自动扩展,并根据新HASH桶大小重新构造节点。动态增长的HASH桶可以减少HASH冲突,同时保证匹配效率和资源利用率。通过子节点数获得最佳HASH桶的大小,可事先好的值的对应表,以加快计算速度。
根据HASH值获得HASH位置的操作,用与操作替换取模操作可以加快运算速度,即HASH值和一个特定值进行与运算来获得HASH索引,该特定值和HASH桶大小相关,可以取小于HASH桶大小且BIT位连续为1的最大值,可事先好的值的对应表,以加快计算速度。
所述一级索引表:
前导字符是首先取出并处理的字符,可快速缩小搜索范围。前导字符和一级索引表密切相关,前导字符的数目等于一级索引表的维数。前导字符至少可以为1个,对应的快速索引表的记录数为256(1×256)。如果最小词条字节数均不小于2则前导字符可以为2个,对应的快速索引表的记录数为65536(256×256)。256是字符值的个数(0-255)。
添加词条操作:
步骤1.从被添加词条中取出前导字符,在一级索引表中进行匹配。若记录不存在,为前导字符构造字符节点,并将该节点加入到一级索引表中,并记录为当前节点;若记录存在,则直接记为当前节点。
步骤2.取出被添加词条的下一个字符,在当前节点的子节点列表中进行匹配。如果不存在,则为该字符构造一个字符节点,并添加到当前节点的子节点列表中,并记录新添加节点为当前节点;如果存在则直接设置为当前节点。重复步骤2的过程,直到被添加词条所有字符被加入。
步骤3.在最末节点上设置词条结束标志。
进一步的说,所述词条添加操作:
添加字符节点到当前节点的子节点列表的过程,是添加元素到HASH多叉树的过程。通过该字符的值作为HASH值,计算其在HASH桶中的索引位置,该索引位置已有节点以链表的形式组织。将该节点作为首节点加入到该链表中,并记录在HASH桶的对应索引位置。
若添加过程中需要扩展当前节点,则申请一块新空间,并构造新的当前节点,并将旧节点进行回收。判断是否需要扩展的依据是HASH桶大小是否无法容下新的子节点数。
分词操作:
步骤1.取出输入文本的前导字符,在一级索引表中进行匹配,若存在则取出匹配字符节点,并设置为当前节点,检测当前节点是否有词条结束标志,如果有词条结束标志则输出一个匹配词条。
步骤2.取出输入文本的下一个字符,在当前节点的子节点列表中进行匹配,若存在则取出存在匹配字符节点,并设置为当前节点,检测当前节点是否有词条结束标志,如果有词条结束标志则输出一个匹配词条。重复步骤2进行后续字符匹配,直到输入文本匹配完毕或者无法匹配后续字符,输出所有带有词条结束标志的节点对应的词条组合。
进一步说,所述添加词条操作、所述分词操作:
前向匹配和后向匹配的操作分别需要建立对应的一级索引表和HASH多叉树。进行添加词条操作、分词操作时,若是前向匹配则从前往后逐一提取输入字符,若是后向匹配则从后往前逐一提取字符,进行同样的算法匹配。进一步的说,如果匹配操作不区分英文字母大小写,则将字符统一到大写或者小写即可。
系统启动初始化操作:
词条存储在持久存储介质中,可以以文件或者数据库表的形式进行组织,每个词条对应持久文件的存储记录。存储记录可包含词条文本,和应用所需的词性等附加信息。系统从词条存储模块读取所有词条,将读出词条逐一送入词条添加模块,添加模块执行词条添加操作,将词条加入到词条查找树中。
附图说明
下面结合附图,对本发明作出详细描述。
图1为添加BE词条后的词条查找树结构图
图2为添加BT词条后的词条查找树结构图
图3为添加BUT词条后的词条查找树结构图
图4为添加所有示例词条后的词条查找树结构图
具体实施方式
本发明是通过将词条添加到词条查找树中,实现快速的词条添加、分词操作。
本发明构造的词条查找树如图4所示,一级索引表作为检索的入口,和HASH多叉树相连。
本实施案例中取前导字符数为1,对应的一级索引表为256条记录;字符节点的子节点列表每次按照2的整次方大小进行申请。
重点阐述由本发明方法实现的系统最主要的两大功能,词条添加,基于词条匹配的分词的实现过程。
“词条添加”:
以从空置系统中依次添加BE,BT,BUT,BUSH,BUSY,BOX,BOY等词条为例进行说明。
添加词条BE
步骤1.取出词条的前导字符B,在一级索引表中进行直接下标检索,不存在,申请一块新空间用于构建B字符节点,并将该节点添加到一级索引表中,并记录为当前节点。
步骤2.取出下一个字符E,在当前B字符节点的子节点列表中进行HASH检索(此时HASH桶为空)。不存在,申请一块新空间用于构建E字符节点,当前字符B节点的HASH桶大小为0,扩展当前字符B节点到可以存下2个(始终保持2的N次方大小),扩展过程为先申请新空间,将老节点中的子节点列表在新块中重新构造,回收老的字符节点。将该E字符节点加入到当前B字符节点的子节点列表,设置当前节点为E字符节点。
步骤3.词条结束,将当前E字符节点的完整词条标志设置为真,如图1所示。
添加词条BT
步骤1.取出词条的前导字符B,在一级索引表中进行直接下标检索,已存在,将该B字符节点设置为当前节点。
步骤2.取出下一个字符T,在当前B字符节点的子节点列表中进行HASH检索。HASH检索的方法是,将E字符的值84作为HASH值,当前HASH桶大小为2,对应的HASH索引位置为0,检测该位置记录的链表中是否有字符为E的节点。记录不存在,申请一块新空间用于构建T字符节点,并将该T字符节点加入到当前B字符节点的子节点列表,设置为T字符节点为当前节点。
步骤3.词条结束,将当前T字符节点的完整词条标志设置为真,如图2所示。
添加词条BUT
步骤1.取出词条的前导字符B,在一级索引表中进行直接下标检索,已存在,将该B字符节点设置为当前节点。
步骤2.取出下一个字符U,在当前B字符节点的子节点列表中进行HASH检索,不存在,当前字符B节点的HASH桶大小为2,需要存第3个子节点,扩展当前字符B节点到最大可以存下4个子节点的大小,然后申请一块新空间用于构建U字符节点,回收老的字符节点,并将该U字符节点加入到当前B字符节点的子节点列表,设置U字符节点为当前节点。
步骤3.取出下一个字符T,在当前U字符节点的子节点列表中进行HASH检索,不存在,当前字符U节点的HASH桶大小为0,扩展当前字符U节点到可以存下2个子节点的大小,申请一块新空间用于构建T字符节点,回收老的字符节点,并将该T字符节点加入到当前U字符节点的子节点列表,设置T字符节点为当前节点。
步骤4.词条结束,将当前T字符节点的完整词条标志设置为真,如图3所示。
按照上述添加BT,BE,BUT过程依次继续添加BUSH,BUSY,BOX,BOY等词条,最后形成如图4所示的词条查找树的结构。
分词:
输入字符串BOXBEBUSY进行分词,在基于如图4所示的词条查找树中进行分词。
步骤1.将字符串BOXBEBUSY进行分词,取出1个前导字符B,在一级索引表中查找到B字符节点,检测未发现词条结束标志,将其记录为当前节点;
步骤2.取出下一字符O,在当前B字符节点的子节点列表中进行HASH检索,找到O字符节点,检测未发现词条结束标志,将O字符节点记录为当前节点;
步骤3.取出下一个字符X,在当前O字符节点的子节点列表中进行HASH检索,找到X字符节点,检测发现词条结束标志,记录匹配词条BOX到结果集中,将X字符节点记录为当前节点;
步骤4.取出下一字符节点B,在当前X字符节点的子节点列表中进行HASH检索,未找到B字符节点,结束匹配操作。记录词条BOX。
步骤5.将去掉BOX部分的剩余BEBUSY字符送入分词,基于如图4所示的词条查找树中进行分词,取出1个前导字符B,在一级索引表中查找到B字符节点,检测未发现词条结束标志,将其记录为当前节点;
步骤6.取出下一字符E,在当前B字符节点的子节点列表中进行HASH检索,找到E字符节点,检测发现词条结束标志,记录匹配词条BE到结果集中,将E字符节点记录为当前节点;
步骤7.取出下一个字符B,在当前E字符节点的子节点列表中进行HASH检索,未找到B字符节点,未找到B字符节点,结束匹配操作。记录词条BE。
步骤8.将去掉BE部分的剩余BUSY字符串送入词条分词,基于如图4所示的词条查找树中进行分词,取出1个前导字符B,在一级索引表中查找到B字符节点,检测未发现词条结束标志,将其记录为当前节点;
步骤9.取出下一字符U,在当前B字符节点的子节点列表中进行HASH检索,找到U字符节点,检测未发现词条结束标志,将U字符节点记录为当前节点;
步骤10.取出下一个字符S,在当前U字符节点的子节点列表中进行HASH检索,找到S字符节点,检测未发现词条结束标志,将S字符节点记录为当前节点;
步骤11.取出下一个字符Y,在当前S字符节点的子节点列表中进行HASH检索,找到Y字符节点,检测发现词条结束标志,记录匹配词条BUSY到结果集中;无剩余字符,结束匹配操作。记录词条BUSY。
分词结果为“BOX”“BE”“BUSY”。

一种快速分词的实现方法.pdf_第1页
第1页 / 共15页
一种快速分词的实现方法.pdf_第2页
第2页 / 共15页
一种快速分词的实现方法.pdf_第3页
第3页 / 共15页
点击查看更多>>
资源描述

《一种快速分词的实现方法.pdf》由会员分享,可在线阅读,更多相关《一种快速分词的实现方法.pdf(15页珍藏版)》请在专利查询网上搜索。

本发明公开了一种基于词条查找树的快速分词方法,词条查找树由一级索引表和HASH多叉树构成。一级索引表是数组,通过下标直接访问,可快速缩小搜索范围,时间复杂度为常数。HASH多叉树是基于HASH的多叉树,即每个节点的子节点列表通过HASH散列,查找的时候平均时间复杂度为常数。通过本发明的词条查找树能利用相对较少的内存资源,获得近乎常数时间复杂度的分词功能,可支持大型词典,满足海量文本信息的分析需求。。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1