1. 程式人生 > >[八]機器學習之隱馬爾科夫模型HMM

[八]機器學習之隱馬爾科夫模型HMM

8.1 目標任務

1.用jieba庫實現中文詞性標註

2.用SnoeNLP庫實現中文詞性標註

8.2 實驗資料

novel.txt

8.3 實驗過程

8.3.1 實驗準備

1.安裝jieba庫:

pip install jieba

jieba庫繁體分詞和自定義詞典,它支援三種分詞模式:

精確模式,試圖將句子最精確地切開,適合文字分析

全模式,把句子中所有的可以成詞的詞語都掃描出來,速度非常快,但是不能解決歧義

搜尋引擎模式,在精確模式的基礎上,對長詞再次切分,提高召回率,適合用於搜尋引擎分詞

下載地址:https://pypi.python.org/pyp/jieba

2.安裝SnowNLP庫:

pip install snownlp

SnowNLP受到了TextBlob的啟發而撰寫的中文處理python類庫,自帶一些訓練好的字典。可完成中文分詞、詞性標註、情感分析、文字分類、文字轉拼音、繁體轉簡體、提取文字關鍵詞、提取文字摘要等功能。

下載地址:https://github.com/isnowfy/snownlp

3.安裝nlth庫:

pip install nltk

自然語言工具包(nltk)是用於處理自然語言語法及語義分析的python庫,它提供超過50個語料庫和詞典資源,文字處理庫包括分類、分詞、詞幹提取、解析、語義推理。

下載地址:

https://pypi.python.org/pypi/nltk

如果使用的anaconda安裝的python,則已經自動匯入了nltk,只需下載資料包到python安裝目錄即可。

8.3.2 資料的輸入輸出

將輸入資料檔案放到自己指定的目錄下,輸出即可在命令列,也可輸出到txt檔案檢視。

8.3.3 實驗步驟

實驗一、使用jieba進行中文詞性標註

1.匯入jieba庫

將工作路徑切換到python安裝目錄,輸入pip2 install jieba,等待下載安裝即可。

2.匯入成功後將工作路徑切換到資料檔案所在目錄

進入python環境,輸入以下命令:

import jieba
import jieba.posseg
filein = open('./novel.txt','r')
str = filein.read()
seg = jieba.posseg.cut(str)
l = []
for i in seg:
    l.append((i.word,i.flag))

print l

實現分詞:

可將分詞結果輸出到檔案:

import jieba
import jieba.posseg
filein = open('./novel.txt','r')
str = filein.read()
seg = jieba.posseg.cut(str)
fout = open('novel_out.txt','w')
for i in seg:
    s = i.word+'\t'+i.flag+'\n'
    fout.writelines(s.encode('utf-8'))

fout.close()

實驗二、使用SnowNLP進行中文分詞

1.匯入SnoeNLP庫

2.進入python環境,輸入以下程式碼:

from snownlp import SnowNLP
fin = open('novel.txt','r')
str = fin.read()
str = str.decode('utf-8')
s = SnowNLP(str)
fout = open('novel_out_snownlp.txt','w')
for i in s.tags:
    s = i[0]+'\t'+i[1]+'\n'
    fout.writelines(s.encode('utf-8'))

fout.close()

8.4 結果分析

儘管都採用HMM模型,可以發現兩個庫對相同檔案的分詞結果略有差異,在對空格等細節的處理上也不同。這應該與使用了不同的訓練資料和不同的詞庫有關。