英文文本挖掘预处理流程总结

    在中文文本挖掘预处理流程总结中,咱们总结了中文文本挖掘的预处理流程,这里咱们再对英文文本挖掘的预处理流程作一个总结。html

1.  英文文本挖掘预处理特色

    英文文本的预处理方法和中文的有部分区别。首先,英文文本挖掘预处理通常能够不作分词(特殊需求除外),而中文预处理分词是必不可少的一步。第二点,大部分英文文本都是uft-8的编码,这样在大多数时候处理的时候不用考虑编码转换的问题,而中文文本处理必需要处理unicode的编码问题。这两部分咱们在中文文本挖掘预处理里已经讲了。python

    而英文文本的预处理也有本身特殊的地方,第三点就是拼写问题,不少时候,咱们的预处理要包括拼写检查,好比“Helo World”这样的错误,咱们不能在分析的时候讲错纠错。因此须要在预处理前加以纠正。第四点就是词干提取(stemming)和词形还原(lemmatization)。这个东西主要是英文有单数,复数和各类时态,致使一个词会有不一样的形式。好比“countries”和"country","wolf"和"wolves",咱们指望是有一个词。git

    后面的预处理中,咱们会重点讲述第三点和第四点的处理。github

2.  英文文本挖掘预处理一:数据收集

    这部分英文和中文相似。获取方法通常有两种:使用别人作好的语料库和本身用爬虫去在网上去爬本身的语料数据。正则表达式

    对于第一种方法,经常使用的文本语料库在网上有不少,若是你们只是学习,则能够直接下载下来使用,但若是是某些特殊主题的语料库,好比“deep learning”相关的语料库,则这种方法行不通,须要咱们本身用第二种方法去获取。算法

    对于第二种使用爬虫的方法,开源工具备不少,通用的爬虫我通常使用beautifulsoup。可是咱们咱们须要某些特殊的语料数据,好比上面提到的“deep learning”相关的语料库,则须要用主题爬虫(也叫聚焦爬虫)来完成。这个我通常使用ache。 ache容许咱们用关键字或者一个分类算法模型来过滤出咱们须要的主题语料,比较强大。数组

3.  英文文本挖掘预处理二:除去数据中非文本部分

    这一步主要是针对咱们用爬虫收集的语料数据,因为爬下来的内容中有不少html的一些标签,须要去掉。少许的非文本内容的能够直接用Python的正则表达式(re)删除, 复杂的则能够用beautifulsoup来去除。另外还有一些特殊的非英文字符(non-alpha),也能够用Python的正则表达式(re)删除。工具

4.  英文文本挖掘预处理三:拼写检查更正

    因为英文文本中可能有拼写错误,所以通常须要进行拼写检查。若是确信咱们分析的文本没有拼写问题,能够略去此步。post

    拼写检查,咱们通常用pyenchant类库完成。pyenchant的安装很简单:"pip install pyenchant"便可。学习

    对于一段文本,咱们能够用下面的方式去找出拼写错误:

    完整代码参见个人github: https://github.com/ljpzzz/machinelearning/blob/master/natural-language-processing/english_digging.ipynb

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

    输出是:

ERROR: peope
ERROR: likee

    找出错误后,咱们能够本身来决定是否要改正。固然,咱们也能够用pyenchant中的wxSpellCheckerDialog类来用对话框的形式来交互决定是忽略,改正仍是所有改正文本中的错误拼写。你们感兴趣的话能够去研究pyenchant的官方文档。

5.  英文文本挖掘预处理四:词干提取(stemming)和词形还原(lemmatization)

    词干提取(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的词形还原就能够了。

    在这里有个词干提取和词型还原的demo,若是是这块的新手能够去看看,上手很合适。

6. 英文文本挖掘预处理五:转化为小写

    因为英文单词有大小写之分,咱们指望统计时像“Home”和“home”是一个词。所以通常须要将全部的词都转化为小写。这个直接用python的API就能够搞定。

7. 英文文本挖掘预处理六:引入停用词

    在英文文本中有不少无效的词,好比“a”,“to”,一些短词,还有一些标点符号,这些咱们不想在文本分析的时候引入,所以须要去掉,这些词就是停用词。我的经常使用的英文停用词表下载地址在这。固然也有其余版本的停用词表,不过这个版本是我经常使用的。

    在咱们用scikit-learn作特征处理的时候,能够经过参数stop_words来引入一个数组做为停用词表。这个方法和前文讲中文停用词的方法相同,这里就不写出代码,你们参考前文便可。

8. 英文文本挖掘预处理七:特征处理

    如今咱们就能够用scikit-learn来对咱们的文本特征进行处理了,在文本挖掘预处理之向量化与Hash Trick中,咱们讲到了两种特征处理的方法,向量化与Hash Trick。而向量化是最经常使用的方法,由于它能够接着进行TF-IDF的特征处理。在文本挖掘预处理之TF-IDF中,咱们也讲到了TF-IDF特征处理的方法。

    TfidfVectorizer类能够帮助咱们完成向量化,TF-IDF和标准化三步。固然,还能够帮咱们处理停用词。这部分工做和中文的特征处理也是彻底相同的,你们参考前文便可。

9. 英文文本挖掘预处理八:创建分析模型

    有了每段文本的TF-IDF的特征向量,咱们就能够利用这些数据创建分类模型,或者聚类模型了,或者进行主题模型的分析。此时的分类聚类模型和以前讲的非天然语言处理的数据分析没有什么两样。所以对应的算法均可以直接使用。而主题模型是天然语言处理比较特殊的一块,这个咱们后面再单独讲。

10. 英文文本挖掘预处理总结

    上面咱们对英文文本挖掘预处理的过程作了一个总结,但愿能够帮助到你们。须要注意的是这个流程主要针对一些经常使用的文本挖掘,并使用了词袋模型,对于某一些天然语言处理的需求则流程须要修改。好比有时候须要作词性标注,而有时候咱们也须要英文分词,好比获得"New York"而不是“New”和“York”,所以这个流程仅供天然语言处理入门者参考,咱们能够根据咱们的数据分析目的选择合适的预处理方法。

 

 (欢迎转载,转载请注明出处。欢迎沟通交流: liujianping-ok@163.com) 

相关文章
相关标签/搜索