1.3 实战案例:第一个中文分词程序
在数据处理工作中,分词是一项必不可少的工作,本节使用Sublime Text完成第一个分词案例。下面介绍什么是中文分词及实现方法。
1.3.1 中文分词
中文分词是指将一个汉字序列切分成一个一个单独的词。分词就是将连续的字序列按照一定的规范重新组合成词序列的过程,在英文行文中,单词间以空格作为自然分界符,中文没有一个形式上的分界符,虽然英文也同样存在短语的划分问题,不过在词这一层上,中文比英文要复杂得多,也困难得多。
例如:
英文句子:I am a student.
中文意思:我是一名学生。
由于英文的语言使用习惯,通过空格很容易拆分出单词,而中文字词界限模糊,往往不容易区别哪些是“字”、哪些是“词”,这也是为什么要把中文词语进行切分的原因。
1. 中文分词的发展
与英文为代表的印欧语系语言相比,中文由于继承自古代汉语的传统,词语之间常没有分隔。古代汉语中除了联绵词和人名、地名等,词通常是单个汉字,所以当时没有分词书写的必要。而现代汉语中双字或多字词逐渐增多,一个字已经不再等同于一个词了。
在中文里,“词”和“词组”边界模糊,现代汉语的基本表达单元虽然为“词”,且以双字或者多字词居多,但由于人们认识水平的不同,对词和短语的边界还很难去区分。
例如:“对随地吐痰者给予处罚”,“随地吐痰者”本身是一个词还是一个短语,不同的人会有不同的标准,同样的,“海上”“酒厂”等即使是同一个人也可能做出不同的判断。如果汉语真的要分词书写,必然会出现混乱,难度也很大。中文分词的方法其实不局限于中文应用,也被应用于英文处理,例如帮助判别英文单词的边界等。
2. 中文分词的用途
中文分词是文本处理的基础,对于输入的一段中文,成功地进行中文分词,可以达到电脑自动识别语句含义的效果。中文分词技术属于自然语言处理技术的范畴,目前在自然语言处理技术中,中文处理技术比西文处理技术要落后很大一截,而许多西文的处理方法中文却不能直接采用,就是因为中文必须有分词这道工序。中文分词是中文信息处理的基础,搜索引擎就是中文分词的一个应用,其他的比如机器翻译(Machine Translation)、语音合成、自动分类、自动摘要、自动校对等,都需要用到分词。因为中文需要分词,可能会影响一些研究,但同时也为一些企业带来机会,因为国外的计算机处理技术要想进入中国市场,首先也是要解决中文分词问题。
中文分词对于搜索引擎来说,最重要的并不是找到所有的结果,因为在上百亿的网页中找到所有结果没有太多的意义,也没有人能看得完;相反,最重要的是把最相关的结果排在最前面,这也称为相关度排序。中文分词的准确与否,常常直接影响到对搜索结果的相关度排序。从定性分析的角度来看,搜索引擎的分词算法不同、词库的不同都会影响页面的返回结果。
1.3.2 实例介绍
本节实现一个有趣的应用。将电影《流浪地球》中的经典句子“道路千万条,安全第一条;行车不规范,亲人两行泪。”进行中文分词。这里需要使用第三方工具包结巴(jieba)来实现。
1.3.3 结巴实现中文分词
打开Sublime Text并在根目录PyDataPreprocessing下创建Chapter1文件夹,然后在Chapter1下面创建CutWords.py文件并打开。在编辑代码之前,先查看一下jieba包能否正常导入。按住Alt+Shift+2组合键进行分屏,然后按F6键进入Python IDE环境下,成功导入后如图1-18所示。
图1-18 Sublime Text下运行Python IDE
图1-18说明jieba包已经成功导入,编写如下代码(源代码见:Chapter1/CutWords.py):
代码说明:
其中第1行是对中文编码进行设置;第3-7行是注释信息;第9行导入jieba分词模块;第14行的调用jieba模块中的cut方法对字符串分词,数据以列表(List)形式返回;第15行是格式化分词结果,将List数据转化为String数据打印出来。运行代码查看结果,如图1-19所示。
图1-19 中文分词的结果