学科分类
目录
数据分析

分词

分词是指将由连续字符组成的语句,按照一定的规则划分成一个个独立词语的过程。不同的语言具有不同的语法结构,以常见的英文和中文举例,英文的句子中是以空格为分隔符的,所以可以指定空格为分词的标记,而中文并没有一个形式上的分界符,它只有字、句和段能通过明显的分界符来简单地划分。因此,中文分词要比英文分词困难很多。

根据中文的结构特点,可以把分词算法分为以下三类:

  • 基于规则的分词方法

基于规则的分词方法,又称为机械分词方法,它是按照一定的策略将待分析的中文句子与一个“充分大的”机器词典中的词条进行匹配。如果在词典中找到了某个字或词语,则表示匹配成功。

基于规则的分词方法,其优点是简单且易于实现,缺点是匹配速度慢,而且不同的词典产生的歧义也会不同。

  • 基于统计的分词方法

基于统计的分词方法,它的基本思想是常用的词语是比较稳定的组合。在上下文中,相邻的字同时出现的次数越多,就越有可能构成一个词,所以字与字相邻出现的频率能够较好地反映成词的可信度。当训练文本中相邻出现的紧密程度高于某个阈值时,便可以认为此字组可能构成了一个词。

基于统计的分词方法所应用的主要统计模型有:N 元文法模型(N-gram)、隐马尔可夫模型(Hiden Markov Model,HMM)、最大熵模型(ME)、条件随机场模型(Conditional Random Fields,CRF)等。

  • 基于理解的分词方法

基于理解的分词方法是通过让计算机模拟人对句子的理解,达到识别词的效果,它的基本思想就是在分词的同时进行句法、语义分析,利用句法信息和语义信息来处理歧义现象。这种分词方法需要使用大量的语言知识和信息。

由于汉语语言知识的笼统、复杂性,难以将各种语言信息组织成机器可直接读取的形式,因此目前基于理解的分词系统还处在试验阶段。

要想在NLTK中实现对英文分词,则可以调用word_tokenize()函数基于空格或标点对文本进行分词,并返回单词列表。不过,需要先确保已经下载了punkt分词模型,否则函数是无法使用的。

比如现在有一句英文“Python is a structured and powerful object-oriented programming language.”,将这句话按空格进行划分,示例代码如下。

In [6]: # 原始英文文本
        sentence = 'Python is a structured and powerful 
        object-oriented programming language.'
        # 将句子切分为单词
        words = nltk.word_tokenize(sentence)
        words
Out[6]: ['Python', 'is', 'a', 'structured', 'and', 'powerful',
         'object-oriented', 'programming', 'language', '.']

从输出结果中可以看出,所有以空格分隔的英文字符被划分为多个子字符串,包括标点符号,这些子串存放在一个列表中。

jieba分词是国内使用人数最多的中文分词工具,它基于中文分词的原理,提供了相应的操作模块或方法。

例如,将上述句子换成由汉字组成的字符串“传智专修学院推出颠覆式办学模式”,则可以通过jieba.cut() 函数进行划分,该函数接收如下三个参数:

(1) 需要分词的字符串。

(2) cut_all参数用来控制是否采用全模式。

(3) HMM 参数用来控制是否使用 HMM 模型。

如果将cut_all参数设为True,则表示按照全模式进行分词,若设为False,则表示的是按照精确模式进行分词,示例代码如下。

In [7]: import jieba
        # 原始中文文本
        sentence = '传智专修学院推出颠覆式办学模式'
        # 全模式划分中文句子
        terms_list = jieba.cut(sentence, cut_all=True)
        print('【全模式】:'+ '/'.join(terms_list))
        # 精确模式划分中文句子
        terms_list = jieba.cut(sentence, cut_all=False)
        print('【精确模式】:'+ '/'.join(terms_list))

打印结果为:

【全模式】:传/智/专修/修学/学院/推出/颠覆/式/办学/模式
【精确模式】:传智/专修/学院/推出/颠覆/式/办学/模式

从输出结果中可以看出,整个句子按照某种规则划分成了多个不同的字或词语,不过在全模式下,词语中出现了重复的汉字,这表明全模式会把所有可能的分词全部输出,而在准确模式下,词语中不会再出现重复的汉字,并且划分的词语相对来说是比较精准的。

注意:

如果文本中出现了一些特殊的字符,比如@、表情符号(如“:)”)等,则可以使用正则表达式进行处理。

点击此处
隐藏目录