1. 程式人生 > >jieba分詞、自定義詞典提取高頻詞、詞性標註及獲取詞的位置

jieba分詞、自定義詞典提取高頻詞、詞性標註及獲取詞的位置

準備工作

安裝anaconda環境,anaconda環境是一個強大的科學計算環境,自帶python2.7和3.4兩個版本以及很多科學計算庫

安裝完成後配置環境變數,然後在終端用pip install jieba安裝結巴分詞庫

jieba介紹

支援三種分詞模式:

  • 精確模式,試圖將句子最精確地切開,適合文字分析;
  • 全模式,把句子中所有的可以成詞的詞語都掃描出來, 速度非常快,但是不能解決歧義;
  • 搜尋引擎模式,在精確模式的基礎上,對長詞再次切分,提高召回率,適合用於搜尋引擎分詞。

支援繁體分詞

支援自定義詞典

演算法

  • 基於Trie樹結構實現高效的詞圖掃描,生成句子中漢字所有可能成詞情況所構成的有向無環圖(DAG)
  • 採用了動態規劃查詢最大概率路徑, 找出基於詞頻的最大切分組合
  • 對於未登入詞,採用了基於漢字成詞能力的HMM模型,使用了Viterbi演算法

jieba使用

分詞程式碼

我的工程中的程式碼:

#encoding=utf-8
import jieba
from astropy.table.np_utils import join
import os
import sys 

f=open(u"爽膚水評論.txt")
line= f.readline()
f2=file(u"分詞後的爽膚水評論.txt","w+")
while line:
    seg_list = jieba.cut(line,cut_all=False
) seg_list = " ".join(seg_list) seg_list.encode("utf8") seg_list.decode("utf8") f2.write(seg_list) f2.write("\n") line=f.readline() f2.close() f.close() print "end"

我在工程中通過這段程式碼進行分詞,按行讀入每條評論,進行分詞,然後按行寫入新的txt中。
測試程式碼:

#encoding=utf-8
import jieba
from astropy.table.np_utils import
join import os import sys seg_list = jieba.cut("工信處女幹事每月經過下屬科室都要親口交代24口交換機等技術性器件的安裝工作",cut_all=False) seg_list = " ".join(seg_list) print seg_list

執行結果:

Building prefix dict from the default dictionary ...
Loading model from cache c:\users\user\appdata\local\temp\jieba.cache
Loading model cost 0.334 seconds.
Prefix dict has been built succesfully.
工信處 女幹事 每月 經過 下屬 科室 都 要 親口 交代 24 口 交換機 等 技術性 器件 的 安裝 工作

有沒有很強大?
解析程式碼:

jieba.cut(text,cut_all=False)

jieba.cut方法有兩個引數,第一個引數是要分詞的String,第二個引數控制是否為全模式切分,True表示全模式。

當然也可以

jieba.cut(text)

預設為精確模式

全模式和精確模式的效果:

【原句】:我來到北京清華大學

【全模式】: 我/ 來到/ 北京/ 清華/ 清華大學/ 華大/ 大學

【精確模式】: 我/ 來到/ 北京/ 清華大學

自定義詞典新增

用法
jieba.load_userdict(file_name) file_name為自定義詞典的路徑

詞典格式和dict.txt一樣,一個詞佔一行;每一行分三部分,一部分為詞語,

另一部分為詞頻,最後為詞性(可省略),用空格隔開

按TF-IDF提取關鍵詞

import jieba.analyse
result=jieba.analyse.extract_tags(sentence,topK) 

方法:jieba.analyse.extract_tags(sentence,topK) 有兩個引數,第一個為要提取的文字,第二個為要獲取的按tf-idf排序的詞的個數

詞性標註

#encoding=utf-8
import jieba.posseg as pseg
words =pseg.cut("我愛北京天安門")
for w in words:
    print w.word,w.flag
----------------------------
執行結果:
我 r
愛 v
北京 ns
天安門 ns

其他

並行分詞、獲取一個詞的位置資訊。。。今後遇到再分析

分詞、詞性標註、按TF-IDF獲取關鍵詞等是NLP任務中最初的幾步,jieba還可以自定義詞典、並行分詞、可謂十分強大!

至於jieba和其他分詞工具的比較以及jieba分詞的內部演算法,今後討論