簡書著作權(quán)歸作者所有,任何形式的轉(zhuǎn)載都請聯(lián)系作者獲得授權(quán)并注明出處藤为。
一、NLTK 的安裝
? ? ? ?如果是python 2.x 的環(huán)境,安裝命令如下:
sudo pip install nltk
? ? ? ?如果是python 3.x 的環(huán)境逊躁,安裝命令如下:
sudo pip3 install nltk
? ? ? ?成功地執(zhí)行了上述命令后,NLTK 的安裝還沒有徹底地完成隅熙,還需要在 python 中執(zhí)行如下的代碼:
import nltk
nltk.download()
? ? ? ?代碼執(zhí)行后稽煤,會彈出如下的界面:
? ? ? ?點擊 “all” 這一行,然后點擊 “Download” 按鈕進行下載囚戚〗臀酰“Download Directory” 一開始可以先隨便設(shè)置,但文件夾的名字必須是 nltk_data驰坊,下載完成后可以先執(zhí)行一段分詞的代碼(隨后將會提到這段代碼)匾二,代碼會報錯,錯誤提示說找不到相應(yīng)的資源文件拳芙,并在這段錯誤提示中告訴我們應(yīng)該把剛才下載下來的資源放到哪里察藐。你可能會疑惑:為什么不在下載之前將 “Download Directory” 設(shè)置正確呢?這是因為我們一開始也不知道正確的 “Download Directory” 是什么舟扎,所以先隨便設(shè)置了一個分飞,然后通過錯誤提示再將下載好的資源放到正確的路徑下面。
? ? ? ?資源下載過程中可能會多次出現(xiàn)下載異常的情況浆竭,每次遇到這種情況后浸须,關(guān)掉正在執(zhí)行的代碼,然后重新執(zhí)行代碼進行下載即可邦泄。
二删窒、分詞
? ? ? ?1、分詞方式
? ? ? ?分詞使用的方法是 word_tokenize()顺囊,分詞的代碼如下:
from nltk.tokenize import word_tokenize
data = "All work and no play makes jack a dull boy, all work and no play"
print(word_tokenize(data))
? ? ? ?代碼執(zhí)行結(jié)果如下:
['All', 'work', 'and', 'no', 'play', 'makes', 'jack', 'a', 'dull', 'boy', ',', 'all', 'work', 'and', 'no', 'play']
? ? ? ?注意:上述結(jié)果集中有一個 “逗號”肌索,也被當做了一個詞。
? ? ? ?2特碳、停用詞
? ? ? ?英文中的停用詞如 “the”诚亚,“is”晕换,“are” 等等。在自然語言處理(NLP)中沒有通用的停用詞列表站宗,然而這里闸准,在 NLTK 模塊有其自帶的停用詞列表。
? ? ? ?去停用詞的代碼如下:
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
data = "All work and no play makes jack dull boy. All work and no play makes jack a dull boy."
stopWords = set(stopwords.words('english'))
words = word_tokenize(data)
wordsFiltered = []
for w in words:
if w not in stopWords:
wordsFiltered.append(w)
print(wordsFiltered)
? ? ? ?提示:
? ? ? ?1梢灭、如果我們想要修改 NLTK 的停用詞列表夷家,可以去我們一開始提到的下載的資源中去修改。具體位置是在 nltk_data --> corpora --> stopwords 文件夾中敏释,進入這個文件夾后库快,我們會發(fā)現(xiàn)很多種語言的停用詞列表,然后按照自己的需要進行修改即可钥顽。
? ? ? ?2义屏、NLTK 不支持對中文的分詞,如果想要對中文進行分詞蜂大,可以考慮使用結(jié)巴(jieba)分詞闽铐,這里不再做過多闡述。
三县爬、分句
? ? ? ?分句使用的方法是 sent_tokenize()阳啥,分句的代碼如下:
from nltk.tokenize import sent_tokenize
data = "All work and no play makes jack dull boy. All work and no play makes jack a dull boy."
print(sent_tokenize(data))
? ? ? ?代碼執(zhí)行結(jié)果如下:
['All work and no play makes jack dull boy.', 'All work and no play makes jack a dull boy.']
? ? ? ?提示:和分詞一樣,NLTK 同樣不支持對中文的分句财喳。具體支持哪些語言的分句察迟,可以參考 nltk_data --> tokenizers --> punkt,進入這個文件夾后就一目了然了耳高。
? ? ? ?多說一點:
? ? ? ?NLTK 支持的分句方式不止這一種類型扎瓶,但無論哪種類型,都是相對簡單的泌枪。如果直接應(yīng)用到工業(yè)中一般都會多少出現(xiàn)一些這樣或那樣的問題概荷。因為在現(xiàn)實當中存在很多習(xí)慣性的非正式的縮寫,同時一個詞里面可能包含某些特殊符號等碌燕,這些因素都會導(dǎo)致分詞的錯誤误证。目前的解決方案主要是通過自定義詞典來彌補上述的不足。
相關(guān)文檔
上一篇:使用 Gson 實現(xiàn) Json 字符串和 Java 對象之間的相互轉(zhuǎn)換
下一篇:NLTK(二):英文詞性標注