如何在R语言中查找具有连续字母的字符串中的单词

Posted

技术标签:

【中文标题】如何在R语言中查找具有连续字母的字符串中的单词【英文标题】:How to find words in a string that have consecutive letters in R language 【发布时间】:2022-01-09 17:56:39 【问题描述】:

有一个问题我不知道如何解决。

您需要编写一个函数,从包含重复字母的字符串中返回所有单词以及它们在一个单词中的最大重复次数。

从视觉上看,这个阶段可以通过以下示例进行查看: 处理后的"hello good home aboba"应该是hello good,给定字符串中一个字符的最大重复次数=2

我写的代码试图找到重复的字符,并基于此,从一个单独的数组中提取单词,但有些东西不起作用。帮助解决问题。

library(tidyverse)
library(stringr)   

text = 'tessst gfvdsvs bbbddsa daxz'
text = strsplit(text, ' ')
text

new = c()
new_2 = c()

for (i in text)
  
  new = str_extract_all(i, '([[:alpha:]])\\1+')
  if (new != character(0))
    new_2 = c(new_2, i)
  

new
new_2

输出:

Error in if (new != character(0))  : argument is of length zero
> new
[[1]]
[1] "sss"

[[2]]
character(0)

[[3]]
[1] "bbb" "dd" 

[[4]]
character(0)

> new_2
NULL

【问题讨论】:

【参考方案1】:

你可以使用

new <- unlist(str_extract_all(text, "\\pL*(\\pL)\\1+\\pL*"))
i <- max(nchar( unlist(str_extract_all(new, "(.)\\1+")) ))

使用str_extract_all(text, "\\pL*(\\pL)\\1+\\pL*"),您将提取包含至少两个连续相同字母的所有单词,使用max(nchar( unlist(str_extract_all(new, "(.)\\1+")) )),您将获得最长的重复字母块。

见R demo online:

library(stringr)
text <- 'tessst gfvdsvs bbbddsa daxz'
new <- unlist(str_extract_all(text, "\\pL*(\\pL)\\1+\\pL*"))
# => [1] "tessst"  "bbbddsa"
i <- max(nchar( unlist(str_extract_all(new, "(.)\\1+")) ))
# => [1] 3

见this regex demo。 正则表达式详细信息

\pL* - 零个或多个字母 (\pL) - 第 1 组捕获的一封信 \1+ - 一个或多个重复捕获的字母 \pL* - 零个或多个字母

【讨论】:

【参考方案2】:
text = "hello good home aboba"

paste0(
  grep("(.)\\11,", 
       unlist(strsplit(text, " ")), 
       value = TRUE),
  collapse = " ")

[1] "hello good"

【讨论】:

请为正则表达式添加解释。

以上是关于如何在R语言中查找具有连续字母的字符串中的单词的主要内容,如果未能解决你的问题,请参考以下文章

WordNet(JWI MIT):如何查找具有特定字母/短语的单词?

查找重复的单词

如何从文本中删除所有字母数字单词?

如何使用数组中的 preg_grep 查找仅/更多指定字母的单词?

如何查找R中的数字是不是连续?

用C语言编程,如何查找一段文字(有英有汉)中的某些英文单词,并统计其数量