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

最近半年一直忙于项目,博客也很少更新咯。有几个项目做了不少JS相关的工作,基本都可以利用现成的开源方案,诸如angularJs、requireJs、bootstrap、knockoutJs、TypeScript、Jquery等等;之后也有项目是无UI的,纯后端的内容,主要就是考虑并行、性能、模块化等;之后的很长一段时间便主要在处理文本挖掘相关的项目(英文项目)。今天正好有空也准备对文本挖掘预处理的流程做一些总结,希望是干货:

  • 收集数据

总所周知,数据挖掘模型中非常重要的部分是训练模型,训练集与测试集便是整个数据挖掘过程中花费时间最多的过程。数据集通过有如下的一些途径获得:

  1. 经典数据集:Python NLTK 便提供了非常多经典的数据集。很多数据集都是手工标注而成,所以使用的时候不得不感叹工程的浩大。例如NLP中使用的Penn TreeBank,有兴趣的同学可以看看他们的论文《Building
    a Large Annotated Corpus of English: The Penn TreeBank》
    ,那简直就是一部辛酸史啊!
  2. 从网页上抓取:直接动手写一个爬虫爬取特定的网页不难,通过正则表达式就能够将有效的内容提取出来;当然,发扬拿来主义精神的话,我们可以使用Python中一些优秀的库,比如scrapybeautifulsoup
    等等。
  3. 从日志、已有文件中分析:如果是海量数据的话可以使用hadoop这样的系统。结合传统SQL中的一些特殊功能,例如Partition,有时会有不错的效果,不过最多压缩空间、缩减特征再用SQL处理。
  4. 其他网络数据集:Stanford Large Network Dataset Collectionm100+ Interesting Data Sets for Statistics
  • 预处理
  1. 如果是网页内容,首先需要去掉Html Tag,lxmlhtml5lib是比较有名的Python库,beautifulsoup也对他们做了一层封装。不过别忘了,Python本身也自带了sgmllib这样的基本可扩展的解析器。如果是有特别的处理,其实正则表达式也是不错的选择。
  2. 处理编码,由于我主要是处理英文的数据,这一步基本也跳过了。
  3. 将文档分割成句子(可选)。很多时候我们采用的是词袋模型(bag of words),所以是否分割成句子也无所谓。比较简单的方法就是Python NLTK中的sent_tokenize()函数
  4. 将句子分割成词。首先用正则表达式可以自己完成;如果要利用已有工具,Python NLTK中的word_tokenize(),这个方式就是前文提到的Penn TreeBank语料库所使用的分词方法。听起来是不是很高大上,我是不会告诉你其实它也是正则表达式实现的,想知道具体实现,戳这里。分词其实主要干了这么几个事:1)将’分开.
    don‘t -> do n‘t, they‘ll -> they ‘ll; 2)将大部分标点当作单独的一个词; 3)将后一位是逗号或者引号的词分开; 4)单独出现在一行的句号分开。中文分词区别比较大,可以采用斯坦福或者ICTCLAS(中科院背景)的方案。
  5. 拼写错误纠正。推荐pyenchant,非常喜欢,因为简洁到四句语句就能完成。Windows 8中操作系统也直接提供了拼写检查的COM端口,不过就得多花时间研究啦。
  6. POS Tagging(根据实际应用)。还是Nltk,首页就有介绍;斯坦福也提供了这类工具。这一块属于NLP的范畴,还是Parsing等应用,要了解NLP原理推荐Coursera上一门不错的课程Natural
    Language Processing
  7. 去掉标点。正则表达式即可,有的时间非常短的单词也可以一起去掉,len<3的常见的选择
  8. 去掉非英文字符的词(根据实际应用决定)。
  9. 转换成小写。
  10. 去掉停用词。就是在各种句子中都经常出现的一些词,I、and什么的。NLTK有一个StopwordsMatthew
    L. Jockers
    提供了一份比机器学习和自然语言处理中常用的停词表更长的停词表。中文停用词戳这里。什么?你问我停用词怎么找到的,我想大概是TFIDF这样的算法吧。
  11. 词型转换。简单来讲,我们希望do、did、done都能统一的返回do。第一种方法叫stem,Porter是比较常见的一种基于规则的算法,网页有snowball工具,也是它的论文。Porter的结果差强人意,单词末尾有e、y的,基本上stem之后都不间了,例如replace->replac;末尾有重复单词的,基本只剩一个了,例如ill->il。NLTK中也有Stem库,算法应该是类似的。第二种方法叫lemmatization,就是基于词典做词型转换,NLTK的Stem库中便有WordNetLemmatizer可以使用。
  12. 去掉长度过小的词(可选)。如果之前做了,这里要再做一次,因为stem会改变词型。
  13. 重新去停用词。理由同上。
  • 训练

这个主题太大,不是这篇日志的重点。简单来讲,Python的NLTKscikit.learn是非常优秀的工具,另外,R也是不错的一门语言。可视化的工具可以采用Weka、KNIME、Tanagra、RapidMiner
、Orange、GGobi等。这方面最好的课程当属Andrew Ng的Machine Learning,那个识别猫脸的Google Brain(Deep Learning)变是他的功绩。

写了不少内容,时间也不早了,睡了。

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

时间: 2024-10-30 14:06:36

文本挖掘预处理的流程总结的相关文章

文本预处理和计算TF-IDF值

计算文档的TF-IDF值 参考链接: 英文文本挖掘预处理流程总结,文本挖掘预处理之向量化,文本挖掘预处理之TF-IDF 1.TF-IDF TF-IDF(Term Frequency-Inverse Document Frequency, 词频-逆文件频率). 是一种用于资讯检索与资讯探勘的常用加权技术.TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度.字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降. 上述

用scikit-learn学习LDA主题模型

在LDA模型原理篇我们总结了LDA主题模型的原理,这里我们就从应用的角度来使用scikit-learn来学习LDA主题模型.除了scikit-learn,  还有spark MLlib和gensim库也有LDA主题模型的类库,使用的原理基本类似,本文关注于scikit-learn中LDA主题模型的使用. 1. scikit-learn LDA主题模型概述 在scikit-learn中,LDA主题模型的类在sklearn.decomposition.LatentDirichletAllocatio

用gensim学习word2vec

在word2vec原理篇中,我们对word2vec的两种模型CBOW和Skip-Gram,以及两种解法Hierarchical Softmax和Negative Sampling做了总结.这里我们就从实践的角度,使用gensim来学习word2vec. 1. gensim安装与概述 gensim是一个很好用的Python NLP的包,不光可以用于使用word2vec,还有很多其他的API可以用.它封装了google的C语言版的word2vec.当然我们可以可以直接使用C语言版的word2vec来

现在,越来越多的科技公司和开发者开始使用就是他!初到广州的黄女士

imor javamaBigDecimal; ** * 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精 * 确的浮点数运算,包括加减乘除和四舍五入.sringboo项目可以直接启动主类即可,但是线上的项目一般都会放在容器里面run,因此记录下我在开发中是如何将sringboo项目打包成war包形式部署在omc? ? ? ? ? ? 前端时间开发接触了一个开源框架jeecg,里面封装了sring与quarz整合的定时任务实现方式.因为之前尝试过单纯使用quarz来实现定时最近

Python gensim库word2vec的使用

ip install gensim安装好库后,即可导入使用: 1.训练模型定义 from gensim.models import Word2Vec   model = Word2Vec(sentences, sg=1, size=100,  window=5,  min_count=5,  negative=3, sample=0.001, hs=1, workers=4)   参数解释: 0.sentences是训练所需语料,可通过以下方式进行加载 sentences=word2vec.Te

20150113--PDO增删改查+封装PDO类

回顾 方法重写:是因为对象的访问会先去子类的类空间找,从而形成了对父类的覆盖. 继承链:类只能单继承,但是可以通过继承链来实现多继承 特殊类:final类和抽象类 接口:interface PHP重载:当访问一个权限不够或者不存在的属性或者方法的时候,会自动触发的魔术方法. 属性重载和方法重载 对象的保存和还原:serialize和unserialize(对应的类已经在内存:如果有资源属性必须进行重新加载资源),魔术方法(__sleep和__wakeup) 对象遍历:默认只能遍历public属性

【读书】JavaScript 设计模式与开发实践

2016.08.30 <JavaScript 设计模式与开发实践> 曾探 人民邮电出版社 2016年5月第1版 p13 找到变化的部分并封装之,以使得容易替换:而剩下的就是不变的部分. P49 函数柯里化(currying)的作用是多次收集参数,然后作为数组传给处理函数再一次执行. 其意义在于预处理--将预处理的流程放到一个函数里会更为清晰可控. P57 惰性加载函数 在函数内部重写引用函数的外部变量的引用,从而在第一次"调用"此变量后,此变量就指向新的正确的函数. p84

2012高校GIS论坛

江苏省会议中心 南京·钟山宾馆(2012年4月21-22日) 以"突破与提升"为主题的"2012高校GIS论坛"将于4月在南京举行,由南京大学和工程中心共同承办.高校GIS论坛每两年举办一次,已在北京九华山庄成功举办三届,现已发展成为国内高校GIS教育界最有权威,最具影响力的高端论坛. 赛迪网直播小组正在现场进行图文.微博直播——2012高校GIS论坛! 主持人:尊敬的李院长.曹省长.陈校长,“突破与提升2012高校GIS论坛”现在开幕!首先请允许我介绍出席今天开幕

广东外语外贸大学16-17学年上学期第1周例会会议纪要

广东外语外贸大学 16-17学年上学期第1周例会会议纪要 广外数据挖掘实验室[2016] 会议时间:2016年10月15日 会议地点:C505 会议记录:徐传懋.黎柏棋 请假人员:林楠凯.黎国本.高俊辉 迟到人员:无 会议内容: 一.   英语文本预处理大致流程(Python语言:nltk库) (1)数据准备(去除空白符) (2)单词小写化.分离标点符号和单词(lower方法:nltk的toknize函数) (3)去停用词(使用nltk内部的英语停用词表) (4)去标点符号(string包:ma