计算单词组合频率

时间:2014-12-20 00:56:02

标签: r

我有句子的矢量,说:

x = c("I like donut", "I like pizza", "I like donut and pizza")

我想算上两个单词的组合。理想输出是一个有3列(word1,word2和频率)的数据帧,可能是这样的:

 I      like    3
 I      donut   2
 I      pizza   2
 like   donut   2
 like   pizza   2
 donut  pizza   1
 donut  and     1
 pizza  and     1

在输出的第一个记录中,freq = 3因为"I""like"一起出现3次:x[1]x[2]x[3]

任何建议都表示赞赏:)

1 个答案:

答案 0 :(得分:6)

split为单词,sort正确识别对,获得所有对combnpaste对以获得以空格分隔的单词对,使用{{1获取频率,然后把它们放在一起。

以下是一个例子:

table

使用您的示例数据:

f <- function(x) {
  pr <- unlist(
    lapply(
      strsplit(x, ' '), 
      function(i) combn(sort(i), 2, paste, collapse=' ')
    )
  )

  tbl <- table(pr)

  d <- do.call(rbind.data.frame, strsplit(names(tbl), ' '))
  names(d) <- c('word1', 'word2')
  d$Freq <- tbl

  d
}