Dato un vettore di stringhe texts
e un vettore di modelli patterns
, voglio trovare qualsiasi modello corrispondente per ogni testo.Corrispondenza rapida stringa parziale in R
Per piccoli gruppi di dati, questo può essere fatto facilmente in R con grepl
:
patterns = c("some","pattern","a","horse")
texts = c("this is a text with some pattern", "this is another text with a pattern")
# for each x in patterns
lapply(patterns, function(x){
# match all texts against pattern x
res = grepl(x, texts, fixed=TRUE)
print(res)
# do something with the matches
# ...
})
Questa soluzione è corretto, ma non scalare. Anche con dataset moderatamente più grandi (~ 500 testi e pattern), questo codice è imbarazzantemente lento, risolvendo solo circa 100 casi al secondo su una macchina moderna - il che è ridicolo considerando che si tratta di una parzialità parziale della stringa grezza, senza regex (impostata con fixed=TRUE
). Anche la creazione del parallelo lapply
non risolve il problema. C'è un modo per riscrivere questo codice in modo efficiente?
Grazie, Mulone
I tuoi schemi sono sempre parole singole? Ti interessa solo sapere se ciascuno degli elementi di 'patterns' si verifica in uno o più elementi di' texts' (o hai bisogno di sapere quale elemento/i di 'testi' si sono verificati)? – jbaums