我在标有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会做
答案 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