更新時間:2022-12-21 來源:黑馬程序員 瀏覽量:
停用詞是指在信息檢索中,為節(jié)省存儲空間和提高搜索效率,在處理自然語言文本之前或之后會自動過濾掉某些沒有具體意義的字或詞,這些字或詞即被稱為停用詞,比如英文單詞“I”“the”或中文中的“啊”等。
停用詞的存在直接增加了文本的特征難度,提高了文本數(shù)據(jù)分析過程中的成本,如果直接用包含大量停用詞的文本作為分析對象,則還有可能會導(dǎo)致數(shù)據(jù)分析的結(jié)果存在較大偏差,通常在處理過程中將它們從文本中刪除,如圖8-4所示。
圖8-4 刪除停用詞示例
從圖8-4中可以看出,即使從整個語句中刪除了停用詞,句子整體的意思并沒有產(chǎn)生很大的影響。
停用詞都是人工輸入、非自動化生成的,生成后的停用詞會形成一個停用詞表,但是并沒有一個明確的停用詞表能夠適用于所有的工具。對于中文的停用詞,可以參考中文停用詞庫、哈工大停用詞表、百度停用詞列表,對于其他語言來說,可以參照https://www.ranks.nl/stopwords進行了解。
刪除停用詞常用的方法有詞表匹配法、詞頻閾值法和權(quán)重閾值法,NLTK庫所采用的就是詞表匹配法,它里面有一個標(biāo)準的停用詞列表,在使用之前要確保已經(jīng)下載了stopwords語料庫,并且用import語句導(dǎo)入stopwords模塊,示例代碼如下。
In [20]: from nltk.corpus import stopwords # 原始文本 sentence='Python is a structured and powerful object-oriented programming language.' # 將英文語句按空格劃分為多個單詞 words=nltk.word_tokenize(sentence) words Out[20]: ['Python', 'is', 'a', 'structured', 'and', 'powerful', 'object-oriented', 'programming', 'language', '.'] In [22]: # 獲取英文停用詞列表 stop_words=stopwords.words('english') # 定義一個空列表 remain_words=[] # 如果發(fā)現(xiàn)單詞不包含在停用詞列表中,就保存在remain_words中 for word in words: if word not in stop_words: remain_words.append(word) remain_words Out[22]: ['Python', 'structured', 'powerful', 'object-oriented', 'programming', 'language', '.']
通過比較刪除前與刪除后的結(jié)果可以發(fā)現(xiàn),is、a、and這幾個常見的停用詞都被刪除了。