没有合适的资源?快使用搜索试试~ 我知道了~
庖丁解牛算法代码解读_y.docx
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 54 浏览量
2022-05-30
10:33:39
上传
评论
收藏 186KB DOCX 举报
温馨提示
试读
22页
庖丁解牛算法代码解读_y.docx
资源推荐
资源详情
资源评论
庖丁解牛算法解读
- 0 -
目录
1 引言.........................................................................................................................................................2
1.1 编写目的..........................................................................................................................................2
1.2 程序框架..........................................................................................................................................2
2 PAODING 分词算法.............................................................................................................................8
2.1 算法基本思想描述..........................................................................................................................8
2.2 庖丁系统的核心内容......................................................................................................................8
2.3 算法计算详细步骤..........................................................................................................................9
2.3.1
庖丁分词策略
..........................................................................................................................9
2.3.2 max-word-length.....................................................................................................................10
2.3.3 most-words..............................................................................................................................13
2.4 词典................................................................................................................................................16
2.4.1
词典类型
................................................................................................................................16
2.4.2
词典加载流程
........................................................................................................................16
2.4.3
词典文件格式
........................................................................................................................17
2.4.4
读取词典文件
........................................................................................................................17
2.4.5
词典编译
................................................................................................................................17
2.4.6
编译词典时间测试
................................................................................................................18
2.4.7
词典变更侦测
........................................................................................................................18
3 举例说明...............................................................................................................................................19
4 参考资料...............................................................................................................................................21
- 1 -
1 引言
庖丁系统是个完全基于 lucene 的中文分词系统,它就是重新建了一个 analyzer,
叫做 PaodingAnalyzer,这个 analyer 的核心任务就是生成一个可以切词 TokenStream。
1.1 编写目的
本文档详细阐述了庖丁分词算法的基本思想,该文档可供研究庖丁分词算法设计人员
分析阅读。
1.2 程序框架
Knife 包
beef 类实现了 charSequence
变量:
char[] value:文本字符数组
offset:字符的起始位置,字符开始位置,即 charAt(i)返回 value[offset+i]字符
count:从 offset 位置开始的字符数
hash:beef 的 hash code
函数:
beef(char[] value,int offset,int count):初始化字符数组、起始位置、从起始位置开始字符数
set(int offset,intcount)设置 offset,count
getvalue()
getCount()
getOffset()
charAt(int index):覆盖了 chaAt(int)方法,获取指定位置 offset+index 的字符,返回之前进行
- 2 -
了预处理:1)统一大小写格式;2)全角转半角
length(): return count
subsequence(int start,int end):return from offset+start with length of end-start
hashCode():根据 value 中字符值迭代计算返回一个 int,作为 value[]的 key
CharSet 类
判断字符是阿拉伯数字或者 CJK 或者拉丁字母
toNumber(char):统一数字格式,0,零,0,统一为 0
CJKKnife 类实现了 Knife,DiconariesWare
是处理汉字的刀,定义了
变量:
Dictionary vocabulary 主字典
Dictionary noiseWords 不常见的词
Dictionary noiseCharactors 不常见的单个字
Dictionary units 量词词典
方法:
SetDictionaries(Dictionaries):设置上述四种词典
assignable(beef,int offset,int index):得到 beef 中第 index 个字符的性质
CJK 返回 Assigned
Index>offset :如果是阿拉伯数字,拉丁字母,连接线 返回 Point
其他 返回 Limit
dissect(collector,beef,offset)
是 CJK 刀分词的最主要方法。
首先确定适合 CJK 刀分词的起始位置和结束位置,然后外层循环遍历起始位置,内层循环
遍历结束位置,如果匹配成功后发现前面有孤立词,首先进行孤立词分词,然后收集匹配
成功的词。
返回下一刀切词的起始位置。
dissectIsolated(collector,beef,offset,limit)
对孤立字符串分词。
调用 collectNumber(collector,beef,offset,limit,binoffset)
BinDissect(collector,beef,int,int)二元切词
i. X ->X 单个字的孤立字符串作为一个词
- 3 -
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 词典中查到,则收集该词,如果没有返回 offset
BinDissect(collector,beef,int,int)
孤立词二元切词方法
如果孤立词长度为 1,直接收集该词,不为 1 则进行二元切词
shouldBeWord(beef,int,int)
遇到单引号,书名号,单尖括号,则中间的词为一个词
Collector 接口
Collector 接收 Knife 切割文本得到的词语。
CollectorStdoutImpl 类实现 Collector 接口
CombinatoricsKnife 抽象类实现 Knife,DiconariesWare
组合刀:遇到需要用 letterKnife,numberKnife 刀切词的统一用组合刀切词
定义变量:
Dictionary combinatoricsDictionary;
HashSet/* <String> */noiseTable value 为 noiseWords
- 4 -
剩余21页未读,继续阅读
资源评论
oligaga
- 粉丝: 52
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功