目錄
- 一、什么是停用詞
- 二、加載停用詞字典
- 三、刪除停用詞
- 四、分詞以及刪除停用詞
- 五、直接刪除停用詞(不分詞)
一、什么是停用詞
在漢語(yǔ)中,有一類沒有多少意義的詞語(yǔ),比如組詞“的”,連詞“以及”、副詞“甚至”,語(yǔ)氣詞“吧”,被稱為停用詞。一個(gè)句子去掉這些停用詞,并不影響理解。所以,進(jìn)行自然語(yǔ)言處理時(shí),我們一般將停用詞過(guò)濾掉。
而HanLP庫(kù)提供了一個(gè)小巧的停用詞字典,它位于Lib\site-packages\pyhanlp\static\data\dictionary目錄中,名字為:stopwords.txt。該文本收錄了常見的中英文無(wú)意義的詞匯,每行一個(gè)詞語(yǔ)。示例如下:
我們?cè)谶M(jìn)行自然語(yǔ)言處理時(shí),可以用BinTrie、DoubleArrayTrie和AhoCorasickDoubleArrayTrie中的任意一個(gè)來(lái)存儲(chǔ)詞典。考慮到該詞典中都是短語(yǔ)且比較多,用雙數(shù)組字典樹更劃算,處理時(shí)間更快。
二、加載停用詞字典
通過(guò)前文的介紹,我們知道了使用雙數(shù)組字典樹加載停用詞字典更劃算。下面,我們來(lái)加載其停用詞,并返回鍵值對(duì)結(jié)構(gòu)。代碼如下:
def load_dictionary(path):
map=JClass('java.util.TreeMap')()
with open(path,encoding='utf-8') as src:
for word in src:
word=word.strip()
map[word]=word
return JClass('com.hankcs.hanlp.collection.trie.DoubleArrayTrie')(map)
三、刪除停用詞
通過(guò)上面的停用詞加載,我們獲取了DoubleArrayTrie樹結(jié)構(gòu)的詞匯。如果要?jiǎng)h除停用詞,可以直接使用分詞后的結(jié)果剔除停用詞即可。剔除的方法如下:
def remove_stopwords(termlist,trie):
return [term.word for term in termlist if not trie.containsKey(term.word)]
四、分詞以及刪除停用詞
在前面的博文中,我們已經(jīng)學(xué)會(huì)了如何分詞,現(xiàn)在我們又學(xué)會(huì)了如何剔除停用詞。這里,我們將兩者結(jié)合起來(lái),實(shí)現(xiàn)分詞效果。代碼如下:
if __name__ == "__main__":
HanLP.Config.ShowTermNature=False
trie=load_dictionary(HanLP.Config.CoreStopWordDictionaryPath)
text="今天就這樣吧!明天我們?cè)谡f(shuō)可以嗎?"
segment=DoubleArrayTrieSegment()
termlist=segment.seg(text)
print("分詞結(jié)果",termlist)
print("去掉停用詞",remove_stopwords(termlist,trie))
運(yùn)行之后,得到如下結(jié)果:
五、直接刪除停用詞(不分詞)
對(duì)應(yīng)上面的結(jié)果,我們先分詞在刪除停用詞。但是,有時(shí)候我們也喜歡先刪除停用詞在進(jìn)行分詞。下面,我們來(lái)實(shí)現(xiàn)直接刪除停用詞。
代碼如下:
#直接過(guò)濾方法
def direct_remove_stopwords(text,replacement,trie):
JString=JClass('java.lang.String')
searcher=trie.getLongestSearcher(JString(text),0)
offset=0
result=''
while searcher.next():
begin=searcher.begin
end=begin+searcher.length
if begin>offset:
result+=text[offset:begin]
result+=replacement
offset=end
if offsetlen(text):
result+=text[offset:]
return result
if __name__ == "__main__":
HanLP.Config.ShowTermNature = False
trie = load_dictionary(HanLP.Config.CoreStopWordDictionaryPath)
text = "今天就這樣吧!明天我們?cè)谡f(shuō)可以嗎?"
segment = DoubleArrayTrieSegment()
termlist = segment.seg(text)
print("分詞結(jié)果", termlist)
print("去掉停用詞", remove_stopwords(termlist, trie))
print("不分詞去掉停用詞", direct_remove_stopwords(text, "**", trie))
運(yùn)行之后,效果如下:
到此這篇關(guān)于python基礎(chǔ)之停用詞過(guò)濾詳解的文章就介紹到這了,更多相關(guān)python停用詞過(guò)濾內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- python使用jieba實(shí)現(xiàn)中文分詞去停用詞方法示例
- 利用Python過(guò)濾相似文本的簡(jiǎn)單方法示例
- Python實(shí)現(xiàn)敏感詞過(guò)濾的4種方法
- Python過(guò)濾序列元素的方法
- python numpy實(shí)現(xiàn)多次循環(huán)讀取文件 等間隔過(guò)濾數(shù)據(jù)示例
- python正則過(guò)濾字母、中文、數(shù)字及特殊字符方法詳解