Tenho uma sequência de texto e um vetor de palavras:
String: "Auch ein blindes Huhn findet einmal ein Korn."
Vector: "auch", "ein"
Quero verificar com que frequência cada palavra no vetor está contida na string e calcular a soma das frequências. Para o exemplo, o resultado correto seria 3 .
Cheguei ao ponto de poder verificar quais palavras ocorrem na string e calcular a soma:
library(stringr)
deu <- c("\\bauch\\b", "\\bein\\b")
str_detect(tolower("Auch ein blindes Huhn findet einmal ein Korn."), deu)
[1] TRUE TRUE
sum(str_detect(tolower("Auch ein blindes Huhn findet einmal ein Korn."), deu))
[1] 2
Infelizmente str_detect
não retorna o número de ocorrências ( 1, 2
), mas apenas se uma palavra ocorre em uma string ( TRUE, TRUE
), então a soma da saída de str_detect
não é igual ao número de palavras.
Existe alguma função em R semelhante à preg_match_all
do PHP?
preg_match_all("/\bauch\b|\bein\b/i", "Auch ein blindes Huhn findet einmal ein Korn.", $matches);
print_r($matches);
Array
(
[0] => Array
(
[0] => Auch
[1] => ein
[2] => ein
)
)
echo preg_match_all("/\bauch\b|\bein\b/i", "Auch ein blindes Huhn findet einmal ein Korn.", $matches);
3
Gostaria de evitar loops.
Eu olhei para muitas perguntas semelhantes, mas elas não contam o número de ocorrências ou não usam um vetor de padrões para pesquisar. Posso ter esquecido uma pergunta que responde à minha, mas antes de marcar isso como duplicado, certifique-se de que o "duplicado" realmente pergunte exatamente a mesma coisa. Obrigado.
Você pode usar
str_count
comoVocê pode criar
sprintf
um padrão adicionando\\b
bordas e usarlengths
emgregexpr
.Ele
|> print()
serve apenas para atribuir e imprimir simultaneamente e pode ser removido.Dados:
Dada a sequência e o padrão abaixo
você pode tentar
strsplit
+%in%
:table
se quiser ver o resumo das contagens)Processamento de sequência de caracteres
Se a base R for muito complexa em sua sintaxe, eu iria com
{stringi}
Dados