计算因素内的单词

时间:2010-10-08 18:51:16

标签: r

我在标有Keyword.text的列中有数百万个关键字。每个因子或关键字可以包含多个单词(或者我们应该说令牌)。以下是4个关键字的示例

Keyword.text
快速的棕色狐狸 .8。疯狂的懒狗 狗
跳过+ 9

我想计算每个关键字中的令牌数量,以便获得:

Keyword.length
5
4
1
4

我安装了Tau包,但我还没有走得太远......

 textcnt(Mydf$Keyword.text, split = "[[:space:][:punct:]]+", method = "string", n = 1L)

返回我不明白的错误。也许是因为有因素;用字符串练习时效果很好。

我知道如何在excel中执行此操作,但它不适用于最后一行。如果A2有关键字,那么:= LEN(TRIM(A2)) - LEN(SUBSTITUTE(A2,“”,“”))+ 1会做

3 个答案:

答案 0 :(得分:2)

编辑:对于数据框和关键字总数,只需使用strsplit。如果您对每个关键字的计数不感兴趣,则无需使用strcnt。那就是我弄错了你的地方:

tt <- data.frame(
    a=rnorm(3),
    b=rnorm(3),
    c=c("the quick fox lazy","rbrown+fr even","what what goes & around"),
    stringsAsFactors=F
)
sapply(tt$c, function(n){
  length(strsplit(n, split = "[[:space:][:punct:]]+")[[1]])
})

要阅读数据,请查看?readLines和/或?scan。这样可以保留字符串格式,并允许您逐行处理文件(或每行一行)。如果您使用文件连接,您甚至可以加载文件的部分,这可以帮助您达到内存限制。

使用readLines的简单示例:

con <- textConnection("
The lazy fog+fog fog
never ended for fog jumping over the
fog whatever . $ plus.
")
# You use con <- file("myfile.txt")
Text <- readLines(con)
sapply(Text,textcnt, split = "[[:space:][:punct:]]+", method = "string", n = 1L)

在旁注中,使用Dirk提到的选项(stringsAsFactors=F)与通常的read.table命令相比不会降低性能。实际上相反。您应该使用上面提到的sapply,但将文本替换为as.character(Mydf$Keyword.text)(或使用stringsAsFactors=F选项并删除as.character()

答案 1 :(得分:1)

请显示错误。

还可以尝试:

require(tau)
textcnt(as character(Mydf$Keyword.txt), split, ....) 

...强制进行角色模式。

或者使用stringsAsFactors=FALSE加载您的数据 - 之前已经出现过相同的问题。

答案 2 :(得分:0)

一个很好的小功能怎么样让我们也决定我们想要计算哪种 以及哪些适用于整个载体还有吗?

require(stringr)
nwords <- function(string, pseudo=F){
  ifelse( pseudo, 
          pattern <- "\\S+", 
          pattern <- "[[:alpha:]]+" 
        )
  str_count(string, pattern)
}

nwords("one,   two three 4,,,, 5 6")
# 3

nwords("one,   two three 4,,,, 5 6", pseudo=T)
# 6