一种基于词典的中文分词法的设计与实现
es中英文分词

es中英文分词Elasticsearch(简称为es)是一种开源分布式搜索引擎,广泛用于各种应用场景中,如全文搜索、日志分析、实时推荐等。
在多语言环境下,es对中英文的分词处理尤为重要。
本文将介绍es中英文分词的原理和实现方式。
一、中文分词中文文本由一系列汉字组成,而汉字与字之间没有明确的分隔符。
因此,中文分词就是将连续的汉字切分成有意义的词语的过程。
es中的中文分词器使用了基于词典匹配和规则引擎的方式进行分词。
1. 词典匹配基于词典匹配的中文分词器会将待分析的文本与一个中文词典进行匹配。
词典中包含了中文的常用词汇。
当待分析的文本与词典中的词汇相匹配时,就将其作为一个词语进行标记。
这种方法简单高效,适用于大部分中文分词场景。
2. 规则引擎规则引擎是一种基于规则的匹配引擎,它可以根据事先定义好的规则来对文本进行处理。
es中的规则引擎分词器可以根据指定的规则对中文文本进行分词操作。
这种方式的优点是可以根据具体的分词需求编写灵活的规则,适应不同语料库的分词要求。
二、英文分词英文文本中的词语之间通常以空格或标点符号作为分隔符。
因此,英文分词的目标是将文本按照空格或标点符号进行分隔。
es中的英文分词器使用了基于空格和标点符号的切分方式。
它会将空格或标点符号之间的文本作为一个词语进行标记。
如果文本中包含连字符或点号等特殊符号,分词器会将其作为一个整体进行标记。
三、多语言分词es还支持多语言环境下的分词处理。
对于既包含中文又包含英文的文本,es可以同时使用中文分词器和英文分词器进行处理。
这样可以将中文和英文的词语分开,并分别进行索引,提高搜索的准确性和效率。
四、自定义分词器除了内置的中文分词器和英文分词器,es还提供了自定义分词器的功能。
用户可以根据自己的需求,编写自己的分词规则或使用第三方分词工具,然后将其配置到es中进行使用。
在es中,可以通过设置分词器的类型、配置分词规则和添加自定义词典等方式来实现自定义分词器。
tiktoken中文分词原理

tiktoken中文分词原理1.概述在自然语言处理(NL P)领域中,中文分词是一个重要的任务,它的目标是将连续的中文字符序列切分成有意义的词语。
ti kt ok en是一个开源的中文分词工具,它基于最大匹配算法和字典树的方法来实现中文分词。
本文将介绍t ik to ke n中文分词工具的原理及其运行过程。
2.最大匹配算法最大匹配算法是一种常用的中文分词算法,它基于词典中最长的词汇进行切分。
t ik to ken利用了最大匹配算法来进行分词。
具体而言,t ik to ken首先将待切分的句子按照最大切分长度划分为几个子句。
然后,它从每个子句的起始位置开始,逐渐增大切分长度,不断寻找匹配的词汇。
当找到匹配的词汇时,t ik to ke n将该词汇作为一个分词结果,并将切分位置移动到下一个子句的起始位置。
这个过程重复进行,直到所有子句都被分词为止。
最大匹配算法的一个关键问题是如何确定最大切分长度。
t ikt o ke n使用了统计信息和机器学习的方法来动态地确定最佳的最大切分长度,以提高分词的准确性。
3.字典树字典树(Tr ie)是一种树状数据结构,它能够高效地存储和查找字符串。
ti kt ok en利用了字典树来储存中文词汇信息,以支持最大匹配算法的快速匹配过程。
字典树的每个节点代表一个字符,从根节点到叶节点的路径表示一个完整的词汇。
ti kt ok e n在分词过程中通过比对待切分句子的字符与字典树节点的字符,来确定最大匹配的词汇。
4. ti ktoken的运行过程t i kt ok en的运行过程可以概括为以下几个步骤:4.1构建字典树t i kt ok en首先从一个大型的中文词汇库中提取出所有的词汇,并构建字典树。
这个字典树将作为最大匹配算法的匹配模型。
4.2切分子句t i kt ok en将待切分的句子按照标点符号或其他符号进行划分,形成若干个子句。
每个子句都将作为最大匹配算法的输入。
4.3最大匹配对于每个子句,ti kt o ke n从起始位置开始,逐渐增大最大切分长度,利用字典树进行匹配。
基于双词典机制的中文分词系统设计

目前有三 种典 型 的 中文 自动 分词 词 典 机 制 , 分 别 是基 于整词二 分 的词 典 机制 、 基于 T RI E索 引 树 的 分 词 词典机 制和 基于逐 字二 分 的分 词词 典机 制啪 。整 词 二 分法是 一种 广为使 用 的分词 词典机 制 ] 。本设 计 采 用 一种 双词典 机制 , 它 由改进 的整词 二分 法标 准词 典 、 辅 助 的临时词 典和 临时 高频词 表三 部分组 合 而成 。
按 照一定 策略将 待分 析汉 字 串与词典 中 的词条进 行 匹 配, 若 在词 典 中找到某 个字 符 串 , 则 匹配成 功 。该 方法 需 要确定 三个要 素 : 词典 、 扫描方向、 匹 配 原则[ 2 ] 。基 于 字符 串匹配 的分词方 法 原理简 单 , 实现相 对容 易 , 并 能达 到较 高的准 确度 , 是 最 常用 的分词 策略 , 缺 陷是容 易产 生歧义 切分 。词典 是字 符 串匹配 的分 词方法 中很 重要 的基础 部分 , 因此 该 方 法 又 称 为基 于 词 典 的分 词
表 l 首 字 结 点 结 构 表
2 . 1 . 2 词 索引表 根据统计 , 汉语词语 中二字词 占大多数 , 有 3万多 ,
2 双 词典设计
其次是三 字词 和 四字词 , 都 是 3千 多 , 五字 词及 以后 则 很少 。所 以二 、 三、 四字 词的查 询 效率 直接 影 响分词 速 度 。为提高查询效率 , 本词索 引表结 点具体设计见表 2 。 I 二字 词起l 二字词 l 三 字词起I 三字 词l 四 字词起l 四字词I 多字词起 f 始位 置 f个 数 I 始位置 }个 数 } 始位置 1个 数 J 始位置 J 若 要 匹配 的词 为二 字词 , 从“ 二字 词 起 始位 置 ” 到 “ 三字 词起始位 置” 间进行查 询 。以此类推 。 2 . 1 . 3 标准词典 正文 标准 词典正 文为 线性 表 结 构 , 存储 每个 词 条 中除 首字外 的字 串 , 以及通 过 语 料库 学 习后 统 计 出的该 词 条的总词 频 。字 串与 总词频 间用“ / ” 间隔 , 字 串间用 空 格 作为 间隔 。 对 同一首字 的词条 , 首先按 词条 的字数顺 序排 列 , 同长度词 条则按 次字 的区位 码 排 序 , 以 此类 推 。首 字
manticoresearch 中文分词

manticoresearch 中文分词Manticoresearch中文分词Manticoresearch是一款基于Sphinx开源搜索引擎的全文检索服务器,它支持中文分词,能够有效地处理中文文本的搜索需求。
本文将介绍Manticoresearch中文分词的原理和应用。
一、中文分词的重要性中文是一种复杂的语言,词汇之间没有明显的分隔符号,这给中文文本的处理带来了困难。
而在搜索引擎中,准确的分词是实现精确搜索的基础。
因此,中文分词在搜索引擎的应用中显得尤为重要。
二、中文分词的原理Manticoresearch中文分词采用了基于词典和规则的分词算法。
首先,它通过预先构建一个词典,将常见的词汇和词组进行记录和归类。
然后,在进行分词时,Manticoresearch会根据词典中的信息进行匹配,将文本中的词汇进行切分。
三、Manticoresearch中文分词的应用1. 搜索引擎Manticoresearch中文分词的主要应用场景就是搜索引擎。
通过对用户输入的搜索关键词进行分词,Manticoresearch能够更好地理解用户的搜索意图,并提供更加精确的搜索结果。
2. 文本分析除了搜索引擎,Manticoresearch中文分词还可以应用于文本分析。
通过对文本进行分词,可以统计词频、提取关键词、进行文本分类等操作,从而实现对文本内容的深入分析。
3. 建立索引Manticoresearch中文分词还可以应用于建立索引。
在进行全文检索时,通过对文本进行分词并建立索引,可以加快搜索速度,并提高搜索结果的准确性。
四、Manticoresearch中文分词的优势1. 高效性Manticoresearch中文分词采用了高效的分词算法,能够快速处理大规模中文文本。
2. 精确性Manticoresearch中文分词基于词典和规则,能够准确识别中文词汇,避免了分词错误和歧义。
3. 可定制性Manticoresearch中文分词提供了词典的定制功能,可以根据具体的需求灵活调整词典内容,提高分词的准确性和适应性。
简述中文分词算法的种类和基本原理

简述中文分词算法的种类和基本原理下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。
文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!本店铺为大家提供各种类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you! In addition, this shop provides you with various types of practical materials, such as educational essays, diary appreciation, sentence excerpts, ancient poems, classic articles, topic composition, work summary, word parsing, copy excerpts, other materials and so on, want to know different data formats and writing methods, please pay attention!探索中文分词算法的种类与基本原理1. 导言中文分词是自然语言处理中的基础任务之一,其目的是将连续的中文文本切分成有意义的词语单位。
分词算法java

分词算法java分词算法是自然语言处理中常用的一种技术,它将一段文本按照一定的规则进行切分,将文本切分为一个个独立的词语。
在Java语言中,有许多成熟的分词算法库可以使用,例如HanLP、IKAnalyzer 等。
本文将介绍分词算法的原理和在Java中的实现。
一、分词算法的原理分词算法的目标是将一段文本切分成一个个独立的词语,这需要解决两个问题:词语的界定和词语的切分。
词语的界定是指如何确定一个词语的开始和结束位置,而词语的切分是指如何将文本按照词语的界定进行切分。
在分词算法中,通常采用两种方法来确定词语的界定:基于字典和基于统计。
基于字典的方法是将文本与一个词典进行匹配,词典中包含了各种词语的信息,包括词语的开始和结束位置。
基于统计的方法则是根据词语在语料库中的出现频率来确定词语的界定。
词语的切分是指将文本按照词语的界定进行切分。
在切分过程中,通常采用正向最大匹配和逆向最大匹配两种方法。
正向最大匹配是从左到右依次匹配文本中的词语,将匹配到的词语作为一个切分结果;逆向最大匹配则是从右到左依次匹配文本中的词语,将匹配到的词语作为一个切分结果。
最后,通过比较正向最大匹配和逆向最大匹配的结果,选择其中一个结果作为最终的分词结果。
二、Java中的分词算法实现在Java语言中,有许多开源的分词算法库可以使用。
以下将介绍两种常用的分词算法库:HanLP和IKAnalyzer。
1. HanLPHanLP是一款自然语言处理工具包,其中包含了多种分词算法。
HanLP支持中文分词、词性标注、命名实体识别等多种功能。
使用HanLP进行分词只需简单几行代码即可实现。
需要下载HanLP的jar包,并将其导入到Java项目中。
然后,可以使用以下代码进行分词:```import com.hankcs.hanlp.HanLP;import mon.Term;public class Segmentation {public static void main(String[] args) {String text = "这是一段测试文本";List<Term> termList = HanLP.segment(text);for (Term term : termList) {System.out.println(term.word);}}}```上述代码中,首先创建了一个文本字符串,然后使用HanLP.segment()方法对文本进行分词,返回一个包含分词结果的列表。
Nutch中文分词的设计与实现

随着 I tr e 应 用 的 日益 普及 ,搜 索引 擎作 为提供 资源 检索 服务 的工具 已经成 为人们 通过 网络 获取 信 nen t 息 的重要渠 道 ,正在深 刻影 响着 我们 的生 活[ . C 1 ] NNI C公 布 的最 新数 据 显示 :2 0 0 9年 ,搜 索 引擎 的使 用
中图 分 类 号 :TP 3 1 1 9 . 文 献标 识码 :A 文 章 编 号 :1 7 — 4 2 ( 0 0 40 5 — 4 6 3 1 9 2 1 )0 —0 3 0
De i n a d I p e e t to fChi e e W o d S g e a i n i t h sg n m lm n a i n o n s r e m nt to n Nu c
Ab ta t Fa e t o n m a d ofCh ne e i or ton r t iva ,N u c s a p a f m fop n sr c c d wih gr wi g de n i s nf ma i e re l t h a l tor o e s r e s a c n n s f v e y m a y de e o e s Nut h i a e he Engls ys e , wih t t e ou c e r h e gi e i a or d b n v l p r . c s b s d on t ih s t m t ou h c p ct f Chi s a a iy o ne e wor s g e t to d e m n a i n, S i O t ha a ve y pr c ia i fc nc o e lzn t e Chi e e s r a tc l sgniia e f r r a ii g h n s
中文分词案例

中文分词案例中文分词是自然语言处理中的一个重要任务,其目的是将连续的中文文本切分成单个的词语。
中文分词在很多应用中都起到了关键作用,例如机器翻译、信息检索、文本分类等。
本文将以中文分词案例为题,介绍一些常用的中文分词方法和工具。
一、基于规则的中文分词方法1. 正向最大匹配法(Maximum Matching, MM):该方法从左到右扫描文本,从词典中找出最长的词进行匹配,然后将该词从文本中删除。
重复这个过程,直到文本被切分完毕。
2. 逆向最大匹配法(Reverse Maximum Matching, RMM):与正向最大匹配法相反,该方法从右到左扫描文本,从词典中找出最长的词进行匹配,然后将该词从文本中删除。
重复这个过程,直到文本被切分完毕。
3. 双向最大匹配法(Bidirectional Maximum Matching, BMM):该方法同时使用正向最大匹配和逆向最大匹配两种方法,然后选择切分结果最少的作为最终结果。
二、基于统计的中文分词方法1. 隐马尔可夫模型(Hidden Markov Model, HMM):该方法将中文分词问题转化为一个序列标注问题,通过训练一个隐马尔可夫模型来预测每个字的标签,进而切分文本。
2. 条件随机场(Conditional Random Fields, CRF):与隐马尔可夫模型类似,该方法也是通过训练一个条件随机场模型来预测每个字的标签,进而切分文本。
三、基于深度学习的中文分词方法1. 卷积神经网络(Convolutional Neural Network, CNN):该方法通过使用卷积层和池化层来提取文本特征,然后使用全连接层进行分类,从而实现中文分词。
2. 循环神经网络(Recurrent Neural Network, RNN):该方法通过使用循环层来捕捉文本的时序信息,从而实现中文分词。
四、中文分词工具1. 结巴分词:结巴分词是一个基于Python的中文分词工具,它采用了一种综合了基于规则和基于统计的分词方法,具有较高的准确性和速度。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一种基于词典的中文分词法的设计与实现摘要:中文分词就是把没有明显分隔标志的中文字串切分为词串,它是其他中文信息处理的基础,广泛应用于搜索引擎、自动翻译、语音合成、自动分类、自动摘要、自动校对等领域。
就中文分词的基本方法作了简单阐述,并介绍了一种基于词典采用最大匹配法实现中文分词的方法。
关键词:中文分词;词库索引;正向最大匹配法1 中文分词中文分词技术属于自然语言处理技术范畴,对于一句话,人可以通过自己的知识来明白哪些是词,哪些不是词,但如何让计算机也能理解?其处理过程就是分词算法。
1.1中文分词方法的种类中文自动分词方法有多种,一般来说大致可归结为以下三大类:基于词典的分词方法、基于统计的分词方法、基于规则和基于统计相结合的分词方法[2]。
1.1.1基于词典的分词方法。
基于词典的分词方法,又叫做基于字符串匹配的分词方法。
其基本思想是:事先建立词库,其中包含所有可能出现的词。
对于给定的待分词的汉子串Str,按照某种确定的原则切取Str 的子串,若该子串与词库中的某词条相匹配,则该子串是就是词,继续分割其余的部分,直到剩余部分为空;否则,该子串不是词,转到上面重新切取Str的子串进行匹配。
1.1.2基于统计的分词方法。
基于词典分词方法要借助词典来进行,而中文的构词非常灵活,词的数目几乎是无限的,因此要构造完备的词典几乎是不可能的。
鉴于上述分词方法存在的这些缺点,一种基于统计的分词方法应运而生。
这种方法撇开词典,根据字串出现的频率来判断这个字串是否是词。
该方法对于大的语料,分全率还可以,但是对于小的语料分全率就比较低。
该方法的另一个缺点就是不够准确,有些经常一起出现的单字构成的字串其实不是词。
但是由于出现的频率很高,就被分出来当作词处理了,而且这样的“词”还非常多, 例如“这一”、“之一”、“有的”、“我的”、“许多的”等。
实际应用的统计分词系统都要使用一部基本的分词词典进行串匹配分词,同时使用统计方法识别一些新的词,即将串频统计和串匹配结合起来,既发挥匹配分词切分速度快、效率高的特点,又利用了无词典分词结合上下文识别生词、自动消除歧义的优点。
1.1.3基于规则和基于统计相结合的分词方法。
该方法首先运用最大匹配作初步切分,然后对切分的边界处进行歧义探测,发现歧义,最后运用统计和规则相结合的方法来判断正确的切分[4]。
运用不同的规则解决人名、地名、机构名识别,运用词法结构规则来生成复合词和衍生词。
日前这种方法可以解决汉语中最常见的歧义类型:单字交集型歧义。
并对人名、地名、机构名、后缀、动词/形容词重叠、衍生词等词法结构进行识别处理,基本解决了分词所面临的最关键的问题。
若词典结构和算法设计优秀,分词速度将非常快。
1.2分词中的难题有了成熟的分词算法,是否就能容易的解决中文分词的问题呢?事实远非如此。
中文是一种十分复杂的语言,让计算机理解中文语言更是困难。
在中文分词过程中,有两大难题一直没有完全突破。
1.2.1歧义识别。
歧义是指同样的一句话,可能有两种或者更多的切分方法。
例如:“表面的”,因为“表面”和“面的”都是词,那么这个短语就可以分成“表面的”和“表面的”,这种称为交叉歧义,像这种交叉歧义十分常见。
“化妆和服装”可以分成“化妆和服装”或者“化妆和服装”。
由于没有人的知识去理解,计算机很难知道到底哪个方案正确。
交叉歧义相对组合歧义来说是还算比较容易处理,组合歧义就必需根据整个句子来判断了。
例如,在句子“这个门把手坏了”中,“把手”是个词,但在句子“请把手拿开”中,“把手”就不是一个词;在句子“将军任命了一名中将”中,“中将”是个词,但在句子“产量三年中将增长两倍”中,“中将”就不再是词。
这些词计算机又如何去识别?如果交叉歧义和组合歧义计算机都能解决的话,在歧义中还有一个难题,是真歧义。
真歧义意思是给出一句话,由人去判断也不知道哪个应该是词,哪个应该不是词。
例如:“羽毛球拍卖完了”,可以切分成“羽毛球拍卖完了”、也可切分成“羽毛球拍卖完了”,如果没有上下文其他的句子,恐怕谁也不知道“拍卖”在这里算不算一个词。
1.2.2新词识别。
新词,专业术语称为未登录词。
也就是那些在字典中都没有收录过,但又确实能称为词的那些词。
最典型的是人名,人可以很容易理解句子“刘雷虎去广州了”中,“刘雷虎”是个词,因为是一个人的名字,但要是让计算机去识别就困难了。
如果把“刘雷虎”做为一个词收录到字典中去,全世界有那么多名字,而且每时每刻都有新增的人名,收录这些人名本身就是一项巨大的工程。
即使这项工作可以完成,还是会存在问题,例如:在句子“刘雷虎头虎脑的”中,“刘雷虎”还能不能算词?新词中除了人名以外,还有机构名、地名、产品名、商标名、简称、省略语等都是很难处理的问题,而且这些又正好是人们经常使用的词,特别是对搜索引擎来说,分词系统中的新词识别十分重要。
目前新词识别准确率已经成为评价一个分词系统好坏的重要标志之一。
2 基于词典的正向最大匹配中文分词法设计与实现2.1算法设计最大正向匹配法(Maximum Mathching Method)通常简称为MM法。
其基本思想为:假定分词词典中的最长词有i个汉字字符,则用被处理文档的当前字串中的前i个字作为匹配字段,查找字典。
若字典中存在这样的一个i字词,则匹配成功,匹配字段被作为一个词切分出来。
如果词典中找不到这样的一个i字词,则匹配失败,将匹配字段中的最后一个字去掉,对剩下的字串重新进行匹配处理…… 如此进行下去,直到匹配成功,即切分出一个词或剩余字串的长度为零为止。
这样就完成了一轮匹配,然后取下一个i字字串进行匹配处理,直到文档被扫描完为止。
其算法描述如下:2.1.1初始化当前位置计数器,置为0;2.1.2从当前计数器开始,取前2i个字符(一个汉字两个字符)作为匹配字段,直到文档结束;2.1.3如果匹配字段长度为0,则当匹配字段的最后一个字符为汉字字符时,当前位置计数器的值加2,否则当前位置计数器的值加1,跳转到步骤2.1.2;如果匹配字段长度不为0,则查找词典中与之等长的作匹配处理。
如果匹配成功,则:a.把这个匹配字段作为一个词切分出来,放入分词统计表中;b.把当前位置计数器的值加上匹配字段的长度;c.跳转到步骤2.1.2。
否则:a.如果匹配字段的最后一个字符为汉字字符,则把匹配字段的最后一个字去掉,匹配字段长度减2,跳转至步骤2.1.3;b.如果匹配字段的最后一个字符为西文字符,则把匹配字段的最后一个字节去掉,匹配字段长度减1,跳转至步骤2.1.3。
2.2词库组织由于采用的是基于词典匹配的分词方法,因而词库是分词系统的基础。
整个分词过程实际上就是在词典上的查找匹配的过程,因而词库的组织相当重要。
假设词典存放在一个文本文件里,每一个词条由两项组成,一个是词的wordID、另一个是词本身。
那么可以在词典上加上静态索引,进行分组管理并在上面添加三级索引[1]。
首先对词条按字数分组,字数相同的词条放在同一组里,并对词典按首汉字的内码从小到大排序。
一级索引是加在各个分组上,一级索引记录了各分组的开始位置,再根据下一分组的起始位置可以确定当前分组的终止位置。
二级索引是加在一级索引内部的,在同一组内部由于有很多的词条,二级索引是按词的首汉字内码建立的,它加在以不同汉字开头的词条组中,这样通过二级索引可以进一步缩小查找范围。
另外在汉字中以有些字开头的词条过多,这样进行匹配的次数过多,不利于提高匹配速度。
因而在二级索引的基础之上添加一个三级索引,它是按照一定的密度间隔添加,我设定了一个默认的合理的值就是每隔50个词条添加一个三级索引,同样三级索引也是根据汉字内码添加的(三级索引和二级索引的定义相同)。
词条及索引的定义如下://根据汉字内码建立的索引结点(二级和三级索引)typedef struct CodeIndexNode{char KeyValue[17];int nIndex;}CodeIndex;//根据词语字数建立的一级索引结点typedef struct WordsIndexNode{int nKeyCount;int nKeyBeginIndex;int nKeyEndIndex;int CodeIndexCount;}WordsIndex;//关键字结点typedef struct KeyWordNode{CString strKeyWord; //关键字int nID; //关键字ID};2.3 切分方法由于采用的是基于词库匹配的正向最大匹配算法(通常简称为MM法),设D为词典,MAX 表示D中的最大词长,str为待切分的字串。
MM法是每次从str中取长度为MAX的子串与D中的词进行匹配。
若成功,则该子串为词,指针后移MAX个汉字后继续匹配,否则子串逐次减一进行匹配。
2.3.1读取词库,并读取相应的静态索引,建立词库上的索引;2.3.2读取待切分的字串str;2.3.3从待切分字串str中取出一个长度为MAX的子串substr,到词典中去匹配,若匹配成功则取下一个长度为MAX的子串进行匹配,否则将子串sstr从后面截去一个字后继续匹配,直到匹配成功或者子串substr中只有一个字为止。
若匹配成功则从匹配成功的词的位置开始再截取下一长度为MAX的子串substr进行匹配,依次循环直到将str串匹配完为止。
2.3.4匹配过程:首先根据子串substr的长度(这里指的是字数)确定一级索引也就是确定分组,这个过程可以二分查找法,也可以采用Hash函数直接定位,但是由于分组数很少(不会超过20)因而两种方法没有多大的区别。
在确定了分组后再根据首汉字的内码确定二级索引,因为二级索引是按内码从小到大的顺序因而可采用拆半查找方法,找到以后再确定三级索引,这样将进行匹配的过程缩小到一个很小的范围,在这个范围内匹配不成功则进行下一个串的匹配。
通过确定三级索引确定了进行匹配的最小词条集。
2.4 切分结果的保存由于数据量很大,切分结果不能全存放在内存中,所以每处理完一文档就将其切分结果存放到外部文件中,这里可以借助其它关系型数据库来完成,在数据库中存放的字段主要有:文档ID、词ID、词权值等。
2.5存在的问题及改进。
2.5.1在词库组织方面采用静态的索引不利于词库的变化,若有一新词出现,则需要重建整个词库的索引,因为下标都发生了变化,这不利于词库的扩充。
因而词库的索引可采用动态生成,在读取词库的同时构建索引,但是这种方法对于查询器会产生一个不利影响,因为查询器也需要读取词库而构建索引的过程比较费时间,这样用户查询时会有一定的延时,所以应根据需要采用一种折衷的办法。
2.5.2词的ID分配机制也有些不足,这里的ID都是跟词的内码相关,也就是跟词在词库中的排序顺序有关,这样若有新词添加进来后,就会改变其后面所有词的ID。