从字符串中删除相邻的重复项

时间:2019-08-16 09:50:41

标签: r string duplicates

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

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

因此,重复项被删除了,但有点过于严格:“是的,生命是法国的生命” 最好是我想保留“ Vive la France”中的“ la”,同时也可以删除“ la la la”中的第一个“ la”。类似,第一个“是”不应该删除”,但最后三个应该被删除。 这意味着应该保留嵌入在不同词之间的单个重复词,同时应该删除所有重复的相邻词。 上面的代码不起作用的原因是它忽略了字符串中单词的顺序。

2 个答案:

答案 0 :(得分:2)

我们可以在此处尝试使用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遇到一个单词,后接一个空格和相同的单词,则它将替换为空字符串,从而删除先前的重复项。

答案 1 :(得分:1)

也许您需要spring: cloud: stream: kafka: bindings: error-consumer-channel: consumer: autoCommitOffset: false bindings: error-consumer-channel: destination: error_topic consumer: maxAttempts: 3 backOffInitialInterval: 5000 backOffMultiplier: 2 来识别顺序并仅选择长度为1的单词。

Date