【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() 函數就可以了)。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章