首页 > 解决方案 > 从字符串中删除相邻的重复项

问题描述

我正在分析歌词。这些通常包含“啦啦啦”和“哦哦哦”。基本上没有意义的话。我想删除这些重复的单词,或者至少先识别它们。下面是一些几乎可以完成这项工作的代码。

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” "也可以删除。类似,第一个“是”不应该被删除”,但最后三个应该被删除。这意味着应该保留嵌入不同单词之间的单个重复项,而应该删除重复的相邻单词。上面的代码确实如此的原因不起作用的是它忽略了字符串中单词的顺序。

标签: rstringduplicates

解决方案


我们可以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遇到一个单词后跟一个空格和相同的单词,它只是用空字符串替换,从而删除前面的重复项。


推荐阅读