准备好电影评论数据集后,我们需要思考如何将文本语料拆分为单独的元素。标记(tokenize)文档的一种常用方法就是通过文档的空白字符将其拆分为单独的单词。
在对文本进行标记的过程中,另外一种有用的技术就是词干提取(word stemming),这是一个提取单词原形的过程,那样我们就可以将一个单词映射到其对应的词干上。最初的词干提取算法是由Martin F.Porter于1979年提出的,由此也称为Porter Stemmer算法[1]。Python自然语言工具包(NLTK,http://www.nltk.org)实现了Porter Stemming算法,我们将在下一小节中用到它。要安装NLTK,只要执行命令:pip install nltk。
尽管NLTK不是本章的重点,若读者对自然语言处理有更进一步的兴趣,作者强烈建议访问NTLK的网站及其官方资料,它们均可通过链接http://www.nltk.org/book/免费获得。
使用nltk包中的PorterStemmer修改tokenizer函数,使单词都恢复到其原始形式,借用前面的例子,单词running恢复为run。
Porter stamming算法可能是最原始也是最简单的词干提取算法了。其他流行的词干提取算法包括Snowball stemmer(Porter2,也称为"English"stemmer)以及Lancaster stemmer(Paice-Husk stemmer),与Porter stemming算法相比,它们提取速度更高不过提取时也更加野蛮。这些算法也在nltk包中得以实现(http://www.nltk.org/api/nltk.stem.html)。
正如前面例子所示,词干提取也可能生成一些不存在的单词,例如前面例子中提到的thu(通过提取thus得到),词形还原(lemmatization)是一种以获得单个单词标准形式(语法上正确)——也就是所谓的词元(lemma)——为目标的技术。不过,相较于词干提取,词形还原的计算更加复杂和昂贵,通过实际应用中的观察发现,在文本分类中,这两种技术对分类结果的影响不大(Michal Toman,Roman Tesar,and Karel Jezek.Influence of word normalization on text classification.Proceedings of InSciT,pages 354-358,2006)。
下一章将使用词袋模型训练一个机器学习模型,在此之前,我们简要介绍下另一种有用的技术:停用词移除(stop-word removal)。停用词是指在各种文本中太过常见,以致没有(或很少)含有用于区分文本所属类别的有用信息。常见的停用词有is、and、has等。由于tf-idf可以降低频繁出现单词的权重,因此当我们使用原始或归一化的词频而不是tf-idf时,移除停用词是很有用的。
我们可通过调用nltk.download函数得到NLTK库提供的停用词,并使用其中的127个停用词对电影评论数据进行停用词移除处理:
完成之后,可以通过如下方式加载和使用由nltk.download得到的英文停用词集:
[1] Martin F.Porter.An algorithm for suffix stripping.Program:electronic library and information systems,14(3):130-137.1980.