r - 每年删除语料库中的单词
问题描述
我正在使用一个演讲时间跨度为数年的语料库(汇总到人年级别)。我想删除一年中出现次数少于 4 次的单词(不是为整个语料库删除它,而是只删除它不符合阈值的那一年)。
我尝试了以下方法:
DT$text <- ifelse(grepl("1998", DT$session), mgsub(DT$text, words_remove_1998, ""), DT$text)
and
DT$text <- ifelse(grepl("1998", DT$session), str_remove_all(DT$text, words_remove_1998), DT$text)
and
DT$text <- ifelse(grepl("1998", DT$session), removeWords(DT$text, words_remove_1998), DT$text)
and
DT$text <- ifelse(grepl("1998", DT$session), drop_element(DT$text, words_remove_1998), DT$text)
然而,似乎没有一个工作。Mgsub 只是用 "" 代替 1998 的整个语音,而其他选项则给出错误消息。removeWords 不起作用的原因是我的 words_remove_1998 向量太大。我试图拆分单词向量并遍历单词(参见下面的代码),但 R 似乎不喜欢这样(永远运行)。
group <- 100
n <- length(words_remove_1998)
r <- rep(1:ceiling(n/group),each=group)[1:n]
d <- split(words_remove_1998,r)
for (i in 1:length(d)) {
DT$text <- ifelse(grepl("1998", DT$session), removeWords(DT$text, c(paste(d[[i]]))), DT$text)
}
关于如何解决这个问题的任何建议?
谢谢您的帮助!
可重现的例子:
text <- rbind(c("i like ice cream"), c("banana ice cream is my favourite"), c("ice cream is not my thing"))
name <- rbind(c("Arnold Ford"), c("Arnold Ford"), c("Leslie King"))
session <- rbind("1998", "1999", "1998")
DT <- cbind(name, session, text)
words_remove_1998 <- c("like", "ice", "cream")
newtext <- rbind(c("i"), c("banana ice cream is my favourite"), c("is not my thing"))
DT <- cbind(DT, newtext)
我想要删除的真实词向量包含 30k 个元素。
解决方案
我最终没有使用任何包装,因为它们都无法处理数据的大小。Insted 我是用老式简单的方法做的;将文本分成几行,计算每个会话(年份)和人的每个单词的出现次数,然后删除对应于小于阈值的行(与我用来识别要删除的单词的向量的限制相同)。最后,我将数据聚合回初始水平(人年)。
这只是单词,因为我正在根据阈值删除单词。如果我有一个要删除的单词列表,而我无法以这种方式删除,那我会遇到更多麻烦。
DT_separate <- separate_rows(DT, text)
df <- DT_separate %>%
dplyr::group_by(session, text) %>%
dplyr::mutate(count = dplyr::n())
df <- df[df$count >5, ]
df <- aggregate(
text ~ x, #where x is a person-year id
data=df,
FUN=paste, collapse=' '
)
names(df)[names(df) == 'text'] <- 'text2'
DT <- left_join(DT, df, by="x")
DT$text <- DT$text2
DT <- DT[, !(colnames(DT) %in% c("text2"))]
推荐阅读
- github - 即使添加了访问令牌,也无法从 IntelliJ 推送到 Github
- c# - 进入游戏时调用 OnApplicationFocus 和 OnApplicationPause
- gradle - 类型 'org.sonarqube.gradle.SonarQubeTask' 属性 'pluginVersion' 是私有的,并带有 @Internal 注释
- opencv - 使用 tflite 进行自定义对象检测
- wordpress - Wordpress 以编程方式为用户创建应用程序密码
- angular - Angular Universal Express 服务器显示函数 url 而不是入口 url
- docker - Linux Docker 容器 .Net 5 中的 Windows 身份验证
- sql - 使用字符串文字与使用变量作为搜索文本时,T-SQL Like 语句的行为不同
- python - 形状 (n_clusters, n_features) 指的是什么?以及如何使用它?
- swift - 如何在单独的文本字段或标签中显示我单击的所有按钮的标题