使用 R 计算文本文件中一对单词一起出现的次数

Counting how many times a pair of words appears together in a text file using R

我有一个函数,它接收一个文本文档和我想在该文本中找到的两个词,我试图计算出这两个词在文本中彼此相邻出现的概率. 所以我做的第一件事就是让它们成对。我的文档名为 "words",该函数有 3 个参数:文档、word1 和 word2。我想知道它们在文本中并排出现了多少次。

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​

我如何让 R 理解我希望这些 word1:word2 和 word2:word1 对中的每一个都是两个特定的词,并且当我有正确的组合时,将 +1 添加到计数器?

如果您的文档被分解为单词对列表,则您不需要为此使用 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)])

这就是我要做的。鉴于您有一个名为 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())

这会为您提供向量中每个词对的计数。然后,您可以使用 dplyrfilter()arrange() 函数对数据进行排序或查找感兴趣的特定词对。例如,如果您想查找 word1word2

的计数
word.pairs %>% filter(word.pairs == paste(word1, word2, sep=":"))