【问题标题】:R tm transforming text within data frame keeping other column dataR tm在数据框中转换文本,保留其他列数据
【发布时间】:2016-05-20 14:52:33
【问题描述】:

我想给我发短信,出于多种原因,我构建了一个数据框,在第二个示例中,我在一列中有单词和频率:

 words freq
 Have   123
 have    5
 having 4589

请注意,我们可以快速查看频率是否非常大,这样做对于转换单词可能比让某些单词重复多次的语料库更有效。

我想使用tm 来转换使用tolowerstemDocument 等的单词

我知道我可以将 words 列从数据框中拉出到语料库中,但是我会丢失频率信息。

我想得到:

 words freq
 have   123
 have    5
 have  4589

然后我想我可以使用 setDT、dplyr 包或聚合来获取:

words freq
have  4717

我计划在大型数据框上执行此操作。谢谢

我确实尝试过模仿tm: read in data frame, keep text id's, construct DTM and join to other dataset

【问题讨论】:

    标签: r dataframe tm


    【解决方案1】:

    这里不需要文本分析包,您可以使用 SnowballC 包中的 tolower()wordStem() 来完成。使用data.table 也使其非常快。

    require(data.table)
    dt <- data.table(words = c("Have", "have", "having"),
                     freq = c(123, 5, 4589))
    
    # transform to lowercase
    dt[, words := tolower(words)]
    
    # stem the words
    dt[, words := SnowballC::wordStem(words)]
    
    dt
    ##    words freq
    ## 1:  have  123
    ## 2:  have    5
    ## 3:  have 4589
    
    # aggregate on same lowercased stems
    dt[, list(freq = sum(freq)), by = words]
    ##    words freq
    ## 1:  have 4717
    

    我的data.table版本:

    packageVersion("data.table")
    ## [1] ‘1.9.6’
    

    【讨论】:

    • 尚未聚合。它有点工作,但是经验变成了经验,商业变成了商业,金融变成了金融,金融变成了金融。基本上很多词都被删减了。
    • 然后 agg: df2[, list(df2$AC=sum(df2$AC)), by=df2$Row.Labels] 错误:“df2[, list(df2 $AC= 或 df2[, list(AC=sum(AC)), by=Row.Labels] [.data.frame`(df2, , list(AC = sum(AC)), by = Row.Labels 中的错误) : 未使用的参数 (by = Row.Labels)
    • 您的示例对我不起作用:[&lt;-.data.table(x, j = name, value = value) 中的错误:分配给现有列“单词”的 RHS 长度为零,但不是 NULL。如果您打算删除该列,请使用 NULL。否则,RHS 的长度必须 > 0;例如,NA_integer_。如果您尝试将列类型更改为空列表列,则与所有列类型更改一样,提供全长 RHS 向量,例如 vector('list',nrow(DT));即,新列中的“plonk”。
    • 使用 data.table: dt[, list(AC=sum(AC)), by=Row.Labels] Row.Labels AC 1: will NA 2: experi NA 3: role 1710 4:账户 NA 5:业务 NA
    • 这就是 SnowballC 中的 Porter 词干分析器实现的工作原理。
    猜你喜欢
    • 2013-11-19
    • 1970-01-01
    • 2019-01-24
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    • 2018-09-13
    相关资源
    最近更新 更多