`
everlook
  • 浏览: 112530 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

庖丁解牛分词分析

    博客分类:
  • java
阅读更多
    庖丁系统是个完全基于lucene的中文分词系统,因而它就是重新了一个analyer,叫做PaodingAnalyzer,这个analyer的核心任务就是生成一个可以切词的TokenStream这些都是lucene的结构设计,如果要和lucene一起使用就要这么写。
    庖丁系统中的TokenStream就是PaodingTokenizer,它提供了我们用于分词的核心方法
next,它每次调用的时候返回切好的一个词。它采用了一个迭代器来进行的缓存,因而它不
是每次调用都会去拿出一堆刀来进行切词,它一般会一次切一堆然后将它保存下来,然后等
取完了再切第二次。
    切词的时候它是直接调用了knifebox的dissect方法来进行切词的
    knifebox是个刀盒子,它有一个刀的数组,它的dissect方法会调用刀的assignable方法
来决定是否可以用这个刀来切,如果用一个刀切了,但是没有切出任何词,即刀返回的最后切词的位置与开始位置一样则换下把刀切,如果切出了词,那么就直接返回最后切的位置,再不换刀切了,同时等待下一次切词。
    在这个系统中还有paoding和SmartKnifeBox两个子类他们都是继承knifebox,但是它们只是做了一些简单的检查工作,主要工作还是由这个基类来完成。


    分词策略的问题,我们在代码中看见庖丁系统的分词,它在分词的时候尽量将多的词语分出来,但是在PaodingAnalyzer发现它是有两种mode,一种是MOST_WORDS_MODE,一种是MAX_WORD_LENGTH_MODE,从字面上就可以看出它们的策略,前者是表示尽可能多的分词,即“华中科技大学”直接分为“华中/华中科技/华中科技大学/科技/大学/”,在CJKKnife中
当它遇到“华中”的时候就会开始collect,然后它将移动结尾,在分出“华中科技”和“华中科技大学”,这样“华”开头的就切完了,然后它将跳出小循环,进入下一轮大循环,移动开头位置,即“中”字,继续采用这个策略来切词,这样可以分出像上面那么多的词来,而这种方式用在索引的时候最好,可以保证索引中有尽可能多的关键词,这样找到的机会就大些。如果采用后一种mode,它将直接将上面分出的“华中/华中科技/华中科技大学/科技/大学/”只将最长的一个collect了,而前者会将它们全部collect。


    前一节简单的提到了分词时候的两种策略,这两种策略的实现实际上是采用使用不同
的collect来实现的,MostWordsTokenCollector对应于最多词策略,MaxWordLengthTokenCollector对应于最长词的策略。在最长词策略中,它是采用将前词分解的词先不要记录下来(保存在list中)而是将它作为候选,如果后面的词与它有一样的开头并且比它长,就替换它,如果和它有一样头的所有词都没有它长则将它记录下来(加入List中)。
   至于这个mode策略的选择,它是在PaodingAnalyzerBean中进行的,它在PaodingAnalyzer的init函数中调用了父类PaodingAnalyzerBean中的setmode方法设置mode,同时它产生了一个相应的classtype,最后根据这个classtype来通过反射生成一个collect传入PaodingTokenizer,供它使用。


==================================================================================


CJK刀

   CJK刀是庖丁解牛的主要的一个切词的刀,它的效率决定了整个中文分词系统的好坏。
   CJK刀同样会先调用assignable函数来判断一下当前的字符是否适合使用此刀,这个函数是所有刀所必须调用的它是庖丁系统中重要的一部分,它通常在发现当前一个字符时候使用此刀的时候会使用一个循环一次记录下所有适合的字符在Beef中的启始位置,以便一次用这个刀来切分这一段字符串。
   接着它就要开始正式的处理字符串。由于中文分词的是以词典为中心,因而它会不断的截取词语来在词典中进行比较。首先它将确定截取词语的开始位置和结束位置,得到这个词语后,它将直接放入词库中进行比较,如果在词库中的话,它将collect,并将孤立词的开始位置和当前截取词的开始位置之间的部分作为孤立词进行分解。同时它将继续移动结束位置,也就是说将词的开始部分不动,延长词语的长度,如“华中科技大学”,发现了"华中"这个词后,它将继续找“华中科”这个词,这个词显然不在词库中,但它却是一个词的开头,因而它不能确定为孤立字符串,如果发现它不是一个词的前缀,那么就将孤立字符串的开始位置和当前词语的开始位置设置为确定的词典词语的结束位置。但当它发现孤立字符串的开始位置为不是-1,也就是说前面几个字符都是孤立的,而且当前字符也是孤立的,则不要移动孤立字符串的开始位置,只移动当前词语的开始位置。
   如果延长的词语仍然是一个词语则将它collect,同时继续移动词语的结束位置。
   如果确定开始切分孤立字符串则将对孤立字符串进行二分的切分,所谓二分的切分,基本是二个字一切,"XY"切为"XY","X"切为"X","WXYZ"切为
"WX/XY/YZ","XYZ"切为"XY/YZ"。


简单来来说就是:
   1.在切词的时候词库词语优先切词。
   2.不在词典中的词语二分切词
   3.找到词典词语的时候贪婪的切词,就是说找到一个词后,继续往下找,找到以这个字开头的所有词为止。


ps:把别人文章抄了一遍,便于以后查看
分享到:
评论

相关推荐

    庖丁解牛 中文分词工具

    "庖丁解牛"是一款专为中文处理设计的分词工具,其版本2.0.4-alpha2提供了更稳定和高效的分词体验。这个工具的核心功能是将中文文本拆分成有意义的词语,这对于中文信息处理、自然语言理解和搜索引擎优化等场景至关...

    庖丁解牛分词之自定义词库、庖丁解牛配置

    "庖丁解牛分词"是一个针对中文文本的分词工具,它借鉴了中国古代庖丁解牛的故事,寓意对文本进行精细、深入的剖析。这个工具的主要目标是帮助开发者更准确地切分中文句子,提取关键信息,从而提升搜索效率或理解文本...

    庖丁解牛分词 java包

    "庖丁解牛分词" 是一款针对中文文本处理的分词工具,主要适用于Java环境。这个工具包的名称形象地借用中国古代故事“庖丁解牛”,寓意对文本的精细处理,如同庖丁对牛肉的熟练分解。在Java开发中,分词是自然语言...

    lucene中文分词(庖丁解牛)庖丁分词

    “庖丁解牛”是针对Lucene设计的一款中文分词工具,取自古代典故,寓意对中文文本进行细致入微的分析。庖丁分词支持词典分词、基于统计的分词以及混合分词模式,能够满足不同场景下的需求。它的特点包括高精度、高...

    lucene3庖丁解牛中文分词器

    1. **引入库**:首先,我们需要将`paoding_lucene3_0530.jar`文件添加到项目的类路径中,这个库包含了庖丁解牛分词器的实现。 2. **配置字典**:利用`dic`目录下的字典文件,可以定制化分词器的词典,以适应特定...

    庖丁解牛工具

    "庖丁解牛工具"是一款基于Java开发的文本分析工具,尤其在中文分词领域有着广泛的应用。这个工具的名字来源于中国古代寓言故事“庖丁解牛”,寓意对文本的精细处理和深入理解,就像庖丁对牛肉的熟练切割一样。在IT...

    庖丁解牛分词器jar包

    Paoding's Knives 中文分词具有极 高效率 和 高扩展性 。引入隐喻,采用完全的面向对象设计,构思先进。 高效率:在PIII 1G内存个人机器上,1秒 可准确分词 100万 汉字。 采用基于 不限制个数 的词典文件对文章...

    庖丁解牛jarbao

    庖丁解牛分词器不仅适用于传统的服务器端应用,也可以在大数据处理、搜索引擎构建、机器学习模型的预处理等场景下发挥作用。它的易用性和高效性使其成为Java开发人员处理中文文本时的有力工具。通过深入理解并熟练...

    中文分词 庖丁解牛 2_0_0版本发布 - 企业应用

    【庖丁解牛 2_0_0版本】是一个专门针对中文分词的软件工具,其在企业应用中扮演着重要角色。中文分词是自然语言处理中的基础步骤,对于文本分析、信息检索、机器翻译等领域至关重要。在这个2_0_0版本的更新中,我们...

    庖丁解牛,一种中文分词器

    "庖丁解牛"分词器采用了先进的算法和技术来解决这个问题,包括基于词典的匹配、上下文信息分析以及统计学习方法等,使得它在处理中文文本时表现出了较高的准确性和效率。 "Lucene"是一个流行的开源全文搜索引擎库,...

    Lucene 庖丁解牛分词法2.4版本jar包

    然而,由于中文的复杂性,简单的英文分词策略无法满足需求,于是有了针对中文的分词方法——"庖丁解牛分词法"。该方法是专门为了解决Lucene在处理中文文本时的分词难题而设计的。在本文中,我们将深入探讨这一分词法...

    庖丁解牛 源码 for Lucene 2.4

    《庖丁解牛 源码 for Lucene 2.4》是一份针对开源全文搜索引擎Lucene 2.4版本的深度解析资料。这个压缩包包含的文件名为"paoding-for-lucene-2.4",很可能是针对中文处理的Paoding Lucene库的源代码分析或扩展。...

    庖丁解牛算法代码解读_y.docx

    本文的编写目的是为了帮助读者理解和掌握庖丁解牛分词算法的基本原理,以及其实现过程,从而能够应用到实际的自然语言处理项目中。 1.2 程序框架 庖丁解牛算法的程序框架包括预处理、分词策略、词典管理和后处理等...

    全文检索(庖丁解牛)

    在这里,"庖丁解牛"被用来形容一种精细的分词方法,它可能是指在进行全文检索时,对文本进行深入细致的分析,就像庖丁解剖牛一样,精确地识别和拆分出每个词语。 分词是全文检索的重要步骤,它将连续的文本序列分割...

    lucene Analyzer 庖丁解牛 中文分词

    这些方法可以处理一些常见的词汇组合,但也会产生歧义,如“中国银行”和“中国队”,分析器需要通过上下文判断正确的分词方式。 3. **停用词处理**:“的”、“和”、“在”等常用但对检索意义不大的词语被称为...

    Lucene加庖丁解牛测试类

    在这里,“庖丁解牛”用于形容对Lucene的深入理解和细致分析,即通过编写和运行测试类,逐步剖析Lucene的工作原理和功能特性。 Lucene的核心组件主要包括索引和查询两个部分。索引是Lucene处理大量文本数据的基础,...

    lucene最新版本加庖丁解牛实现搜索引擎

    《使用Lucene最新版与庖丁解牛方法构建搜索引擎》 在信息技术日新月异的今天,搜索引擎已经成为了我们获取信息的重要工具。Apache Lucene是一个高性能、全文本搜索库,被广泛应用于各种搜索引擎的开发中。本文将...

    hibernatesearch和庖丁解牛字典等常用驱动包集合,

    标题提到的"hibernatesearch"是Hibernate的一个扩展,它将全文搜索功能引入了Java应用程序,而"庖丁解牛字典"则可能是指一个用于数据库操作或数据解析的工具。让我们深入探讨这两个技术及其在实际开发中的应用。 **...

    庖丁分词jar包

    庖丁分词的设计理念是借鉴了古代厨师“庖丁解牛”的故事,寓意其在处理中文文本时能够像庖丁一样游刃有余,精准地进行分词。 在压缩包文件名称“paoding-analysis-2.0.0”中,“paoding”是庖丁分词的英文名称,...

Global site tag (gtag.js) - Google Analytics