python呼叫jieba(結巴)分詞 加入自定義詞典和去停用詞功能

右介發表於2017-05-18

      把語料從資料庫提取出來以後就要進行分詞啦,我是在linux環境下做的,先把jieba安裝好,然後找到內容是build jieba PKG-INFO setup.py test的那個資料夾(我這邊是jieba-0.38),把自己的自定義詞典(選用,目的是為了分出原始詞庫中沒有的詞以及優先分出一些詞),停用詞詞典(選用),需要分詞的語料檔案,呼叫jieba的python程式都放到這個資料夾裡,就可以用啦。至於詞典要什麼樣的格式,在網上一查就可以了。

      之前有看到別的例子用自定義詞典替換掉jieba本身詞典,但是我試了一下好像效果不行,假設原始詞典中有’雲‘,’計算‘而沒有’雲端計算‘,我想要分出’雲端計算‘這個詞,載入自定義詞典可以成功,但替換原始詞典就不一定成功了。(當然我說的也不一定對)

      還有停用詞詞典,我之前是把停用詞在程式裡存入一個列表,然後分每個詞時都迴圈一遍列表,這樣特別浪費時間。後來把停用詞做成字典就很快了。

      for eachline in fin可避免memory error。如果還是報memory error,那應該就是輸入語料檔案單行資料多長了。

#!/usr/bin/python  
#-*- encoding:utf-8 -*-  
import jieba                                           #匯入jieba模組
import re 
jieba.load_userdict("newdict.txt")                     #載入自定義詞典  
import jieba.posseg as pseg 

def splitSentence(inputFile, outputFile):
    #把停用詞做成字典
    stopwords = {}
    fstop = open('stop_words.txt', 'r')
    for eachWord in fstop:
        stopwords[eachWord.strip().decode('utf-8', 'ignore')] = eachWord.strip().decode('utf-8', 'ignore')
    fstop.close()

    fin = open(inputFile, 'r')                                  #以讀的方式開啟檔案  
    fout = open(outputFile, 'w')                                #以寫得方式開啟檔案  
    jieba.enable_parallel(4)                                    #並行分詞
    for eachLine in fin:
        line = eachLine.strip().decode('utf-8', 'ignore')       #去除每行首尾可能出現的空格,並轉為Unicode進行處理 
        line1 = re.sub("[0-9\s+\.\!\/_,$%^*()?;;:-【】+\"\']+|[+——!,;:。?、~@#¥%……&*()]+".decode("utf8"), "".decode("utf8"),line)
        wordList = list(jieba.cut(line1))                        #用結巴分詞,對每行內容進行分詞  
        outStr = ''  
        for word in wordList:
            if word not in stopwords:  
                outStr += word  
                outStr += ' '  
        fout.write(outStr.strip().encode('utf-8') + '\n')       #將分詞好的結果寫入到輸出檔案
    fin.close()  
    fout.close()  
  
splitSentence('ss.txt', 'tt.txt') 

 

相關文章