R 和 Python 中的文本挖掘:8 个入门小贴士

你希望学习文本挖掘,却发现大多数教程难度跨度很大?或者说你找不到心仪的数据集?

本文将会通过 8 个小贴士帮助你走进文本挖掘之门。

对文本保持好奇

在数据科学世界中,凡事的第一步都是“感到好奇”,文本挖掘也不例外。

就像 StackOverflow 的数据科学家 David Robinson 在他的博客中说的那样,“当我看到一个假设 […] 我就迫不及待地想要用数据验证它”。你也应该像他那样对文本保持好奇心。

David Robinson 看到的假设是:

即使你并不打算真的去验证它,你也应该对自己看到的词云图感到好奇,并且有想要自己动手复现一遍的想法。

如果你还未能感受到文本挖掘的魅力,那就来看看这些最近在媒体上广受关注的文本挖掘应用案例吧,比如 South Park dialogue, film dialogue 等等,你会从中得到启发。

掌握你所需要的知识和技能

当你拥有了好奇心,是时候去学习关于文本挖掘的知识和技能了。你可以通过完成一些教学课程轻松地做到这一步。

在这些教程中你需要格外关注的是数据科学工作流中的基本步骤,比如数据预备和预处理,数据探索,数据分析等等。

推荐阅读:

  • Ted Kwartler: Text Mining in R: Are Pokémon GO Mentions Really Driving Up Stock Prices?
  • Ted Kwartler: Text Mining: Bag of Words
  • Neal Caren: An introduction to text analysis with Python
  • Kaggle: Part 1: For Beginners – Bag of Words
  • DataCamp: Learn Data Science – Resources for Python & R

词语,词语,词语 – 寻找你的数据

一旦你掌握了分析和展现数据所需的基本概念和方法,就可以开始寻找你的数据了!

有非常多途径可以找到你心仪的数据,除了 google trends 和雅虎,你还可以从以下途径获取数据:

  • 推特!R 和 Python 都提供了连接推特 API 的包或库。
  • The Internet Archive, 一个非营利性的资料库,包含上百万的免费图书、电影、软件、音乐、网页等等。
  • Project Gutenberg, 提供超过 55000 本免费电子书。大多数是成熟文献,如果你想要对如像莎士比亚、简·奥斯汀、爱伦坡这样的作家的用词进行分析,它会是很好的资源。
  • 在学术方面,你可以使用 JSTOR’s data for research。这是一个免费的自助工具,允许计算机科学、数字人文主义者和其他研究者使用 JSTOR 上的内容。
  • 如果你打算像开头的例子中一样对剧集或者电影进行文本挖掘,你可能需要考虑下载字幕。只要谷歌一下就能得到你想要的文本挖掘语料。
  • 你也可以从语料库开始。两个著名的语料库是:

The Reuters Text Corpus, 一些人对这个语料库是不是最多样化的语料库有争议,但是它仍然对你开始学习文本挖掘很有帮助;

Brown Corpus, 包括500种来源的文本,并已经根据类型分类。

如你所见,文本来源有无限可能。任何包含文本的东西都可以成为你的文本挖掘案例学习的主题。

寻找合适的工具

现在你已经找到了你的数据的来源,你可能需要使用合适的工具来对他们进行处理。你已经学习的教学课程应该已经为你提供了许多入门工具。

但是,如果你仅仅学习了教学课程,你可能错过了一些东西,比如下文会介绍的用 R 进行文本挖掘时会用到的包:

  • 在R中进行文本挖掘时最常用的包毫无疑问是 tm 包。这个包常被加入到其他包中,比如 twitterR 包,通过这个包你可以从推特的网页上提取推文和关注者等。
  • 在 R 中进行网页爬虫的时候你需要 rvest 包,这里有一个简短的 rvest 教程。
  • 对于Python,你可以使用以下库:
  • 自然语言工具箱,包含在 nltk 包中,这个包是极其实用的,因为他提供了超过 50 种语料库和词汇资源的入口。你可以查看 nltk 数据列表。
  • 如果你想要挖掘推特数据,你有许多包可以选择。其中最广泛被使用的是 tweey 包
  • 对于网页爬虫,scrapy 包是最容易上手的,也可以考虑使用 urllib2,这是一个用来打开网页链接的包。有时候更推荐使用 requests, 因为某些场合下它可能更方便使用。也有些人说它更加人性化,因为诸如设置 user-agent 和请求页面都只需要一行代码。偶尔你会看到有人提到并不太流行的 urllib包,大多数开发者提到它只是因为他们在里面找到一两个他们觉得特别实用的函数。

充分的准备是成功的一半——数据预处理

数据科学家工作中 80% 的时间用在数据清洗上,文本挖掘也不例外。

如果你不确定要怎么预处理,以下是一些标准流程中的步骤:

  • 从文本中提取出你想要处理的格式和结构,
  • 去掉如 “that” 和 “and” 这样的停用词,
  • 词干化(提取词根)。这一步需要字典、语言学规则或算法(如 Porter 算法)的帮助。

这些步骤看起来很难,实际上你不用每一步都自己实现。大多数情况下,上文中提到的库和包都能帮你实现这些步骤。比如 R 中的 tm 包可以让你通过其内置函数完成词干化、去除停止词、消除空白以及小写转换。类似的,Python 中的 nltk 库也可以通过其内置函数完成这些预处理过程。

然而,你可能仍然需要进一步使用正则表达式来描述你需要的文本模式,以便进一步预处理。这也可以加速你的数据清理过程。

对于 Python, 你可以使用 re 库,而在 R 中,有许多内置函数,如 grep(), grepl(), regexpr(), gregexpr(), sub(), gsub() 和 strsplit()。

如果你想要更加深入地了解这些函数,或者 R 中的正则表达式,你可以查看这个正则表达式介绍网页。

数据科学家的仙境冒险——数据探索

到目前为止,你已经摩拳擦掌准备开始分析了。但是,在分析之前最好还是先看看数据长什么样子。

利用上文提到的那些包和库,你可以快速地进行一些数据探索工作:

  • 创建一个文档词项矩阵:该矩阵中的元素表示语料库中一篇文档内,一个词项(一个单词或者一个 n 元词组)出现的频繁程度。
  • 当你创建了文档词项矩阵,你可以绘制直方图来可视化语料库中的词汇频率。
  • 你也可以计算语料库中两个或更多词项之间的相关性。
  • 你可以使用词云图来可视化你的语料库。在 R 中你可以使用 wordcloud 包来绘制,Python 中也有一个同名的库。

经过数据探索过程,你会对你接下来分析中,要分析的对象有一定的了解。如果你看到文档词汇矩阵或者直方图中有很多词语是稀疏的,你可以考虑将他们去掉。

提升你的文本挖掘技能

当你使用上述工具完成了预处理和基本的文本分析等步骤,你可以考虑通过你的数据集,进一步扩展你的文本挖掘技能。因为到现在,你看到的技巧提示都只是文本挖掘的冰山一角。

首先,你应该考虑探索文本挖掘和自然语言处理(NLP)的区别。更多关于 NLP 的 R 包可以在这个 NLP 的 R 包网页找到。NLP 中,你会学习到命名实体识别、词性标注、篇章分析、情感分析等内容。对于 Python, 你可以使用 nltk 库。这个使用 nltk 库进行情感分析完全指南会对你有所帮助。

除了这些包,还有诸如深度学习、统计主题发现模型(如隐式狄利克雷分配,LDA)等工具等着你去学习。这些算法对应的包有:

  • Python 库:gensim,这个库可以实现 word2vec, GloVe, LDA 等算法。此外,如果你需要研究深度学习,theano 是一个很值得考虑的库。
  • R 包:text2vec 包可以用于实现文本向量化和词嵌入。如果你对情感分析感兴趣,使用 syuzhet 和 tm 包可以完成这个任务。最后,topicmodes 包可以用于实现统计主题发现模型。

当然,并不仅仅只有这些包。

不止是词语——结果可视化

可视化是一种非常吸引人的表达方式,所以将结果可视化可能是你能做的最美妙的事情!注意,你要可视化的是你要讲的故事,而不是将你分析中发现的关联性或者话题可视化。

Python 和 R 中都有许多可视化包:

对于 Python, 你可以考虑使用 NetworkX 库来可视化复杂网络,matplotlib 包可以用来解决其他可视化问题。此外,plotly 包让你可以发布可交互在线图表。试着将 Python 和 D3 联系起来会得到更好的效果。D3 是一个用于动态数据操纵和可视化的 JavaScript 库,可以让你的读者和听众参与到数据可视化的过程中来。

对于 R, 除了 ggplot2 等大家耳熟能详的包,你也可以使用 igraph 包来分析关注、被关注以及转发微博等关系。此外,plotly 和 networkD3 包可以把 R 和 JavaScript 链接起来,LDAvis 包则可以将主题模型进行可交互的可视化。

本文作者:佚名

来源:51CTO

时间: 2024-11-19 03:14:18

R 和 Python 中的文本挖掘:8 个入门小贴士的相关文章

R和Python中的文本挖掘:8个入门小贴士

你希望学习文本挖掘,却发现大多数教程难度跨度很大?或者说你找不到心仪的数据集? 本文将会通过 8 个小贴士帮助你走进文本挖掘之门. 对文本保持好奇 在数据科学世界中,凡事的第一步都是"感到好奇",文本挖掘也不例外. 就像 StackOverflow 的数据科学家 David Robinson 在他的博客中说的那样,"当我看到一个假设 [-] 我就迫不及待地想要用数据验证它".你也应该像他那样对文本保持好奇心. David Robinson 看到的假设是: 即使你并不

Python中编写ORM框架的入门指引

  这篇文章主要介绍了Python中编写ORM框架的入门指引,示例代码基于Python2.x版本,需要的朋友可以参考下 有了db模块,操作数据库直接写SQL就很方便.但是,我们还缺少ORM.如果有了ORM,就可以用类似这样的语句获取User对象: ? 1 user = User.get('123') 而不是写SQL然后再转换成User对象: ? 1 2 u = db.select_one('select * from users where id=?', '123') user = User(*

python中文件读写的快速入门实例

说明:     相比其他语言python真的简洁很多,自己往前在学习C语言的过程中,起码要到很后面很后面才提起文件操作,但python的快速入门却以一种非常简洁的方法让你对文件操作有个体验,当然这是在linux环境下,不过不得不说,linux环境下进行编程的学习,确实是要比windows下面可以学到更多知识,下面的两个例子都是来自<Python核心编程>这本书中,真的非常经典! 一.创建并写入文件的实例 直接给代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

Python中的元类编程入门指引_python

回顾面向对象编程 让我们先用 30 秒钟来回顾一下 OOP 到底是什么.在面向对象编程语言中,可以定义 类,它们的用途是将相关的数据和行为捆绑在一起.这些类可以继承其 父类的部分或全部性质,但也可以定义自己的属性(数据)或方法(行为).在定义类的过程结束时,类通常充当用来创建 实例(有时也简单地称为 对象)的模板.同一个类的不同实例通常有不同的数据,但"外表"都是一样 - 例如, Employee 对象 bob 和 jane 都有 .salary 和 .room_number ,但两者

对于Python中RawString的理解介绍_python

总结 1.'''作用: 可以表示 "多行注释" ."多行字符串" ."其内的单双引号不转义" 2.r 代表的意思是: raw 3.r 只对其内的反斜杠起作用(注意单个 \ 的问题) raw string 有什么用处呢? raw string 就是会自动将反斜杠转义. >>> print('\n') >>> print(r'\n') \n >>> (注:出现了两个空行是因为 print() 会自

想用R和Python做文本挖掘又不知如何下手?方法来了!

1.对文章产生好奇 在数据科学中,几乎做所有事情的第一步都是产生好奇,文本挖掘也不例外. 文本挖掘应用领域无比广泛,可以与电影台本.歌词.聊天记录等产生奇妙的化学反应:如南方公园的对话,电影对白的文本挖掘和分析等也都是受到了文本挖掘的启发:近期大数据文摘相关文章<从恋爱到婚后的短信词频图发生了这些变化,你中了几枪?>带各位分析了聊天记录中隐藏的文本信息:而对各类歌词的文本信息分析,也颇有意思.(点击查看<这四十年来的香港歌坛在唱些什么>.<分析了42万字的歌词,为了搞清楚民谣

python中字符串前面加r的作用

  本文实例讲述了python中字符串前面加r的作用.分享给大家供大家参考.具体分析如下: 字符串前面加r,表示的意思是禁止字符串转义 ? 1 2 3 4 5 6 7 8 >>> print "asfdasn" asfdas >>> print "asfdasn" asfdasn >>> print "asfdasn" asfdas >>> print r"asfd

python中使用rpy2调用R出现DLL加载错误,不是有效win32位程序

问题描述 python中使用rpy2调用R出现DLL加载错误,不是有效win32位程序 win7 64位系统 R和python都是32位 解决方案 这个dll的依赖是否有问题 用depends查看一下 解决方案二:

探究Python中的正则表达式

  这篇文章主要介绍了Python中的正则表达式的一些用法,正则表达式的使用是Python学习进阶中的重要知识,需要的朋友可以参考下 字符串是编程时涉及到的最多的一种数据结构,对字符串进行操作的需求几乎无处不在.比如判断一个字符串是否是合法的Email地址,虽然可以编程提取@前后的子串,再分别判断是否是单词和域名,但这样做不但麻烦,而且代码难以复用. 正则表达式是一种用来匹配字符串的强有力的武器.它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它"匹配&q