【Python+中文自然语言处理】(二) 中文分词工具包:jieba

前言

         目前中文分词算法可分为三大类:基于字符串匹配的分词方法、基于理解的分词方法和基于统计的分词方法随着大规模语料库的建立,统计机器学习方法的研究和发展,基于统计的中文分词方法渐渐成为了主流方法主要方法为:给出大量已经分词的文本,利用统计机器学习模型学习词语切分的规律(称为训练),从而实现对未知文本的切分。例如最大概率分词方法和最大熵分词方法等。

       主要统计机器学习模型:

  •        N元文法模型(N-gram),
  •        隐马尔可夫模型(Hidden Markov Model ,HMM),
  •        最大熵模型(ME),
  •        条件随机场模型(Conditional Random Fields,CRF)等。

     而NLP得工具包nltk处理中文的第一步障碍就是中文资料不是分好词的, 词语与词语之间没有空格。要使用nltk对中文进行处理, 首先的第一步就是中文分词(中文断词)。我们得认清现实,现实就是nltk不支持处理中文,因此,这个给国内很多自然语言处理的研究人员有了研究的空间了,国内目前几个比较好的中文分词工具如下:

  •        jieba【推荐】
  •        thulac(清华大学) :处理utf-8编码
  •        SnowNLP:处理unicode编码,使用时需要decode/unicode,包括情感分析部分的分词处理
  •        pynlpir
  •        CoreNLP
  •        pyNLP(哈工大)
  •        NLPIP:可处理少数民族语言的分词包

      我们完全可以使用其他的中文分词工具,将需要处理的资料分好词,然后再使用nltk进行处理。用nltk 处理中文,其重点在于中文分词和文本表达的形式。中文和英文主要的不同之处是中文需要分词。因为nltk 的处理粒度一般是词,所以必须要先对文本进行分词然后再用nltk 来处理(不需要用nltk 来做分词,直接用分词包即可,分词后,再对输出文本使用nltk进行相关处理。)

    本文只研究jieba分词工具包的原理与使用,jieba分词是国内程序员用Python开发的一个中文分词(Chinese Word Segmentation)模块

一、jieba安装

打开命令行,输入:

conda install jieba #anaconda环境
pip install jieba   #纯python环境

若能在相应环境内,import jieba成功,则表示工具包安装成功。

 

二、jieba+NLTK

      例如:参考如何用 Python 中的 NLTK 对中文进行分析和处理?

      用nltk 对中文网络商品评论进行褒贬情感分类的案例,计算评论的信息熵(entropy)、互信息(point mutual information)和困惑值(perplexity)等(nltk 提供了相应方法)。
      使用上述分词包进行中文分词之后,文本就是一个由每个词组成的长数组:[word1, word2, word3…… wordn]。之后就可以使用nltk 里面的各种方法来处理这个文本了。方法大致如下:

      ①用FreqDist 统计文本词频,

      ②用bigrams 把文本变成双词组的形式:[(word1, word2), (word2, word3), (word3, word4)……(wordn-1, wordn)]。

      ③将①、②所得进行文本词语的信息熵、互信息等的计算。
      ④将计算出的值用于选择机器学习的特征,构建分类器,对文本进行分类(商品评论是由多个独立评论组成的多维数组,网上有很多情感分类的实现例子用的就是nltk 中的商品评论语料库,不过是英文的。但整个思想是可以一致的)。

【补充】关于Python 中文编码问题:
      Python 解决中文编码问题基本可以用以下逻辑:utf8(输入) ——> unicode(处理) ——> utf8(输出)
Python 里面处理的字符都是都是unicode 编码,因此解决编码问题的方法是把输入的文本(无论是什么编码)解码为(decode)unicode编码,然后输出时再编码(encode)成所需编码。(Python3.x默认为unicode编码,Python2.x则需decode解码为unicode)
    由于处理的一般为txt 文档,所以最简单的方法,是把txt 文档另存为utf-8 编码,然后使用Python 处理的时候解码为unicode(sometexts.decode(‘utf8’)),输出结果回txt 的时候再编码成utf8(直接用str() 函数就可以了)。

 

猜你喜欢

转载自blog.csdn.net/walk_power/article/details/82956031