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

  • 12
  • 0
  • 约1.24万字
  • 约 21页
  • 2017-12-26 发布于江西
  • 举报
庖丁解牛算法代码解读_y

庖丁解牛算法解读目录1引言21.1编写目的21.2程序框架:22Paoding分词算法82.1算法基本思想描述82.2庖丁系统的核心内容82.3算法计算详细步骤92.3.1庖丁分词策略92.3.2max-word-length102.3.3most-words122.4词典152.4.1词典类型152.4.2词典加载流程152.4.3词典文件格式162.4.4读取词典文件162.4.5词典编译172.4.6编译词典时间测试172.4.7词典变更侦测183举例说明184参考资料21引言庖丁系统是个完全基于lucene的中文分词系统,它就是重新建了一个analyzer,叫做PaodingAnalyzer,这个analyer的核心任务就是生成一个可以切词TokenStream。编写目的本文档详细阐述了庖丁分词算法的基本思想,该文档可供研究庖丁分词算法设计人员分析阅读。程序框架Knife包beef类实现了charSequence变量:char[] value:文本字符数组offset:字符的起始位置,字符开始位置,即charAt(i)返回value[offset+i]字符count:从offset位置开始的字符数hash:beef的hash code函数:beef(char[] value,intoffset,int count):初始化字符数组、起始位置、从起始位置开始字符数set(int offset,intcount)设置offset,countgetvalue()getCount()getOffset()charAt(int index):覆盖了chaAt(int)方法,获取指定位置offset+index的字符,返回之前进行了预处理:1)统一大小写格式;2)全角转半角length(): return countsubsequence(intstart,int end):return from offset+start with length of end-starthashCode():根据value中字符值迭代计算返回一个int,作为value[]的keyCharSet类判断字符是阿拉伯数字或者CJK或者拉丁字母toNumber(char):统一数字格式,0,零,0,统一为0CJKKnife类实现了Knife,DictionariesWare是处理汉字的刀,定义了变量:Dictionary vocabulary 主字典Dictionary noiseWords不常见的词Dictionary noiseCharactors不常见的单个字Dictionary units 量词词典方法:SetDictionaries(Dictionaries):设置上述四种词典assignable(beef,intoffset,int index):得到beef中第index个字符的性质CJK 返回 AssignedIndexoffset :如果是阿拉伯数字,拉丁字母,连接线返回 Point其他返回 Limitdissect(collector,beef,offset)是CJK刀分词的最主要方法。首先确定适合CJK刀分词的起始位置和结束位置,然后外层循环遍历起始位置,内层循环遍历结束位置,如果匹配成功后发现前面有孤立词,首先进行孤立词分词,然后收集匹配成功的词。返回下一刀切词的起始位置。dissectIsolated(collector,beef,offset,limit)对孤立字符串分词。调用collectNumber(collector,beef,offset,limit,binoffset)BinDissect(collector,beef,int,int)二元切词i.X -X 单个字的孤立字符串作为一个词ii.XY -XY 只有两个字的孤立字符串作为一个词iii.XYZ -XY/YZ 多个字(=3)的孤立字符串两两组合作为一个词iv.WXYZ -WX/XY/YZ 同上collectNumber(collector,beef,offset,limit,binoffset)如果数字后面跟有单位,单位词单独进行收集SkipNoiseWords(collector,beef,offset,end,binoffset)如果offset+2的词在noisewords词典中查到,则收集该词,如果没有返回offsetBinDissect(collector,beef,int,int)孤立词二元切词方法如果孤立词长度为1,直接收集该词,不为1则进行二元切词shouldBeWord(beef,int,int)遇到单引号,书名号,单尖括号,则中间的词为一个词Collector接口Collector接收Knife切割文本得到的词语。CollectorStdou

文档评论(0)

1亿VIP精品文档

相关文档