Schneller Teilstringabgleich in R
Gegeben ein Vektor von Zeichenfolgentexts
und ein Vektor von Musternpatterns
Ich möchte für jeden Text ein passendes Muster finden.
Für kleine Datensätze kann dies in R mit einfach gemacht werdengrepl
:
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
# ...
})
Diese Lösung ist korrekt, aber nicht skalierbar. Selbst bei mäßig größeren Datensätzen (~ 500 Texte und Muster) ist dieser Code peinlich langsam und löst auf einer modernen Maschine nur etwa 100 Fälle pro Sekunde - was lächerlich ist, wenn man bedenkt, dass es sich um einen groben String handelt, der teilweise ohne Regex (gesetzt mit) übereinstimmtfixed=TRUE
). Sogar das machenlapply
Parallel löst das Problem nicht. Gibt es eine Möglichkeit, diesen Code effizient neu zu schreiben?
Danke, Mulone