前言
之前我一直是用Stanford coreNLP做自然语言处理的,主要原因是对于一些时间信息的处理,SUTime是一个不错的包。当然,并不算完美,可是对于基本的英文中的时间表述,抽取和normalization做的都算不错。
想要用NLTK的原因是最近自己喜欢上了用Jupyter写代码(话说把Jupyter搭在服务器上真是爽),不是非要处理时间信息的话,一些简单的自然语言处理的操作不想在Java和python之间来回切了。
本文基本按照Dive into NLTK的步骤进行,里面穿插废话。另,Text Mining Online是个好网站。
NLTK简介及安装
NTLK官网在这里,有问题可以自己上去看教程。这个Blog的主要是记录一下自己的一些使用,用于备忘。我的工具包基本都是自己的MAC和服务器的CentOS一起装的。
NLTK安装(MAC/CentOS)pip install -U nltk
NLTK Data安装
python
>>> import nltk
>>> nltk.downloard()
Mac会蹦出对话框,CentOS还是是命令行。根据提示,选择download,选择all。这里注意下,你可能需要根据提示选择config修改一下下载文件夹之类的设定。
常用操作
- Sentence Tokenize
>>> from nltk.tokenize import sent_tokenize
>>> sent_tokenize_list = sent_tokenize(text)
Sentence Tokenize是PunktSentenceTokenizer的实例。nltk.tokenize.punkt中包含了很多预先训练好的tokenize模型。详见Dive into NLTK II. 具体应用如下:
>>> 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’, ‘test’]
Word Tokenize是TreebankWordTokenizer的皮包函数(看成包皮的请面壁)。所以下面这个代码和上面等价。
>>> from nltk.tokenize import TreebankWordTokenizer
>>> tokenizer = TreebankWordTokenizer()
>>> tokenizer.tokenize("this's a test")
[‘this’, “‘s”, ‘a’, ‘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’, ‘test’]
以及
>>> from nltk.tokenize import WordPunctTokenizer
>>> word_punct_tokenizer = WordPunctTokenizer()
>>> word_punct_tokenizer.tokenize("This's a test")
[‘This’, “‘”, ‘s’, ‘a’, ‘test’]
然而在实际应用中,PunktWordTokenizer已经弃用了,即使在没有弃用之前,也只适用于Punkt划分的句子。详见这里的讨论。