我以前喜欢Python,因为Python有丰富的内置类型,如set、dicts、list、tuple。这些结构有助于编写处理数据的短脚本。
另一方面,R类似于Matlab,它的数据类型包括标量、向量、数据帧、数组和列表。但是它缺乏集合、分词、元组等等。我知道列表类型是强大的,很多操作可以被认为是列表处理。但是使用R作为通用语言的概念仍然是模糊的。
(以下是,一个示例。并不意味着我专注于文本处理/挖掘。)
例如,我需要对一组新闻文章(比如文件夹中的200,000篇文章及其子文件夹)进行TF-以色列国防军计数。
读完文件后,我需要做字到ID映射和其他计数任务。这些任务涉及字符串操作,需要像set或map这样的容器。
我知道我可以使用另一种语言来完成这些处理,并将数据加载到R中,但是(对于一些小事)将所有预处理放在一个R脚本中更好。
所以我的问题是R在这种丰富的数据结构中有足够的能力吗?或者如果没有,任何包都为R语言提供了良好的扩展?
发布于 2010-12-02 10:00:44
我认为R的数据预处理能力--即从源数据提取到分析步骤之前--在过去三年中有了很大的进步(我使用R的时间长度)。我每天都使用python,在过去的七年里,它的文本处理能力非常棒,但是我还是会毫不犹豫地使用R来完成您提到的任务。
不过,有几个条件。首先,我建议非常仔细地查看q中任务集的几个外部包--特别是散列(python类键值数据结构)和 string r(主要由基本库中不太友好的字符串操作函数的包装器组成)。
字符串和散列都可以在克拉恩上使用。
> library(hash)
> dx = hash(k1=453, k2=67, k3=913)
> dx$k1
[1] 453
> dx = hash(keys=letters[1:5], values=1:5)
> dx
<hash> containing 5 key-value pair(s).
a : 1
b : 2
c : 3
d : 4
e : 5
> dx[a]
<hash> containing 1 key-value pair(s).
a : 1
> library(stringr)
> astring = 'onetwothree456seveneight'
> ptn = '[0-9]{3,}'
> a = str_extract_all(astring, ptn)
> a
[[1]]
[2] "456"似乎还有很大一部分R用户的文本处理和文本分析构成了他们日常工作的很大一部分--这一点可以从CRAN的自然语言处理任务视图 (大约20个这样的面向领域的非正式包集合之一)中得到证明。在该任务视图中是包汤姆逊,它是一个专门用于文本挖掘功能的包。tm中包括用于处理任务的优化函数,如Q中提到的函数。
此外,R有很好的包可供交互地处理相当大的数据集(例如,>1GB)--通常不需要设置并行处理基础结构(但如果集群可用,肯定可以利用它)。在我看来,其中最令人印象深刻的是耶鲁大学的Michael和John在"伟大的纪念计划“(CRAN)标题下的一套包;这个项目包含了bigmemory、biganalytics、同步性、大表和大胸。总之,这些包背后的技术包括:(i)将数据分配给共享内存,这使得能够通过单独的并发进程协调对单个数据副本的共享访问;(ii)文件支持的数据结构(我认为,但我不确定,它是内存映射的文件结构的同义词,并且可以使用指针快速访问磁盘,从而避免对可用文件大小的RAM限制)。
尽管如此,R标准库中的许多功能和数据结构使得与接近普通RAM限制的数据交互工作变得更加容易。例如,.RData是一种本机二进制格式,它使用起来尽可能简单(命令是保存和加载的),它具有很好的压缩功能:
> library(ElemStatLearn)
> data(spam)
> format(object.size(spam), big.mark=',')
[1] "2,344,384" # a 2.34 MB data file
> save(spam, file='test.RData')这个文件'test.RData‘只是176 KB的,大于10倍的压缩.
发布于 2010-12-02 09:51:26
这并不是说R缺少集合、数据集、列表和元组;它们只是作为其他一些结构实现的。当然,性能可能是一个问题,但通常不会比Python差,而且您通常可以找到一个包,该包将解决方案编码为高效的C代码。
我不太了解文本挖掘,但是汤姆逊包可能包含您想要的内容。
发布于 2010-12-02 09:54:01
你应该看看自然语言处理任务视图。
主题标题:
语音和语音处理:
词汇数据库:
关键词提取和通用字符串操作:
自然语言处理:
字符串内核:
文本挖掘:
https://stackoverflow.com/questions/4333094
复制相似问题