R 文本挖掘 - 如何将 R 数据框列中的文本更改为多个具有词频的列?

标签 r text-mining tm

我有一个包含 4 列的数据框。第 1 列包含 ID,第 2 列包含文本(每列约 100 个单词),第 3 列和第 4 列包含标签。

现在我想从文本列中检索词频(最常见的词),并将这些词频作为额外列添加到数据框中。我希望列名是单词本身,并且列中填充了它们在文本中的频率(范围从 0 到 ... 每个文本)。

我尝试了 tm 包的一些功能,但直到现在都不尽如人意。 有谁知道如何处理这个问题或从哪里开始?有没有可以完成这项工作的软件包?

id  texts   label1    label2

最佳答案

那么让我们一起解决问题吧......

我猜你有一个看起来像这样的 data.frame:

       person sex adult                                 state code
1         sam   m     0         Computer is fun. Not too fun.   K1
2        greg   m     0               No it's not, it's dumb.   K2
3     teacher   m     1                    What should we do?   K3
4         sam   m     0                  You liar, it stinks!   K4
5        greg   m     0               I am telling the truth!   K5
6       sally   f     0                How can we be certain?   K6
7        greg   m     0                      There is no way.   K7
8         sam   m     0                       I distrust you.   K8
9       sally   f     0           What are you talking about?   K9
10 researcher   f     1         Shall we move on?  Good then.  K10
11       greg   m     0 I'm hungry.  Let's eat.  You already?  K11

该数据集来自qdap包。要获取 qdap,请使用 install.packages("qdap")

现在要制作我正在谈论的关于您的数据集的可重现示例,请执行我在此处使用来自 qdap 的 DATA 数据集所做的操作。

DATA
dput(head(DATA))

现在好了,对于你原来的问题,我想 wfm 会做你想做的事:

freqs <- t(wfm(DATA$state, 1:nrow(DATA)))
data.frame(DATA, freqs, check.names = FALSE)

如果您只想要排在首位的那么多单词,请使用我在此处使用的排序技术:

freqs <- t(wfm(DATA$state, 1:nrow(DATA)))
ords <- rev(sort(colSums(freqs)))[1:9]      #top 9 words
top9 <- freqs[, names(ords)]                #grab those columns from freqs  
data.frame(DATA, top9, check.names = FALSE) #put it together

结果是这样的:

> data.frame(DATA, top9, check.names = FALSE)
       person sex adult                                 state code you we what not no it's is i fun
1         sam   m     0         Computer is fun. Not too fun.   K1   0  0    0   1  0    0  1 0   2
2        greg   m     0               No it's not, it's dumb.   K2   0  0    0   1  1    2  0 0   0
3     teacher   m     1                    What should we do?   K3   0  1    1   0  0    0  0 0   0
4         sam   m     0                  You liar, it stinks!   K4   1  0    0   0  0    0  0 0   0
5        greg   m     0               I am telling the truth!   K5   0  0    0   0  0    0  0 1   0
6       sally   f     0                How can we be certain?   K6   0  1    0   0  0    0  0 0   0
7        greg   m     0                      There is no way.   K7   0  0    0   0  1    0  1 0   0
8         sam   m     0                       I distrust you.   K8   1  0    0   0  0    0  0 1   0
9       sally   f     0           What are you talking about?   K9   1  0    1   0  0    0  0 0   0
10 researcher   f     1         Shall we move on?  Good then.  K10   0  1    0   0  0    0  0 0   0
11       greg   m     0 I'm hungry.  Let's eat.  You already?  K11   1  0    0   0  0    0  0 0   0

关于R 文本挖掘 - 如何将 R 数据框列中的文本更改为多个具有词频的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15258954/

相关文章:

apache-spark - 基于 Apache Spark 朴素贝叶斯的文本分类

java - 如何使用文本挖掘进行文档分析?

mysql - C - 如何将 time_t 转换为 tm?

r - 防止在ggplot2中居中多层标题

r - 组合两个单词以产生所有可能的字符组合

python - 存储文本挖掘数据

r - 以编程方式在 R 中查找股票代码

R tm包vcorpus : Error in converting corpus to data frame

r - 按组查找最接近的值

r - 根据R中的特定行值将数据帧拆分为多个数据帧