2

次の形式のデータ列があります。

文章

Hello world  
Hello  
How are you today  
I love stackoverflow  
blah blah blahdy  

tauおそらくパッケージのtextcnt()関数を使用して、このデータセットの各行の 3 グラムを計算したいと思います。しかし、試してみると、列全体の ngram を持つ 1 つの数値ベクトルが得られました。この関数をデータ内の各観測に個別に適用するにはどうすればよいですか?

4

4 に答える 4

6

これはあなたが求めているものですか?

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
于 2013-07-09T19:35:59.740 に答える
4

これは、 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")
于 2013-07-09T19:05:12.497 に答える
3

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 のバイグラムの作成に使用しましたが、高速でスムーズでした。

于 2016-07-10T19:39:24.587 に答える