更新時(shí)間:2022-12-21 來源:黑馬程序員 瀏覽量:
停用詞是指在信息檢索中,為節(jié)省存儲空間和提高搜索效率,在處理自然語言文本之前或之后會(huì)自動(dòng)過濾掉某些沒有具體意義的字或詞,這些字或詞即被稱為停用詞,比如英文單詞“I”“the”或中文中的“啊”等。
停用詞的存在直接增加了文本的特征難度,提高了文本數(shù)據(jù)分析過程中的成本,如果直接用包含大量停用詞的文本作為分析對象,則還有可能會(huì)導(dǎo)致數(shù)據(jù)分析的結(jié)果存在較大偏差,通常在處理過程中將它們從文本中刪除,如圖8-4所示。
圖8-4 刪除停用詞示例
從圖8-4中可以看出,即使從整個(gè)語句中刪除了停用詞,句子整體的意思并沒有產(chǎn)生很大的影響。
停用詞都是人工輸入、非自動(dòng)化生成的,生成后的停用詞會(huì)形成一個(gè)停用詞表,但是并沒有一個(gè)明確的停用詞表能夠適用于所有的工具。對于中文的停用詞,可以參考中文停用詞庫、哈工大停用詞表、百度停用詞列表,對于其他語言來說,可以參照https://www.ranks.nl/stopwords進(jìn)行了解。
刪除停用詞常用的方法有詞表匹配法、詞頻閾值法和權(quán)重閾值法,NLTK庫所采用的就是詞表匹配法,它里面有一個(gè)標(biāo)準(zhǔn)的停用詞列表,在使用之前要確保已經(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.' # 將英文語句按空格劃分為多個(gè)單詞 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') # 定義一個(gè)空列表 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這幾個(gè)常見的停用詞都被刪除了。