中文分词
对于英文句子来说,可以通过空格
来切分单词,如
// 今天天气不错
the weather is nice today
可以很简单的把该句子中的单词区分出来
the/weather/is/nice/today
在中文里面,就没有那么方便的区分方法了。当然,如果你习惯这样说话:
今天 天气 不错
大家也不会打你,只会觉得你像个“结巴”
(点题了!)
为什么需要分词?
在中文里面的字
和英文单词
是两个不同的东西。在读书的时候,最痛苦的一件事就是学习文言文,我想了一下,有大于等于三个原因:
- 不知道在哪里断句
- 字或词的含义很多
- 这个字是通假字(它不是这个它,它是那个它),或者说纯粹就是写错了,但是细想一下也能读的通。
我们常说中文博大精深,历史原因就不细究了,简单来说就是,我们的祖先在中文上的造诣非常高,好几层楼那么高,研究非常透彻,一句话能说出几个意思。我们自小在中文环境下成长,经过千锤百炼,读写是没问题的,但是计算机要怎么理解一句话呢?先从分词开始。
计算机学习分词的过程,和人类是很像的(或许这是局限性),目前有几种:
- 基于字符串匹配。按一定的策略在一个已分好词的大词典中搜寻,若找到则视为一个词。
- 统计。大量已经分词的文本,利用统计机器学习模型学习词语切分的规律(训练),从而实现对未知文本的切分。
- 组合。结合1、2点,如
结巴分词
。
我们学习中文的时候,也有这样的过程,
- 积累词语(建立词典)
- 训练不同词语在不同句子中的含义的概率(权重),选择具有最大概率(权重)的含义的词语(动态规划,寻找切分组合)
结巴分词是什么?
结巴分词
是国内程序员用python
开发的一个中文
分词模块, 源码被托管在Github
为了方便说明,下面截取了部分文档和例子。
特点
- 精确模式,试图将句子最精确地切开,适合文本分析
- 全模式,把句子中所有可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义
- 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词
- 支持繁体分词
- 支持自定义词典
- MIT 授权协议
例子
# encoding=utf-8
import jieba
seg_list = jieba.cut("我来到北京清华大学", cut_all=True)
print(