前言
之前我一直是用Stanford coreNLP做自然語(yǔ)言處理的氓癌,主要原因是對(duì)于一些時(shí)間信息的處理,SUTime是一個(gè)不錯(cuò)的包贫橙。當(dāng)然贪婉,并不算完美,可是對(duì)于基本的英文中的時(shí)間表述卢肃,抽取和normalization做的都算不錯(cuò)疲迂。
想要用NLTK的原因是最近自己喜歡上了用Jupyter寫(xiě)代碼(話說(shuō)把Jupyter搭在服務(wù)器上真是爽),不是非要處理時(shí)間信息的話莫湘,一些簡(jiǎn)單的自然語(yǔ)言處理的操作不想在Java和python之間來(lái)回切了尤蒿。
本文基本按照Dive into NLTK的步驟進(jìn)行,里面穿插廢話幅垮。另月洛,Text Mining Online是個(gè)好網(wǎng)站撕贞。
NLTK簡(jiǎn)介及安裝
NTLK官網(wǎng)在這里胶滋,有問(wèn)題可以自己上去看教程狡门。這個(gè)Blog的主要是記錄一下自己的一些使用醋火,用于備忘瘟栖。我的工具包基本都是自己的MAC和服務(wù)器的CentOS一起裝的渊啰。
NLTK安裝(MAC/CentOS)pip install -U nltk
NLTK Data安裝
python
>>> import nltk
>>> nltk.downloard()
Mac會(huì)蹦出對(duì)話框贯卦,CentOS還是是命令行爷耀。根據(jù)提示甘桑,選擇download,選擇all。這里注意下跑杭,你可能需要根據(jù)提示選擇config修改一下下載文件夾之類的設(shè)定铆帽。
常用操作
- Sentence Tokenize
>>> from nltk.tokenize import sent_tokenize
>>> sent_tokenize_list = sent_tokenize(text)
Sentence Tokenize是PunktSentenceTokenizer的實(shí)例。nltk.tokenize.punkt中包含了很多預(yù)先訓(xùn)練好的tokenize模型德谅。詳見(jiàn)Dive into NLTK II. 具體應(yīng)用如下:
>>> import nltk.data
>>> tokenizer = nltk.data.load(‘tokenizers/punkt/english.pickle’)
>>> tokenizer.tokenize(text)
>>> spanish_tokenizer = nltk.data.load(‘tokenizers/punkt/spanish.pickle’)
>>> spanish_tokenizer.tokenize(‘Hola amigo. Estoy bien.’)
- Word Tokenize
>>> from nltk.tokenize import word_tokenize
>>> word_tokenize(‘Hello World.’)
[‘Hello’, ‘World’, ‘.’]
>>> word_tokenize(“this’s a test”)
[‘this’, “‘s”, ‘a(chǎn)’, ‘test’]
Word Tokenize是TreebankWordTokenizer的皮包函數(shù)(看成包皮的請(qǐng)面壁)爹橱。所以下面這個(gè)代碼和上面等價(jià)。
>>> from nltk.tokenize import TreebankWordTokenizer
>>> tokenizer = TreebankWordTokenizer()
>>> tokenizer.tokenize("this's a test")
[‘this’, “‘s”, ‘a(chǎn)’, ‘test’]
在Dive into NLTK II中提到還可以使用其他的WordTokenizer窄做。代碼如下:
>>> from nltk.tokenize import PunktWordTokenizer
>>> punkt_word_tokenizer = PunktWordTokenizer()
>>> punkt_word_tokenizer.tokenize("this's a test")
[‘this’, “‘s”, ‘a(chǎn)’, ‘test’]
以及
>>> from nltk.tokenize import WordPunctTokenizer
>>> word_punct_tokenizer = WordPunctTokenizer()
>>> word_punct_tokenizer.tokenize("This's a test")
[‘This’, “‘”, ‘s’, ‘a(chǎn)’, ‘test’]
然而在實(shí)際應(yīng)用中愧驱,PunktWordTokenizer已經(jīng)棄用了,即使在沒(méi)有棄用之前椭盏,也只適用于Punkt劃分的句子组砚。詳見(jiàn)這里的討論。