У меня имеется переменная в которой 800000 уникальный текстовых записей, а так же переменная с 10000 уникальный регулярных выражение. Мне нужно максимально быстро проверить, какие тексты проходят по регуляркам (если текст подошёл хотя бы к одной, то можно переходить к следующему тексту).
На данный момент я увеличил объём кэша и из этого выжал максимум пользы, однако, этого мало. Сама программа работает по следующей логике. Я запускаю цикл, который проходится по каждому тексту отдельно, а в нём уже запускаю цикл, который проходится по каждому регулярному выражению. Таким образом подставляю в re.compile(pattern) re.match(text). Если есть матч, выхожу из цикла, возвращаю текст в успешный файл, а если не подходит ни один паттерн, то цикл завершается и возвращает текст в неудачный файл.
Как это можно оптимизировать? Сначала пытался через Numba, но позже выяснил, что regex она не поддерживает, да и в этом нет необходимости. Проблема именно во вложенности, ведь неподходящие ни к чему тексты перебирают все 10k регулярок, тем самым замедляя поиск.
Абстрактный код:
for i in texts:
error = True
for j in patterns:
reg = re.compile(j)
result = reg.match(i)
if result != None:
success.append(i)
error = False
break
if error == True:
error.append(i)