jieba分詞、自定義詞典提取高頻詞、詞性標註及獲取詞的位置
阿新 • • 發佈:2019-02-05
準備工作
安裝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
其他
並行分詞、獲取一個詞的位置資訊。。。今後遇到再分析