r - 计算单词组合频率

标签 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]

感谢任何建议:)

最佳答案

拆分成词,排序正确识别对,得到所有对combn粘贴对获取以空格分隔的词对,使用 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
}

使用您的示例数据:

> f(x)
   word1 word2 Freq
1    and donut    1
2    and     I    1
3    and  like    1
4    and pizza    1
5  donut     I    2
6  donut  like    2
7  donut pizza    1
8      I  like    3
9      I pizza    2
10  like pizza    2

关于r - 计算单词组合频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27575941/

相关文章:

r - Shiny :更新输入而不触发 react ?

R:计算数据框的边距或行和列总和

r - 查找行组的 IQR

r - 使用 R 更正/整理数据

R:plotly:如何自定义 map 上的范围?

r - 将 pROC 包与 h2o 一起使用

r - 如何计算每组中唯一名称的数量

linux - mclapply 的不当用例?

r - 将命名向量转换为数据框

r - 在地理上聚合 worldclim 的单元格,使用 30 秒分辨率来估计 10 分钟分辨率的标准偏差