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