【问题标题】:counting word combination frequency计数词组合频率
【发布时间】:2014-12-20 00:56:02
【问题描述】:

我有句子向量,比如说:

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]

感谢任何建议:)

【问题讨论】:

  • 您在发布此问题之前是否使用了谷歌或搜索栏?试试thisthisany of these
  • I Ilike like 等呢?大概你只想要那些 不同 词的组合? gtools::permutations 在这里可能对你有用
  • @OliverKeyes :是的,当然。
  • @RichardScriven。是的,我只想要不同单词的组合。谢谢你的建议,我会试试gtools :)

标签: r


【解决方案1】:

split 成单词,sort 正确识别对,得到所有与combn 的对,paste 对得到空格分隔的单词对,使用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

【讨论】:

  • 太棒了。使用combn,我还可以计算三个或更多单词组合的出现次数。谢谢你:)
【解决方案2】:
library(tidyr)
Counts <- DF %>% 
  count(column1, column2, sort = TRUE)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-11
    • 1970-01-01
    • 1970-01-01
    • 2019-11-29
    • 1970-01-01
    • 1970-01-01
    • 2014-05-20
    相关资源
    最近更新 更多