去停用詞python
⑴ python中從列表中用for循環刪除(remove方法)停用詞特別慢,有快一點的方法嗎
循環刪除,必須用循環語句,而循環語句就那麼幾個!!
⑵ 如何用python對一個文件夾下的多個txt文本進行去停用詞
在用 for 循環去停用詞的部分,出錯,僅去掉了 stopwords 中的部分停用詞,且相同停用詞只去除了一次。求大神告知錯誤之處,貼上代碼再好不過!!
#encoding=utf-8
import sys
import re
import codecs
import os
import shutil
import jieba
import jieba.analyse
#導入自定義詞典
#jieba.load_userdict("dict_.txt")
#Read file and cut
def read_file_cut():
#create path
stopwords = {}.fromkeys([ line.strip() for line in open('stopword.txt') ])
path = "Lon\\"
respath = "Lon_Result\\"
if os.path.isdir(respath): #如果respath這個路徑存在
shutil.rmtree(respath, True) #則遞歸移除這個路徑
os.makedirs(respath) #重新建立一個respath目錄
num = 1
while num<=20:
name = "%d" % num
fileName = path + str(name) + ".txt"
resName = respath + str(name) + ".txt"
source = open(fileName, 'r')
if os.path.exists(resName):
os.remove(resName)
result = codecs.open(resName, 'w', 'utf-8')
line = source.readline()
line = line.rstrip('\n')
while line!="":
line = unicode(line, "utf-8")
output=''
seglist = jieba.cut(line,cut_all=False)
for seg in seglist:
seg=seg.encode('utf-8')
if seg not in stopwords:
output+=seg
output = ' '.join(list(seglist))#空格拼接
print output
result.write(output + '\r\n')
line = source.readline()
else:
print 'End file: ' + str(num)
source.close()
result.close()
num = num + 1
else:
print 'End All'
#Run function
if __name__ == '__main__':
read_file_cut()
我覺得是這樣啦:
...
seglist = jieba.cut(line,cut_all=False)
seglist = (seg.encode('utf-8') for seg in seglist)
seglist = [seg for seg in seglist if seg not in stopwords]
output = ' '.join(seglist)
print output
...
不太懂你這兩行的意思:
output+=seg
output = ' '.join(list(seglist))#空格拼接
每次 output 都會被設定成 ' '.join(list(seglist)) 那 output+=seg 好像就沒有意義了。
⑶ 以下函數可以實現分詞,但是為什麼去停用詞沒有效果呢問題在哪裡
我覺得可能還是編碼不對吧。我也遇到這種情況,所以搜到了這個問題,查了很多東西也沒有個結果。
我最開始數據都是用GB2312處理的,後來用結巴分詞看文檔上說用好用utf-8編碼,就寫了段代碼把文本改成utf-8了,然後停用詞文件也是用的utf-8保存的,但是不是用代碼保存的,使用Notpad,之後就一直不能停用文件里的詞。
後來,在代碼中加了幾個比較明顯的停用片語成的list,當分出來的詞不在list里的時候,才輸出該詞,結果就成功的停用了list里的所有詞。
建議樓主再調整一下編碼試試吧。
另外,我最開始用的是Python2.7.10,因為停用詞沒反應,我查到一個網頁說他用Python3.4就好了,我又換了Python3.4.3,可是一樣不能用,然後向我上面那麼做的就好了,Python2.7還沒有試,估計問題都差不多了吧...
樓主加油!Python程序猿加油!
⑷ python英文去停用詞,報錯 'str' object has no attribute 'word'
你把w.word改成w就可以了
⑸ python jieba停用詞該如何設置
你把你的停用詞排一下序,然後再給結巴看看。
或者加兩個停用詞,一個河北、一個西南部。
停用詞通常是很短的高頻出現的詞語,真實情況你這樣的不多。
如果你這種情況,不妨先分詞,也不去停用詞。
然後自己再來後續處理。
⑹ Python SnowNLP情感分析實踐與優化總結
由於語料缺乏,前期若使用到情感分析,建議暫時使用SnowNLP(此模塊主要使用淘寶評論語料)做情感挖掘,但不僅僅為單純調用,需要優化,下面是一些實踐思考:
可在此基礎上優化,比如文本需要特別處理,除了平常的去停用詞外,還可以需要對輸入的文本結合詞性等進行處理。
下面是一些常識:
一)無情感的詞語(如去停用詞,去掉語氣詞,無詞性標簽的詞語)
二)對於文本過長,則可以考慮提取關鍵詞或抽取文本摘要後再提取關鍵詞
對於後者實踐結果差異明顯:
以"發布了頭條文章: 《5分鍾11億!京東雙11場景化產品消費增長明顯》 5分鍾11億!京東雙11場景化產品消費增長明顯 "為例子, 顯然該文本為「積極****」文本。
1)s = SnowNLP("發布了頭條文章:《5分鍾11億!京東雙11場景化產品消費增長明顯》 5分鍾11億!京東雙11場景化產品消費增長明顯")
得分為0.5,明顯不符合
2)s = SnowNLP(「 」.join(jieba.analyse.textrank("發布了頭條文章:《5分鍾11億!京東雙11場景化產品消費增長明顯》 5分鍾11億!京東雙11場景化產品消費增長明顯")))
而對於文本特別長的,則可以先抽取摘要,再對摘要提取關鍵詞。
這主要由於此SnowNLP主要用貝葉斯機器學習方法進行訓練文本,機器學習在語料覆蓋上不夠,特徵上工程處理不當會減分,也沒考慮語義等。
為何要考慮語義層面:
以「 蘇寧易購,是誰給你們下架OV的勇氣****」 中的「 下架」其實才是中心詞(為表達憤怒的文本),但「 勇氣 」為下架的賓語(其為積極的文本),此句應該結果小於0.5,但實際為0.88,去掉「蘇寧易購」則為0.6>