`

lucene 分词原理2

阅读更多

建立索引和查询的过程中,都是以基本的语素项为单位的。基本的语素项就是通过分词得到。这个过程决定了索引单元金额最终的匹配过程。 

分词在文本索引的建立过程和用户提交检索过程中都存在。利用相同的分词器,把短语或者句子切分成相同的结果,才能保证检索过程顺利进行。 

1、 英文分词的原理 

基本的处理流程是:输入文本、词汇分割、词汇过滤(去除停留词)、词干提取(形态还原)、大写转为小写、结果输出。 

2、 中文分词原理 

中文分词比较复杂,并没有英文分词那么简单。这主要是因为中文的词与词之间并不像英文中那样用空格来隔开。 

主要的方法有三种:基于词典匹配的分词方法、基于语义理解的分词、基于词频统计的分词。 

①      基于词典匹配的分词方法 

基于字典匹配的分词方法按照一定的匹配策略将输入的字符串与机器字典词条进行匹配。如果在词典中找到当前字符串,则匹配成功输出识别的词汇。按照匹配操作的扫描方向不同,字典匹配分词方法可以分为正向匹配和逆向匹配,以及结合了两者的双向匹配算法;按照不同长度优先匹配的情况,可以分为最大(最长)匹配和最小(最短)匹配;按照是否与词性标注过程相结合,又可以分为单纯分词方法和分词与词性标注相结合的方法。几种常用的词典分词方法如下所示: 

● 正向最大匹配(由左到右的方向)。 

● 逆向最大匹配(由右到左的方向)。 

● 最少切分(是每一句中切除的词数最小)。 

实际应用中上述各种方法经常组合使用,达到最好的效果,从而衍生出了结合正向最大匹配方法和逆向最大匹配算法的双向匹配分词法。由于中分词最大的问题是歧义处理,结合中文语言自身的特点,经常采用逆向匹配的切分算法,处理的精度高于正向匹配,产生的切分歧义现象也较少。 

真正实用的分词系统,都是把词典分词作为基础手段,结合各种语言的其他特征信息来提高切分的效果和准确度。有的实用系统中将分词和词性标注结合起来,利用句法和词法分析对分词决策提高帮助,在词性标注过程中迭代处理,利用词性和语法信息对分词结果进行检验、调整。 

既然是基于分词词典的分词方法,当然还要考虑选择一个好的查找词典算法。一般有数字搜索树, Trie 算法等等。 

所谓的数字搜索树( retrieve 树)就是要求树的一个节点保留一个字符。如果一个单词比一个字符长,则包含第一个字符串的节点有指向下一个字符的节点,以此类推。这样组成一个层次结构的树,树的第一层包括所有单词的第一个字符,树的第二层包括所有单词的第二个字符,以此类推,数字搜索树的最大高度是词典中最长单词的长度。但是这样的树,每一个节点都需要很多内存。假设每个词都是由一个小写英文字母组成的,这个节点中会有 26 个指针。所以不太可能直接用这样的数字搜索树来存储中文这样的大字符集。 

Trie 树,即三叉搜索树,每一个节点包括一个字符,但只有三个指针,一个指向左边的树,一个指向右边的树,还有一个向下,指向单词的下一个数据单元。三叉搜索树是二叉搜索树和数字搜索树的混合体。它有和数字搜索树差不多的速度但是和二叉搜索树一样只需要相对较少的内存空间。单词的读入顺序对于创建平衡的三叉搜索树很重要,但对于二叉搜索树就不是太重要了。由于限于篇幅,这里就不写上代码了。 

②      基于语义理解的分词 

基于语义理解的分词方法是模拟人脑对语言和句子的理解,达到识别词汇单元的效果。基本模式是把分词、句法、语义分析并行进行,利用句法和语义信息来处理分词的歧义。 

一般结构中通常包括分词子系统、句法语义子系统、调度系统。在调度系统的协调下,分词子系统可以获得有关词、句子等的句法和语义信息,模拟人脑对句子的理过程。基于语义理解的分词方法需要使用大量的语言知识和信息。 

目前国内外对汉语语言知识的理解和处理能力还没有达到语义层面,具体到语言信息很难组织成机器可直接读取、计算的形式,因此目前基于语义理解的分词系统还处在试验阶段。 

③      基于词频统计的分词 

这种做法基于人们对中文词语的直接感觉。通常词是稳定的词的组合,因此在中文文章的上下文中,相邻的字搭配出现的频率越多,就越有可能形成一个固定的词。根据 n 元语法知识可以知道,字与字相邻同时出现的频率或概率能够较好地反映成词的可信度。 

实际的系统中,通过对精心准备的中文语料中相邻共现的各个字的组合的频度进行统计,计算不同字词的共现信息。根据两个字的统计信息,计算两个汉字的相邻共现概率。统计处来的信息体现了中文环境下汉字之间结合紧密程度。当紧密程度高于某一个阈值时,便可认为此字组可能构成一个词。 

基于词频统计的分词方法只需要对语料中的字组频度进行统计,不需要切分词典,因而又叫做无词典分词法或统计分词方法。这种方法经常抽出一些共现频度高、但并不是词的常用字组,需要专门处理,提高精确度。实际应用的统计分词系统都使用一个基本的常用词词典,把字典分词和统计分词结合使用。基于统计的方法能很好地解决词典未收录新词的处理问题,即将中文分词中的串频统计和串匹配结合起来,既发挥匹配分词切分速度快、效率高的特点,有利用了无词典分词结合上下文识别生词、自动消除歧义的优点。 

3、 Lucene 分词 

在 Lucene3.0 中,对分词主要依靠 Analyzer 类解析实现。 Analyzer 内部主要通过 TokenStream 类实现。 Tonkenizer 类, TokenFilter 类是 TokenStream 的两个子类。 Tokenizer 处理单个字符组成的字符流,读取 Reader 对象中的数据,处理后转换成词汇单元。 TokneFilter 完成文本过滤器的功能,但在使用过程中必须注意不同的过滤器的使用的顺序。

分享到:
评论

相关推荐

    Lucene与中文分词技术的研究及应用

    2. **配置Lucene**:在Lucene的配置文件中指定自定义的中文分词器。 3. **索引构建**:使用中文分词器构建索引。 4. **查询优化**:对查询语句进行预处理,提高搜索精度。 #### 应用实例 本论文中提到了基于Lucene...

    Lucene3.0分词系统.doc

    Lucene3.0分词系统的核心在于理解和应用其分词原理,无论是对于英文还是中文文本,这一过程都是构建高效搜索引擎的基础。以下是对Lucene3.0分词系统中涉及的关键知识点的深入解析。 ### 英文分词原理 英文分词相较...

    Lucene的原理完整版pdf

    **Lucene原理详解** Lucene是一个高性能、全文检索库,由Apache软件基金会开发并维护,是Java编程语言中广泛使用的搜索引擎库。它提供了一个简单但功能强大的API,用于索引和搜索文本数据,使得开发者可以轻松地在...

    lucene中文分词工具包

    2. **预处理**:在正式分词之前,文本会经过预处理阶段。这通常包括去除标点符号、数字转换、特殊字符处理等,以减少后续分词的复杂性。 3. **分词器分词**:这是核心步骤,IKAnalyzer采用动态调优算法,能够在运行...

    Lucene 3.0 原理

    2. **分词器(Analyzer)**:在 Lucene 3.0 中,分词器负责将输入的文本拆分成可搜索的单元。它可以处理各种语言的特殊字符和语法,如英语的停用词、中文的词语切分等。用户可以根据需求选择或自定义合适的分词器。 ...

    c# Lucene.net 原理 代码分析加强版

    《C# Lucene.net原理与代码分析加强版》是一份深度解析Lucene.net搜索引擎库的文档,涵盖了全文检索的基本原理、Lucene的总体架构、索引文件格式以及索引过程和段合并等核心主题,旨在为开发人员提供深入理解Lucene...

    lucene中文分词

    首先,我们要理解Lucene的基本工作原理。Lucene是一个开源的全文检索库,它提供了索引和搜索功能,能够快速地在大量文本中找到相关的文档。然而,由于中文词汇之间没有明显的边界,如英文单词间的空格,因此在对中文...

    Solr5.5搜索引擎之分词原理说明.docx

    Solr5.5 搜索引擎之分词原理说明 Solr5.5 搜索引擎之分词原理说明是指 Solr5.5 搜索引擎内部使用的分词原理,旨在帮助开发者自定义自己的分词器时掌握分词的基础知识。 1. 中文分词 中文分词是指将中文汉字序列切...

    Lucene 3.0 原理与代码分析完整版

    《Lucene 3.0 原理与代码分析完整版》是一本深入解析Lucene 3.0搜索引擎库的专业书籍。Lucene是Apache软件基金会的开源项目,它为Java开发者提供了一个高性能、全文检索的工具包,广泛应用于各种信息检索系统。这...

    Lucene 原理与代码分析完整版

    本文将对Lucene的基本原理及其实现的代码进行分析。 首先,全文检索的基本原理包括索引的创建与搜索过程。在索引创建过程中,文档首先经过分词组件Tokenizer拆分成词元Token,然后经过语言处理组件...

    Lucene.Net +盘古分词 搜索引擎

    **正文** Lucene.Net是一个基于Apache Lucene的全文检索库,专门为.NET Framework设计。...通过深入理解Lucene.Net的内部机制和盘古分词的工作原理,可以进一步优化搜索性能,满足不同场景的需求。

    lucene工作原理.docx

    【Lucene工作原理详解】 Lucene是一个开源的全文搜索引擎库,由Apache软件基金会维护,它提供了文本分析、索引创建、搜索以及相关的功能,适用于Java开发者构建自己的全文搜索应用程序。其核心工作原理主要涉及以下...

    Lucene+原理与代码分析完整版

    《Lucene原理与代码分析》全面解析 Lucene是一个开源的全文搜索引擎库,由Apache软件基金会开发并维护,广泛应用于各种信息检索系统中。它主要使用Java语言编写,因此在Java开发环境中应用尤为广泛。本篇文章将深入...

    LUCENE搜索引擎基本工作原理

    2. **预处理**:Lucene对抓取的内容进行分词,即进行词典化(Tokenization),将连续的文本分割成独立的词汇单位(Token)。同时,它还会执行其他预处理操作,如去除停用词(Stopwords)、词干提取(Stemming)和词...

    lucene.net中文分词器

    附带的源代码是理解这个分词器工作原理的重要资源。通过阅读和分析代码,开发者可以了解到如何在Lucene.NET中集成自定义分词器,以及如何实现最大向前匹配算法的具体细节。这为其他开发者提供了参考和学习的机会,也...

    lucene原理与代码分析完整版

    ### Lucene原理与代码分析概览 #### 一、全文检索基本原理 全文检索是一种能够检索文档中任意词语的信息检索技术。与简单的关键词查询不同,全文检索不仅关注文档标题、元数据,还深入到文档的实际内容中去。这种...

    Lucene.net 盘古分词字典管理

    运行这个程序,我们可以直观地看到分词效果,理解盘古分词的工作原理,并学习如何进行字典的管理和维护。 总的来说,了解并熟练掌握Lucene.NET 和盘古分词的集成,以及字典管理技巧,对于开发高效的中文全文搜索...

    Lucene原理

    通过深入理解Lucene的工作原理,并结合Analyzer的定制、查询优化策略以及性能调优,开发者可以构建出满足特定需求的高性能搜索引擎。同时,Lucene也提供了丰富的API,便于与其他系统集成,如Solr和Elasticsearch等,...

    lucene 原理与代码分析

    《Lucene原理与代码分析》深入探讨了几乎最新版本的Lucene的工作机制和代码实现细节,为理解全文搜索引擎的核心技术提供了宝贵的资源。以下是对该文件关键知识点的详细解析: ### 全文检索的基本原理 #### 总论 ...

Global site tag (gtag.js) - Google Analytics