0

テキストのドキュメントとそのテキスト内で検索したい 2 つの単語を取り込む関数があり、これらの 2 つの単語がテキスト内で隣り合って現れる確率を計算しようとしています。だから私が最初にしたことは、それらをペアにすることでした。私のドキュメントは「words」と呼ばれ、関数はドキュメント、word1、word2 の 3 つの引数を取ります。テキスト内でそれらが隣り合って何回出現するかを調べたいです。

pairs <- c()
  # Iterates through and creates every possible pair of adjacent words
  for (i in 1:(length(words)-1)) {
    temp <- paste(words[i],words[i+1], sep = ":") # Temporarily group adjacent words together with a : in between
    temp <- sort(strsplit(temp, ":")[[1]]) # Sort to get them lexically organized 
    pairs[i] <- paste(temp[1], temp[2], sep=":") # Store this pair in the list
  }

現在、指定した 2 つの単語が一緒に出現する回数を計算するためのカウンターを作成しようとしています。これまでのところ、私はこれを試しました

pairs2<-0
    for(i in pairs){
    if(i==word1:word2|i==word2:word1){
    pairs2<-pairs2+1
    }

しかし、私はエラーが発生しています

Error in word1:word2 : NA/NaN argument​

これらの単語 1:単語 2 と単語 2:単語 1 の各ペアを 2 つの特定の単語にしたいことを R に理解させ、適切な組み合わせを見つけたらカウンターに +1 を追加するにはどうすればよいでしょうか?

4

2 に答える 2

0

これが私がすることです。と呼ばれる単語のベクトルがあるとしますwords

library(dplyr)

# use lead from dplyr to create all pairs of adjacent words
word.pairs <- paste(words, lead(words), sep=":")

# use dplyr to sum up all pairs of words
word.pairs <- as.data.frame(word.pairs) %>%
  group_by(word.pairs) %>%
  summarise(Count = n())

これにより、ベクトル内の各単語ペアのカウントが得られます。その後、および関数を使用して、データを並べ替えたり、関心dplyrのある特定の単語のペアを見つけたりすることができます。たとえば、との数を見つけたい場合filter()arrange()word1word2

word.pairs %>% filter(word.pairs == paste(word1, word2, sep=":"))
于 2015-03-04T22:00:25.267 に答える
0

ドキュメントが単語ペアのリストに分割されている場合は、これに for ループは必要ありません。

たとえば、次のような文字列があるとします。

test <- "hello my name is my name is tony"

そして、あなたの関数はそれを単語のペアのリストに分割して作成しました:

pairs <- list("hello my", "my name", "name is", "is my", "my name", "name is", "is tony")

「my」と名前が一緒に表示される回数は、次の方法で簡単に取得できます。

appearance <- length(pairs[pairs == "my name"|pairs == "name my"]) # 2

またはあなたの場合:

pairs2 <- length(pairs[pairs == paste(word1, word2) | pairs == paste(word2, word1)])
于 2015-03-04T21:43:04.493 に答える