Python分詞模組推薦:jieba中文分詞

Thinkgamer_gyt發表於2015-08-29

一、結巴中文分詞采用的演算法

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

二、結巴中文分詞支援的分詞模式

目前結巴分詞支援三種分詞模式:

  1. 精確模式,試圖將句子最精確地切開,適合文字分析;
  2. 全模式,把句子中所有的可以成詞的詞語都掃描出來, 速度非常快,但是不能解決歧義;
  3. 搜尋引擎模式,在精確模式的基礎上,對長詞再次切分,提高召回率,適合用於搜尋引擎分詞。
<span style="font-size:14px;"><pre name="code" class="python"># -*- coding:utf-8 -*-
import jieba
text = '我來到北京清華大學'
default_mode =jieba.cut(text)
full_mode = jieba.cut(text,cut_all=True)
search_mode = jieba.cut_for_search(text)

print "精確模式:","/".join(default_mode)
print "全模式:","/".join(full_mode)
print "搜尋引擎模式:","/".join(search_mode)

精確模式: 我/來到/北京/清華大學
全模式: 我/來到/北京/清華/清華大學/華大/大學
搜尋引擎模式: 我/來到/北京/清華/華大/大學/清華大學</span>


上述程式碼解釋:

  • jieba.cut方法接受兩個輸入引數: 1) 第一個引數為需要分詞的字串 2)cut_all引數用來控制是否採用全模式,預設不採用。
  • jieba.cut_for_search方法接受一個引數:需要分詞的字串,該方法適合用於搜尋引擎構建倒排索引的分詞,粒度比較細
  • 注意:待分詞的字串可以是gbk字串、utf-8字串或者unicode
  • jieba.cut以及jieba.cut_for_search返回的結構都是一個可迭代的generator,可以使用for迴圈來獲得分詞後得到的每一個詞語(unicode),也可以用list(jieba.cut(…))轉化為list

三、結巴中文分詞的其他功能

1、新增或管理自定義詞典

結巴的所有字典內容存放在dict.txt,你可以不斷的完善dict.txt中的內容。

2、關鍵詞抽取

通過計算分詞後的關鍵詞的TF/IDF權重,來抽取重點關鍵詞。

3.詞性標註

對一句話進行切分後,對每個詞進行詞性標註,是名詞還是動詞

具體示例:

<span style="font-size:14px;"># -*- coding:utf-8 -*-
import jieba.analyse

text = "結巴中文分詞模組是一個非常好的Python分片語件"
 
tags = jieba.analyse.extract_tags(text,2)
 
print "關鍵詞抽取:","/".join(tags)
關鍵詞抽取: 分詞/Python</span>

<span style="font-size:14px;">#! /usr/bin/env python2.7
#coding:utf-8
import jieba
import jieba.posseg
print "Full Mode:","/".join(jieba.cut('始游泳'))
print "Full Mode:","/".join(jieba.cut('過郭美美'))
s=["我勒個去","費打電話","響全世界","線情人"]
for i in s:
    pos=[]
    seg=jieba.posseg.cut(i)
    for j in seg:
        print j.word,'/',j.flag,'#',
        pos.append([j.word,j.flag])
    print  
#----------------------------------
string="當我輸給青雉的時候就在想,在以後的航海中再遇到像他那麼強的對手的時候"
seg=jieba.posseg.cut(string)
pos=[]
for i in seg:
    pos.append([i.word,i.flag])
for i in pos:
    print i[0],'/',i[1],"#",</span>

輸出結果:

<span style="font-size:14px;">Full Mode:Building prefix dict from E:\Python27\lib\site-packages\jieba\dict.txt ...
Loading model from cache c:\users\shifeng\appdata\local\temp\jieba.cache
Loading model cost 0.941999912262 seconds.
Prefix dict has been built succesfully.
 始/游泳
Full Mode: 過/郭美美
我 / r # 勒 / v # 個 / q # 去 / v #
費 / v # 打電話 / l #
響 / zg # 全世界 / n #
線 / n # 情人 / n #
當 / p # 我 / r # 輸給 / v # 青雉 / n # 的 / uj # 時候 / n # 就 / d # 在 / p # 想 / v # , / x # 在 / p # 以後 / f # 的 / uj # 航海 / n # 中 / f </span>

相關文章