r - 从字符串中删除相邻的重复项
问题描述
我正在分析歌词。这些通常包含“啦啦啦”和“哦哦哦”。基本上没有意义的话。我想删除这些重复的单词,或者至少先识别它们。下面是一些几乎可以完成这项工作的代码。
test <- data.frame(c("la la la yeah the meaning of life vive la France yeah yeah yeah"))
names(test) <- "V1"
test$V1 <- as.character(test$V1)
d <- unlist(strsplit(test$V1, split=" "))
test$V2 <- paste(d[-which(duplicated(d))], collapse = ' ')
test$V2
因此,删除了重复项,但有点过于严格:“la是的,生命的意义万岁法国”最好我想保留“Vive la France”中的“la”,而“la la la”中的第一个“la” "也可以删除。类似,第一个“是”不应该被删除”,但最后三个应该被删除。这意味着应该保留嵌入不同单词之间的单个重复项,而应该删除重复的相邻单词。上面的代码确实如此的原因不起作用的是它忽略了字符串中单词的顺序。
解决方案
我们可以gsub
在这里尝试使用一个肯定的前瞻断言来检查相邻的重复单词:
input <- "la la la yeah the meaning of life vive la France yeah yeah yeah"
output <- gsub("(\\S+)( \\1)+", "", input, perl=TRUE)
output <- gsub("^\\s+|\\s+$", "", output)
output
[1] "yeah the meaning of life vive la France"
如果sub
遇到一个单词后跟一个空格和相同的单词,它只是用空字符串替换,从而删除前面的重复项。
推荐阅读
- sql - 撤消 COPY 命令 redshift | 从红移中删除
- c++ - 如何组合具有相同代码的两个模板函数?
- docker - 将 GCP 永久磁盘挂载为 NFS
- mysql - 如何使用 wamp 在本地访问我的 react js 应用程序并允许访问其他计算机?
- r - 循环数据帧以模拟正常的数据分布
- wordpress - WordPress如何重定向私人自定义帖子类型
- java - Java listIterator - 我如何让它只迭代一次?
- kotlin - Swagger 不包含 import kotlinx.serialization.Serializable 到生成的类中
- c++ - UWP 应用程序在使用应用程序包但在本地机器工作时不发送请求
- graphql - 使用 GraphQL 在 react-admin 列表组件中过滤