次の形式のデータ列があります。
文章
Hello world
Hello
How are you today
I love stackoverflow
blah blah blahdy
tauおそらくパッケージのtextcnt()関数を使用して、このデータセットの各行の 3 グラムを計算したいと思います。しかし、試してみると、列全体の ngram を持つ 1 つの数値ベクトルが得られました。この関数をデータ内の各観測に個別に適用するにはどうすればよいですか?
次の形式のデータ列があります。
文章
Hello world
Hello
How are you today
I love stackoverflow
blah blah blahdy
tauおそらくパッケージのtextcnt()関数を使用して、このデータセットの各行の 3 グラムを計算したいと思います。しかし、試してみると、列全体の ngram を持つ 1 つの数値ベクトルが得られました。この関数をデータ内の各観測に個別に適用するにはどうすればよいですか?
これはあなたが求めているものですか?
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")
OPは使用したかったと思います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)
これはトライになりますが、トークンとサイズを使用して、より古典的な datam-frame タイプとしてフォーマットできます。
data.frame(counts = unclass(bigram_tau), size = nchar(names(bigram_tau)))
format(r)
tau大規模なデータで非常に優れたパフォーマンスを発揮するため、使用することを強くお勧めします。1 GB のバイグラムの作成に使用しましたが、高速でスムーズでした。