我想给我发短信,出于多种原因,我构建了一个数据框,其中我在一列中有单词,在第二个示例中有频率:
words freq
Have 123
have 5
having 4589
请注意,我们可以快速查看频率是否非常大,以这种方式进行转换可能更有效,而不是使用某些单词重复多次的语料库。
我想用tm
来转换使用tolower
、stemDocument
等的单词
我知道我可以将数据框中的words
列拉到语料库中,但随后我将丢失频率信息。
我想得到:
words freq
have 123
have 5
have 4589
然后我想我可以使用setDT,dplyr包或聚合来获得:
words freq
have 4717
我计划在大型数据帧上执行此操作。谢谢
我确实尝试模仿 tm:读取数据框,保留文本 ID,构建 DTM 并连接到其他数据集
这里不需要文本分析包,您可以使用 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
我的数据表版本:
packageVersion("data.table")
## [1] ‘1.9.6’