Biorąc pod uwagę wektor ciągów texts
i wektor wzorów patterns
, chcę znaleźć dowolny pasujący wzór dla każdego tekstu.Szybkie częściowe dopasowanie ciągów w R
Dla małych zbiorów danych, może być łatwo wykonana z grepl
R:
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
# ...
})
To rozwiązanie jest prawidłowe, ale nie skalowania. Nawet z umiarkowanie dużymi zbiorami danych (~ 500 tekstów i wzorców) kod ten jest zawstydzająco wolny, rozwiązując tylko około 100 przypadków na sekundę na nowoczesnej maszynie - co jest śmieszne, biorąc pod uwagę, że jest to proste częściowe dopasowywanie ciągów, bez regex (ustawiane za pomocą fixed=TRUE
). Nawet robienie paragrafu lapply
nie rozwiązuje problemu. Czy istnieje sposób na ponowne napisanie tego kodu wydajnie?
Dzięki Mulone
Czy Twoje wzory są zawsze pojedynczymi słowami? Czy interesuje Cię tylko to, czy każdy z elementów 'wzorców' występuje w jednym lub więcej elementów' tekstów' (czy musisz wiedzieć, który element/y 'tekstów' pojawiły się w)? – jbaums