赞
踩
首先中文文本预处理一般不需要做分词处理(特殊需求除外,例如推特上文本数据,部分用户编写的内容存在连词的情况,如onlinecommunities可以分为 online communities,LakeCounty分为Lake Country效果会更好)而中文预处理分词是必不可少的一环。
第二点是,大部分英文文本都是utf-8的编码,这样在大多数处理的时候不用考虑编码转换的问题,而中文文本处理必须要处理unicode编码问题。
除了上面两个特点之外,英文文本的预处理还有自己特殊的地方,第三点是拼写检查,比如说“helo world”这样的拼写错误需要在预处理阶段加以纠正。第四点是词干提取(stemming)和词形还原(lemmatization),这是由于英文存在单复数和各种时态,导致一个词有多种不同的形式。
获取方法一般有两种:使用比人做好的语料库、自己用爬虫去网上自己爬自己的预料数据
对于第一种方法,常用的文本语料库在网上有很多,如果大家只是学习,则可以直接下载下来使用,但如果是某些特殊主题的语料库,比如“deep learning”相关的语料库,则这种方法行不通,需要我们自己用第二种方法去获取。
对于第二种使用爬虫的方法,开源工具有很多,通用的爬虫我一般使用beautifulsoup。但是我们我们需要某些特殊的语料数据,比如上面提到的“deep learning”相关的语料库,则需要用主题爬虫(也叫聚焦爬虫)来完成。这个我一般使用ache。 ache允许我们用关键字或者一个分类算法模型来过滤出我们需要的主题语料,比较强大。
这一部分主要针对我们用爬虫收集的语料数据,内容中含有很多html的一些标签,有的比赛提供的语料数据也存在这些问题,可以通过数据探索性分析观察数据是否需要进行这步操作。通常利用python正则表达式re删除即可。
由于英文文本中可能有拼写错误,因此一般需要进行拼写检查。如果确信我们分析的文本没有拼写问题,可以略去此步。
拼写检查,我们一般用pyenchant类库完成。pyenchant的安装很简单:"pip install pyenchant"即可。
对于一段文本,我们可以用下面的方式去找出拼写错误:
from enchant.checker import SpellChecker
chkr = SpellChecker("en_US")
chkr.set_text("Many peope likee to watch In the Name of People.")
for err in chkr:
print "ERROR:", err.word
找出错误后,我们可以自己来决定是否要改正。当然,我们也可以用pyenchant中的wxSpellCheckerDialog类来用对话框的形式来交互决定是忽略,改正还是全部改正文本中的错误拼写。大家感兴趣的话可以去研究pyenchant的官方文档。
词干提取(stemming)和词型还原(lemmatization)是英文文本预处理的特色。两者其实有共同点,即都是要找到词的原始形式。只不过词干提取(stemming)会更加激进一点,它在寻找词干的时候可以会得到不是词的词干。比如"imaging"的词干可能得到的是"imag", 并不是一个词。而词形还原则保守一些,它一般只对能够还原成一个正确的词的词进行处理。个人比较喜欢使用词型还原而不是词干提取。
在实际应用中,一般使用nltk来进行词干提取和词型还原。安装nltk也很简单,"pip install nltk"即可。只不过我们一般需要下载nltk的语料库,可以用下面的代码完成,nltk会弹出对话框选择要下载的内容。选择下载语料库就可以了。
import nltk
nltk.download()
在nltk中,做词干提取的方法有PorterStemmer,LancasterStemmer和SnowballStemmer。个人推荐使用SnowballStemmer。这个类可以处理很多种语言,当然,除了中文。
from nltk.stem import SnowballStemmer
stemmer = SnowballStemmer("english") # Choose a language
stemmer.stem("countries") # Stem a word
输出是"countri",这个词干并不是一个词。
而如果是做词型还原,则一般可以使用WordNetLemmatizer类,即wordnet词形还原方法。
from nltk.stem import WordNetLemmatizer
wnl = WordNetLemmatizer()
print(wnl.lemmatize('countries'))
输出是"country",比较符合需求。
在实际的英文文本挖掘预处理的时候,建议使用基于wordnet的词形还原就可以了。
由于英文单词有大小写之分,我们期望统计时像“Home”和“home”是一个词。因此一般需要将所有的词都转化为小写。这个直接用python的lower(_)就可以搞定。命题实体识别项目一般需要保留大写。
在英文文本中有很多无效的词,比如“a”,“to”,一些短词,还有一些标点符号,这些我们不想在文本分析的时候引入,因此需要去掉,这些词就是停用词。个人常用的英文停用词表下载地址在这。当然也有其他版本的停用词表,不过这个版本是我常用的。
在我们用scikit-learn做特征处理的时候,可以通过参数stop_words来引入一个数组作为停用词表。这个方法和前文讲中文停用词的方法相同。
需要注意的是,如果我们使用预训练模型,则通常不需要进行去除停用词的操作。
现在我们就可以用scikit-learn来对我们的文本特征进行处理了,在文本挖掘预处理之向量化与Hash Trick中,我们讲到了两种特征处理的方法,向量化与Hash Trick。而向量化是最常用的方法,因为它可以接着进行TF-IDF的特征处理。在文本挖掘预处理之TF-IDF中,我们也讲到了TF-IDF特征处理的方法。
TfidfVectorizer类可以帮助我们完成向量化,TF-IDF和标准化三步。当然,还可以帮我们处理停用词。这部分工作和中文的特征处理也是完全相同的。
转载自https://www.cnblogs.com/pinard/p/6756534.html,作者刘建平Pinard
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。