Python自然語言處理停用詞過濾實(shí)例詳解
什么是停用詞
在漢語中,有一類沒有多少意義的詞語,比如組詞“的”,連詞“以及”、副詞“甚至”,語氣詞“吧”,被稱為停用詞。一個句子去掉這些停用詞,并不影響理解。所以,進(jìn)行自然語言處理時(shí),我們一般將停用詞過濾掉。
而HanLP庫提供了一個小巧的停用詞字典,它位于Lib\site-packages\pyhanlp\static\data\dictionary目錄中,名字為:stopwords.txt。該文本收錄了常見的中英文無意義的詞匯,每行一個詞語。示例如下:

我們在進(jìn)行自然語言處理時(shí),可以用BinTrie、DoubleArrayTrie和AhoCorasickDoubleArrayTrie中的任意一個來存儲詞典??紤]到該詞典中都是短語且比較多,用雙數(shù)組字典樹更劃算,處理時(shí)間更快。
加載停用詞字典
通過前文的介紹,我們知道了使用雙數(shù)組字典樹加載停用詞字典更劃算。下面,我們來加載其停用詞,并返回鍵值對結(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)刪除停用詞
通過上面的停用詞加載,我們獲取了DoubleArrayTrie樹結(jié)構(gòu)的詞匯。如果要刪除停用詞,可以直接使用分詞后的結(jié)果剔除停用詞即可。剔除的方法如下:
def remove_stopwords(termlist,trie): return [term.word for term in termlist if not trie.containsKey(term.word)]
分詞以及刪除停用詞
在前面的博文中,我們已經(jīng)學(xué)會了如何分詞,現(xiàn)在我們又學(xué)會了如何剔除停用詞。這里,我們將兩者結(jié)合起來,實(shí)現(xiàn)分詞效果。代碼如下:
if __name__ == "__main__": HanLP.Config.ShowTermNature=False trie=load_dictionary(HanLP.Config.CoreStopWordDictionaryPath) text="今天就這樣吧!明天我們在說可以嗎?" segment=DoubleArrayTrieSegment() termlist=segment.seg(text) print("分詞結(jié)果",termlist) print("去掉停用詞",remove_stopwords(termlist,trie))運(yùn)行之后,得到如下結(jié)果:

直接刪除停用詞(不分詞)
對應(yīng)上面的結(jié)果,我們先分詞在刪除停用詞。但是,有時(shí)候我們也喜歡先刪除停用詞在進(jìn)行分詞。下面,我們來實(shí)現(xiàn)直接刪除停用詞。
代碼如下:
#直接過濾方法
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 offset<len(text): result+=text[offset:] return result
if __name__ == "__main__": HanLP.Config.ShowTermNature = False trie = load_dictionary(HanLP.Config.CoreStopWordDictionaryPath) text = "今天就這樣吧!明天我們在說可以嗎?" segment = DoubleArrayTrieSegment() termlist = segment.seg(text) print("分詞結(jié)果", termlist) print("去掉停用詞", remove_stopwords(termlist, trie)) print("不分詞去掉停用詞", direct_remove_stopwords(text, "**", trie))運(yùn)行之后,效果如下:

以上就是Python自然語言處理停用詞過濾實(shí)例詳解的詳細(xì)內(nèi)容,更多關(guān)于Python自然語言處理停用詞過濾的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python計(jì)算程序開始到程序結(jié)束的運(yùn)行時(shí)間和程序運(yùn)行的CPU時(shí)間
這篇文章主要介紹了python計(jì)算程序開始到程序結(jié)束的運(yùn)行時(shí)間和程序運(yùn)行的CPU時(shí)間的三個方法,大家參考使用2013-11-11
Python實(shí)現(xiàn)Excel批量處理+郵件自動發(fā)送的全流程
在日常辦公中,重復(fù)的 Excel 數(shù)據(jù)整理、報(bào)表生成與郵件分發(fā)工作占據(jù)大量時(shí)間,本文將手把手教你用 Python 實(shí)現(xiàn) Excel 數(shù)據(jù)批量處理 + 自動化郵件發(fā)送全流程,需要的朋友可以參考下2025-12-12
python神經(jīng)網(wǎng)絡(luò)TensorFlow簡介常用基本操作教程
這篇文章主要介紹了python神經(jīng)網(wǎng)絡(luò)入門TensorFlow簡介常用基本操作教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-11-11
OpenCV Python實(shí)現(xiàn)拼圖小游戲
這篇文章主要為大家詳細(xì)介紹了OpenCV Python實(shí)現(xiàn)拼圖版小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03
python使用tcp實(shí)現(xiàn)局域網(wǎng)內(nèi)文件傳輸
這篇文章主要介紹了python使用tcp實(shí)現(xiàn)局域網(wǎng)內(nèi)文件傳輸,文件包括文本,圖片,視頻等,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07
Python中return函數(shù)返回值實(shí)例用法
在本篇文章里小編給大家整理的是一篇關(guān)于Python中return函數(shù)返回值實(shí)例用法,有興趣的朋友們可以學(xué)習(xí)下。2020-11-11
Python?虛擬環(huán)境遷移到其他電腦的實(shí)現(xiàn)
本文主要介紹了Python?虛擬環(huán)境遷移到其他電腦的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04

