結巴分詞獲取關鍵詞時怎麼過濾掉一些停用詞?

在做結巴分詞的時候,其中他有提供一個函數是獲取一段文本的關鍵詞,然後我想知道要讓這些關鍵詞過濾掉一些停用詞呢?比如過濾掉一些量詞


#目前網上能找到的方法都是自己做個停用詞字典,然後在列印分詞結果之前將停用詞去掉。

#也就是說分詞的過程不變,列印時做個集合差運算。

text =u"聽說你超級喜歡萬眾掘金小遊戲啊啊啊"
default_mode = jieba.cut(text,cut_all=False)
stopw = [line.strip().decode("utf-8") for line in open("D:\Python27\stopword.txt").readlines()]
print u"搜索引擎模式:",u"/".join(set(default_mode)-set(stopw))

#除了效率低,這種方法有另一個弊端,就是你的停用詞一定要被分詞器正確的拆分,否則是沒辦法去掉的。

#比如「啊啊啊」這個詞是被分成一個詞的,但是你的停用詞字典中只有「啊」沒有「啊啊啊」,

#這個時候「啊啊啊」就不會被去掉。

#所幸這個問題實際使用時影響是有限的,通過豐富你的停用詞字典和反覆測試,可以有效改善。

另外一個方法是使用extract_tags函數,這個函數會根據TF-IDF演算法將特徵詞提取出來,在提取之前會去掉停用詞,可以人工指定停用詞字典,代碼如下:

jieba.analyse.set_stop_words("D:\Python27\stopword.txt")
tags = jieba.analyse.extract_tags(text,20)

以上


樓主解決了么?

不能用set(seg_list)-set(stop_word),因為 python set數據類型 要求:「

  1. python的set和其他語言類似, 是一個無序不重複元素集, 基本功能包括關係測試和消除重複元素. 集合對象還支持union(聯合), intersection(交), difference(差)和sysmmetric difference(對稱差集)等數學運算. 」 
  2. 如果用set(seg_list)-set(stop_word)的方法 會導致seg_list 裡面重複的詞的詞頻只剩下一次了。 


自己搜出來的,一起學習一個:

import jieba.analyse

a=jieba.analyse.extract_tags(sentence, topK = 20, withWeight = False, allowPOS = ())

# sentence:待提取的文本。

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

# withWeight:是否一併返回關鍵詞權重值,默認值為False。

# allowPOS:僅包括指定詞性的詞,默認值為空,即不進行篩選。

如果還想把量詞刪去,我比較low的想法是靠正則表達式,帶數字的或者表示數字的就去掉


我寫了一個博客,展示你這個需求的案例:用Python讀紅樓夢之——一、詞雲繪製


jiebaRD裡面本身有停止詞,libraryjiebaRDdictstop_words.utf8,你也可以往裡面添加停止詞


推薦閱讀:

使用Python建站對於日流量20w的pv你會採用什麼樣的架構?
windows8 64位python 安裝theano報錯?

TAG:Python | 分詞 | 中文分詞 | 文本分析 |