n-gram 的数据框聚合、它们的频率以及使用 R

问题描述

我正在尝试基于 1-gram(可以通过更改下面代码中的 n 将其扩展为 n-gram)频率聚合数据帧并将其他列与其关联。我这样做的方式如下所示。是否有任何其他快捷方式/替代方法可以为下面给出的数据框生成此问题最后显示的表格?

代码和结果如下所示。

以下块设置环境,加载库并读取数据帧:

# Clear variables in the working environment 
rm(list = ls(all.names = TRUE))
gc()

# load libraries
library("quanteda")
library("data.table")
library("tidyverse")

# Dataframe
Data <- data.frame(Column1 = c(1.222,3.445,5.621,8.501,9.302),Column2 = c(654231,12347,-2365,90000,12897),Column3 = c('A1','B2','E3','C1','F5'),Column4 = c('I bought it','The flower has a beautiful fragrance','It was bought by me','I have bought it','The flower smells good'),Column5 = c('Good','Bad','Ok','Moderate','Perfect'))

接下来计算语料库、标记化和 n-gram(在本例中为 1-gram/unigram/onegram):

# Corpus
Content <- corpus(Data,text_field = "Column4")
docnames(Content) <- seq_len(nrow(Data))

# Tokenization and Unigram
Tokens <- tokens(Content,what = "word") %>%  tokens_tolower() %>%  tokens_ngrams(n = 1)

Unigram <- textstat_frequency(dfm(Tokens),groups = docnames(Tokens)) %>% as.data.table()

setnames(Unigram,"group","rownumber")

Unigram 结果是:

enter image description here

下面给出了与 Unigram 相关的结构:

str(Unigram)

enter image description here

接下来,将Data复制到DataFrame,在其中添加rownumber作为变量,并将该变量设置为数字:

DataFrame <- Data

DataFrame <- add_column(DataFrame,rownumber = 1:nrow(Data),.before = "Column1")

DataFrame$rownumber <- as.numeric(DataFrame$rownumber)

然后将 Unigram 转换为数据帧(UnigramDataFrame),在其中设置 rownumber 为数字,然后将 UnigramDataFrame 与 DataFrame 合并:

UnigramDataFrame <- as.data.frame(Unigram)

UnigramDataFrame$rownumber <- as.numeric(UnigramDataFrame$rownumber)

MergeDF <- dplyr::left_join(UnigramDataFrame,DataFrame,by="rownumber")

最后聚合 1-gram/unigram 频率的 MergeDF(它的第一列),并将 Column3 和 Column5 与其关联:

UnigramAgg <- MergeDF %>% group_by(feature) %>% summarise(Freq=n(),Column3=toString(Column3),Column5=toString(Column5))

运行上面产生了想要的结果:

enter image description here

目的是按其频率聚合 1-gram,并将第 3 列和第 5 列与其关联,如上所示。最后两列显示了与此聚合的 Column3 和 Column5 相关联的条目是什么。例如,所有的 ID(识别号)都可以通过这种方式与每 1-gram 关联起来。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...