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


      把語料從數據庫提取出來以后就要進行分詞啦,我是在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') 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM