假设是网页内容,首先须要去掉Html Tag。lxml和html5lib是比較有名的Python库,beautifulsoup也对他们做了一层封装。只是别忘了。Python本身也自带了sgmllib这种基本可扩展的解析器。假设是有特别的处理。事实上正則表達式也是不错的选择。
处理编码,由于我主要是处理英文的数据,这一步基本也跳过了。
将文档切割成句子(可选)。
非常多时候我们採用的是词袋模型(bag of words),所以是否切割成句子也无所谓。比較简单的方法就是Python NLTK中的sent_tokenize()函数,用的是punkt算法,论文在这里。
将句子切割成词。首先用正則表達式能够自己完毕;假设要利用已有工具。Python NLTK中的word_tokenize(),这个方式就是前文提到的Penn TreeBank语料库所使用的分词方法。听起来是不是非常高大上。我是不会告诉你事实上它也是正則表達式实现的。想知道详细实现。戳这里。分词事实上主要干了这么几个事:1)将’分开.
don't -> do n't, they'll -> they 'll; 2)将大部分标点当作单独的一个词; 3)将后一位是逗号或者引號的词分开; 4)单独出如今一行的句号分开。中文分词差别比較大,能够採用斯坦福或者ICTCLAS(中科院背景)的方案。
拼写错误纠正。推荐pyenchant。非常喜欢,由于简洁到四句语句就能完毕。
Windows 8中操作系统也直接提供了拼写检查的COM端口,只是就得多花时间研究啦。
POS Tagging(依据实际应用)。还是Nltk。首页就有介绍;斯坦福也提供了这类工具。
这一块属于NLP的范畴,还是Parsing等应用,要了解NLP原理推荐Coursera上一门不错的课程Natural
Language Processing
去掉标点。正則表達式就可以。有的时间非常短的单词也能够一起去掉。len<3的常见的选择
去掉非英文字符的词&#xff08;依据实际应用决定&#xff09;。
转换成小写。
去掉停用词。就是在各种句子中都经常出现的一些词&#xff0c;I、and什么的。
NLTK有一个Stopwords。Matthew
L. Jockers提供了一份比机器学习和自然语言处理中经常使用的停词表更长的停词表。中文停用词戳这里。什么&#xff1f;你问我停用词怎么找到的。我想大概是IDF这种算法吧。
词型转换。
简单来讲&#xff0c;我们希望do、did、done都能统一的返回do。第一种方法叫stem&#xff0c;Porter是比較常见的一种基于规则的算法。网页有snowball工具。也是它的论文。Porter的结果差强人意&#xff0c;单词末尾有e、y的。基本上stem之后都不间了&#xff0c;比如replace->replac。末尾有反复单词的。基本仅仅剩一个了&#xff0c;比如ill->il。
NLTK中也有Stem库。算法应该是相似的。
另外一种方法叫lemmatization&#xff0c;就是基于词典做词型转换&#xff0c;NLTK的Stem库中便有WordNetLemmatizer能够使用。
去掉长度过小的词&#xff08;可选&#xff09;。假设之前做了。这里要再做一次。由于stem会改变词型。
又一次去停用词。理由同上。