jieba中文分詞(python)

問題小結

1.安裝css

  須要用到python,根據python2.7選擇適當的安裝包。先下載http://pypi.python.org/pypi/jieba/ ,解壓後運行python setup.py installhtml

  若須要安裝到myeclipse,python

    1.首先須要myeclipse能支持python,安裝pydev。不一樣的pydev對於環境的要求不一樣,注意看jre的要求。linux

       這一步的操做能夠參考 http://blog.csdn.net/cssmhyl/article/details/22812609git

    2.導入jieba,Preference->PyDev->Eidtor->interpreter-Python.github

       選擇下面的Libraries,選擇New Folder,將結巴的安裝目錄加入便可,在linux下使用easy_installwindows

       這一步的操做能夠參考http://blog.csdn.net/pzy20062141/article/details/48730941app

2. 中文註釋報錯eclipse

  在代碼最前面加上python2.7

#!/usr/bin/python  
# -*- coding: utf-8 -*- 

3.分詞

  結巴中文分詞支持的三種分詞模式包括:
        (1) 精確模式:試圖將句子最精確地切開,適合文本分析;
        (2) 全模式:把句子中全部的能夠成詞的詞語都掃描出來, 速度很是快,可是不能解決歧義問題;
        (3) 搜索引擎模式:在精確模式的基礎上,對長詞再次切分,提升召回率,適合用於搜索引擎分詞。

  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

示例代碼:

#encoding=utf-8
import jieba
seg_list = jieba.cut("我來到北京清華大學", cut_all=True)
print "Full Mode:", "/ ".join(seg_list)  # 全模式
seg_list = jieba.cut("我來到北京清華大學", cut_all=False)
print "Default Mode:", "/ ".join(seg_list)  # 精確模式
seg_list = jieba.cut("他來到了網易杭研大廈")  # 默認是精確模式
print ", ".join(seg_list)
seg_list = jieba.cut_for_search("小明碩士畢業於中國科學院計算所,後在日本京都大學深造")  # 搜索引擎模式
print ", ".join(seg_list)

4.添加自定義詞典

  開發者能夠指定本身自定義的詞典,以便包含jieba詞庫裏沒有的詞。雖然jieba有新詞識別能力,可是自行添加新詞能夠保證更高的正確率

jieba.load_userdict(file_name) # file_name爲自定義詞典的路徑

  詞典格式和dict.txt同樣,一個詞佔一行;每一行分三部分,一部分爲詞語,另外一部分爲詞頻,最後爲詞性(可省略),用空格隔開

   強烈推薦一篇詞性標註文章,連接以下:
          http://www.hankcs.com/nlp/part-of-speech-tagging.html
  中文分詞庫:http://www.oschina.net/project/tag/264/segment

5.去除停用詞

  少許能夠用下面第一種方式手寫介入,不然用第二種導入文件,文件要求一行一詞

 stopwords = {}.fromkeys([‘的‘, ‘包括‘, ‘等‘, ‘是‘])
#stop words
    stopkey = [line.strip().decode('utf-8') for line in open('stopkey.txt').readlines()]

6.提取關鍵詞

jieba.analyse.extract_tags(sentence,topK) #須要先import jieba.analyse

  setence爲待提取的文本

  topK爲返回幾個TF/IDF權重最大的關鍵詞,默認值爲20

7.詞性標註

  標註句子分詞後每一個詞的詞性,採用和ictclas兼容的標記法

>>> import jieba.posseg as pseg
>>> words = pseg.cut("我愛北京天安門")
>>> for w in words:
...    print w.word, w.flag
...
我 r
愛 v
北京 ns
天安門 ns

8.並行分詞

原理:將目標文本按行分隔後,把各行文本分配到多個python進程並行分詞,而後歸併結果,從而得到分詞速度的可觀提高 
基於python自帶的multiprocessing模塊,目前暫不支持windows

jieba.enable_parallel(4) # 開啓並行分詞模式,參數爲並行進程數
jieba.disable_parallel() # 關閉並行分詞模式
import sys
import time
sys.path.append("../../")
import jieba

jieba.enable_parallel(4)

url = sys.argv[1]
content = open(url,"rb").read()
t1 = time.time()
words = "/ ".join(jieba.cut(content))

t2 = time.time()
tm_cost = t2-t1

log_f = open("1.log","wb")
log_f.write(words.encode('utf-8'))

print('speed %s bytes/second' % (len(content)/tm_cost))

  實驗結果:在4核3.4GHz Linux機器上,對金庸全集進行精確分詞,得到了1MB/s的速度,是單進程版的3.3倍。

9.tokenize:返回詞語在原文的起始位置

  輸入參數只接受unicode

  默認模式:

result = jieba.tokenize(u'永和服裝飾品有限公司')
for tk in result:
    print "word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2])
word 永和                start: 0                end:2
word 服裝                start: 2                end:4
word 飾品                start: 4                end:6
word 有限公司            start: 6                end:10

  搜索模式:

result = jieba.tokenize(u'永和服裝飾品有限公司',mode='search')
for tk in result:
    print "word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2])
word 永和                start: 0                end:2
word 服裝                start: 2                end:4
word 飾品                start: 4                end:6
word 有限                start: 6                end:8
word 公司                start: 8                end:10
word 有限公司            start: 6                end:10

10. ChineseAnalyzer for Whoosh搜索引擎

  引用: from jieba.analyse import ChineseAnalyzer

  示例:https://github.com/fxsjy/jieba/blob/master/test/test_whoosh.py

11.lazy load

  jieba採用延遲加載,"import jieba"不會當即觸發詞典的加載,一旦有必要纔開始加載詞典構建trie。若是你想手工初始jieba,也能夠手動初始化。

import jieba
jieba.initialize()  # 手動初始化(可選)
jieba.set_dictionary('data/dict.txt.big')
#encoding=utf-8
import sys
sys.path.append("../")
import jieba

def cuttest(test_sent):
result = jieba.cut(test_sent)
print " ".join(result)

def testcase():
cuttest("這是一個伸手不見五指的黑夜。我叫孫悟空,我愛北京,我愛Python和C++。")
cuttest("我不喜歡日本和服。")
cuttest("雷猴迴歸人間。")
cuttest("工信處女幹事每個月通過下屬科室都要親口交代24口交換機等技術性器件的安裝工做")
cuttest("我須要廉租房")
cuttest("永和服裝飾品有限公司")
cuttest("我愛北京天安門")
cuttest("abc")
cuttest("隱馬爾可夫")
cuttest("雷猴是個好網站")

if __name__ == "__main__":
testcase()
jieba.set_dictionary("foobar.txt")
print "================================"
testcase()

技術分享

常見問題

1)模型的數據是如何生成的?https://github.com/fxsjy/jieba/issues/7

2)這個庫的受權是? https://github.com/fxsjy/jieba/issues/2

更多問題請點擊:https://github.com/fxsjy/jieba/issues?sort=updated&state=closed

本文參考:http://www.oschina.net/p/jieba    http://www.mamicode.com/info-detail-1152559.html

相關文章
相關標籤/搜索