我有以下格式的数据列:
文本
Hello world
Hello
How are you today
I love stackoverflow
blah blah blahdy
我想通过可能使用tau
包的textcnt()
函数来计算这个数据集中每一行的 3-gram。但是,当我尝试它时,它给了我一个带有整个列的 ngram 的数字向量。如何将此函数分别应用于数据中的每个观察值?
我有以下格式的数据列:
文本
Hello world
Hello
How are you today
I love stackoverflow
blah blah blahdy
我想通过可能使用tau
包的textcnt()
函数来计算这个数据集中每一行的 3-gram。但是,当我尝试它时,它给了我一个带有整个列的 ngram 的数字向量。如何将此函数分别应用于数据中的每个观察值?
这就是你所追求的吗?
library("RWeka")
library("tm")
TrigramTokenizer <- function(x) NGramTokenizer(x,
Weka_control(min = 3, max = 3))
# Using Tyler's method of making the 'Text' object here
tdm <- TermDocumentMatrix(Corpus(VectorSource(Text)),
control = list(tokenize = TrigramTokenizer))
inspect(tdm)
A term-document matrix (4 terms, 5 documents)
Non-/sparse entries: 4/16
Sparsity : 80%
Maximal term length: 20
Weighting : term frequency (tf)
Docs
Terms 1 2 3 4 5
are you today 0 0 1 0 0
blah blah blahdy 0 0 0 0 1
how are you 0 0 1 0 0
i love stackoverflow 0 0 0 1 0
这是使用qdap 包的 ngram 方法
## Text <- readLines(n=5)
## Hello world
## Hello
## How are you today
## I love stackoverflow
## blah blah blahdy
library(qdap)
ngrams(Text, seq_along(Text), 3)
这是一个列表,您可以使用典型的列表索引访问组件。
编辑:
至于您的第一种方法,请像这样尝试:
library(tau)
sapply(Text, textcnt, method = "ngram")
## sapply(eta_dedup$title, textcnt, method = "ngram")
以下是使用quanteda包的方法:
txt <- c("Hello world", "Hello", "How are you today", "I love stackoverflow", "blah blah blahdy")
require(quanteda)
dfm(txt, ngrams = 3, concatenator = " ", verbose = FALSE)
## Document-feature matrix of: 5 documents, 4 features.
## 5 x 4 sparse Matrix of class "dfmSparse"
## features
## docs how are you are you today i love stackoverflow blah blah blahdy
## text1 0 0 0 0
## text2 0 0 0 0
## text3 1 1 0 0
## text4 0 0 1 0
## text5 0 0 0 1
我猜 OP 想使用tau
,但其他人没有使用该软件包。以下是您在 tau 中的操作方式:
data = "Hello world\nHello\nHow are you today\nI love stackoverflow\n
blah blah blahdy"
bigram_tau <- textcnt(data, n = 2L, method = "string", recursive = TRUE)
这将是一个 trie,但您可以将其格式化为带有标记和大小的更经典的 datam-frame 类型:
data.frame(counts = unclass(bigram_tau), size = nchar(names(bigram_tau)))
format(r)
我强烈建议使用tau
,因为它在处理大数据时表现得非常好。我用它来创建 1 GB 的 bigram,它既快速又流畅。