基于python的分词算法的实现(1) - 算法
来源:互联网 发布:pdf转换dwg软件 编辑:程序博客网 时间:2024/04/30 11:19
从网络上搜索分词算法,可以找到一个很有名的开源项目ictclas(http://ictclas.org/)。这个算法是基于概率的。概率的确是个好玩意,很多语言层面难以简单概括的东西,用一个概率就可以描绘其很多的特征。
最简单的,假设我们知道每一个词在汉语言里出现的概率,并且假设这个概率和其它的词不相关,我们就可以设计这样的一个分词算法,使得分词结果中的词出现的概率最大。也就是优化
P(Words)=P(Word1)*P(Word2)...
这样足够好了么?有一个笑话:用“天真”造句,小朋友答“今天天真好”。这句话的原意是“今天|天|真好”,“天”和“真”在两个词中,所以这其实是一个错误的造句。如果用我们最大化词概率的方法对其进行分词,很不幸,分词的结果会是“今天|天真|好”。因为“今天”和“天真”都是高概率的词,所以分词算法很自然的就把它们分出来了。
现在之前算法的缺点就一目了然了,它假设单个词出现的概率和它的上下文是不相关的,而没有分析汉语中一些的特征,例如汉语句法结构或者是词性的搭配关系,所以就会造出如“今天|天真”之类的句子。如果要考虑词之间的相关性,那需要优化的目标可以表达为
P(Words)=P(Word1|Words_-1)*P(Word2|Words_-2)*P(Word3|Words_-3)....
Words_-n是分词结果中除了第n个词之外的词。这个优化目标过于复杂,要知道P(Wordn|Words_-n)的值近乎是不可能的。简化起见,对于第n个词,我们只考虑它之前出现的词
P(Words)=P(Word1)*P(Word2|Word1)*P(Word3|Word1_2)...
这样看上去简单的许多,但P(Wordn|Word1_n-1)依然是一个很难知道的量。所以,这里需要进一步的简化,就是对于每一个词,我们只考虑它前面的一个词,于是优化目标变成
P(Words)=P(Word1)*P(Word2|Word1)*P(Word3|Word2)...
简化到现在,这个算法终于简单到可以实现的程度了。P(Word2|Word1)就是两个词连续出现的概率。如果我们拥有大量的资料,这个概率是可以通过统计的方法获得的。事实上,这就是ictclas的算法的核心的部分。
- 基于python的分词算法的实现(1) - 算法
- 基于python的分词算法的实现(3) - 建立字典
- 中文分词的python实现-基于FMM算法
- 中文分词的python实现-基于HMM算法
- 中文分词的python实现-基于HMM算法
- 基于python实现的mmseg中文分词算法实现及其优化
- 基于python的分词算法的实现(2) - 字典的选择
- 基于Spark上的中文分词算法的实现
- 基于字典的中文分词算法RMM,MM实现
- 分词算法的python实现(正向最大匹配法)
- mmseg中文分词算法的python实现及其优化
- 基于规则的中文分词算法
- 基于感知器的中文分词算法
- 基于字典的中文分词算法RMM
- 中文分词算法——基于统计的分词
- 基于Python的朴素贝叶斯算法实现
- 基于python的简单 RSA算法实现
- 基于一阶 HMM 标注序列算法的分词算法解析
- split方法和转义字符
- 无法删除 找不到指定路径
- 固定点的另外三种变形
- 下载oracle
- 我对DDD的认知(一)
- 基于python的分词算法的实现(1) - 算法
- 通过崩溃地址找出源代码的出错行(转载)
- shuffle算法
- 禁用USB存储设备
- javascript获取URL查询字符串
- 替换关键字 程序到优化
- 今天刚开通CSDN,写个程序先
- MCS笔记
- Android学习笔记(二五): 多信息显示-ExpandableListView的使用