Python自然語(yǔ)言處理停用詞過(guò)濾實(shí)例詳解
什么是停用詞
在漢語(yǔ)中,有一類沒(méi)有多少意義的詞語(yǔ),比如組詞“的”,連詞“以及”、副詞“甚至”,語(yǔ)氣詞“吧”,被稱為停用詞。一個(gè)句子去掉這些停用詞,并不影響理解。所以,進(jìn)行自然語(yǔ)言處理時(shí),我們一般將停用詞過(guò)濾掉。
而HanLP庫(kù)提供了一個(gè)小巧的停用詞字典,它位于Lib\site-packages\pyhanlp\static\data\dictionary目錄中,名字為:stopwords.txt。該文本收錄了常見(jiàn)的中英文無(wú)意義的詞匯,每行一個(gè)詞語(yǔ)。示例如下:
我們?cè)谶M(jìn)行自然語(yǔ)言處理時(shí),可以用BinTrie、DoubleArrayTrie和AhoCorasickDoubleArrayTrie中的任意一個(gè)來(lái)存儲(chǔ)詞典??紤]到該詞典中都是短語(yǔ)且比較多,用雙數(shù)組字典樹(shù)更劃算,處理時(shí)間更快。
加載停用詞字典
通過(guò)前文的介紹,我們知道了使用雙數(shù)組字典樹(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樹(shù)結(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 offset<len(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)行之后,效果如下:
以上就是Python自然語(yǔ)言處理停用詞過(guò)濾實(shí)例詳解的詳細(xì)內(nèi)容,更多關(guān)于Python自然語(yǔ)言處理停用詞過(guò)濾的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
詳解flask中如何獲取不請(qǐng)求方式的參數(shù)
這篇文章主要詳細(xì)介紹了在flask中如何獲取不請(qǐng)求方式的參數(shù),文中給出了詳細(xì)的代碼示例和圖文介紹,對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-04-04詳解python中的三種命令行模塊(sys.argv,argparse,click)
這篇文章主要介紹了python中的三種命令行模塊(sys.argv,argparse,click)的相關(guān)資料,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-12-12Python通過(guò)正則庫(kù)爬取淘寶商品信息代碼實(shí)例
這篇文章主要介紹了Python通過(guò)正則庫(kù)爬取淘寶商品信息代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03利用python調(diào)整Excel行高和列寬的操作示例
在Excel中,默認(rèn)的行高和列寬可能不足以完全顯示某些單元格中的內(nèi)容,特別是當(dāng)內(nèi)容較長(zhǎng)時(shí),通過(guò)調(diào)整行高和列寬,可以確保所有數(shù)據(jù)都能完整顯示,避免內(nèi)容被截?cái)?本文將介紹如何通過(guò)Python調(diào)整Excel的行高列寬、或設(shè)置自適應(yīng)行高列寬,需要的朋友可以參考下2024-11-11django中模板繼承與ModelForm實(shí)例詳解
ModelForm類是form是組件中Form的一個(gè)子類,所以也是處理表單的,下面這篇文章主要給大家介紹了關(guān)于django中模板繼承與ModelForm的相關(guān)資料,文中通過(guò)實(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庫(kù)如何將聲音轉(zhuǎn)為文字
這篇文章主要介紹了通過(guò)Python的speech_recognition庫(kù)將聲音轉(zhuǎn)為文字,將聲音轉(zhuǎn)為文字,除了speech_recognition庫(kù),還要依賴pyaudio庫(kù),而且mac用戶需要安裝PortAudio,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05