Для вектора строк texts
и вектора шаблонов patterns
, я хочу найти любой шаблон соответствия для каждого текста.
Для небольших наборов данных это легко сделать в R с помощью 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
# ...
})
Это решение правильно, но оно не масштабируется. Даже с умеренно большими наборами данных (~ 500 текстов и шаблонов) этот код смущающе медленный, решая всего около 100 случаев в секунду на современной машине, что смешно, учитывая, что это грубое частичное совпадение строк без регулярного выражения (установлено с fixed=TRUE
). Даже создание параллели lapply
не решает проблему.
Есть ли способ переписать этот код эффективно?
Спасибо, Mulone