Python自然語言處理停用詞過濾實(shí)例詳解
什么是停用詞
在漢語中,有一類沒有多少意義的詞語,比如組詞“的”,連詞“以及”、副詞“甚至”,語氣詞“吧”,被稱為停用詞。一個(gè)句子去掉這些停用詞,并不影響理解。所以,進(jìn)行自然語言處理時(shí),我們一般將停用詞過濾掉。
而HanLP庫提供了一個(gè)小巧的停用詞字典,它位于Lib\site-packages\pyhanlp\static\data\dictionary目錄中,名字為:stopwords.txt。該文本收錄了常見的中英文無意義的詞匯,每行一個(gè)詞語。示例如下:
我們在進(jìn)行自然語言處理時(shí),可以用BinTrie、DoubleArrayTrie和AhoCorasickDoubleArrayTrie中的任意一個(gè)來存儲(chǔ)詞典。考慮到該詞典中都是短語且比較多,用雙數(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ǎ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é)合起來,實(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中的三種命令行模塊(sys.argv,argparse,click)
這篇文章主要介紹了python中的三種命令行模塊(sys.argv,argparse,click)的相關(guān)資料,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-12-12利用python調(diào)整Excel行高和列寬的操作示例
在Excel中,默認(rèn)的行高和列寬可能不足以完全顯示某些單元格中的內(nèi)容,特別是當(dāng)內(nèi)容較長時(shí),通過調(diào)整行高和列寬,可以確保所有數(shù)據(jù)都能完整顯示,避免內(nèi)容被截?cái)?本文將介紹如何通過Python調(diào)整Excel的行高列寬、或設(shè)置自適應(yīng)行高列寬,需要的朋友可以參考下2024-11-11django中模板繼承與ModelForm實(shí)例詳解
ModelForm類是form是組件中Form的一個(gè)子類,所以也是處理表單的,下面這篇文章主要給大家介紹了關(guān)于django中模板繼承與ModelForm的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04Python3讀寫Excel文件(使用xlrd,xlsxwriter,openpyxl3種方式讀寫實(shí)例與優(yōu)劣)
這篇文章主要介紹了Python3讀寫Excel文件,使用xlrd,xlsxwriter,openpyxl3種方式讀寫實(shí)例與優(yōu)劣,需要的朋友可以參考下2020-02-02Python的speech_recognition庫如何將聲音轉(zhuǎn)為文字
這篇文章主要介紹了通過Python的speech_recognition庫將聲音轉(zhuǎn)為文字,將聲音轉(zhuǎn)為文字,除了speech_recognition庫,還要依賴pyaudio庫,而且mac用戶需要安裝PortAudio,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05