Более быстрая альтернатива re.sub () в Python3 - PullRequest
0 голосов
/ 20 сентября 2019

Хотел задать вопрос в качестве другого расширения к этому вопросу

Моя цель:

Учитывая текстовый файл, в котором есть все возможные символы, включительноИз всех знаков препинания, специальных символов и символов мне просто нужно извлечь из него строчные буквенные фразы.

Сейчас я делаю следующее:

with open('lmdata.txt','a') as ink:
    for element in json_str['fragments']:
        ink.write("%s \n" %(re.sub(r"[^a-z ]","",element['lines'][0].lower())))

В приведенном выше разделе кода читается элемент json, затем он принимает только буквенные фразы и затем добавляет текстовый файл.

Теперь проблема заключается в том, что мне нужно запустить это для большого объема данных.Для 1GB текстового файла, который содержит приблизительно 15386594 строк текста, требуется 94.47970027092379 секунд, когда я регистрируюсь с timeit.

Теперь, учитывая, что мне нужно обработать 15GB необработанных текстовых файлов, я предполагаю, что это займет 15x времени, чтобы завершить это.

Итак, вопрос в том, как сделать это быстрее(если возможно)

EDIT 1

Согласно предложению @JanChristophTerasa, попытался скомпилировать regex до вызова в каждой итерации и запустить еговремя выполнения уменьшилось до 81.98409761895891 секунд.

r = re.compile(r"[^a-z ]")

затем при записи:

ink.write("%s \n" %(r.sub("",element['lines'][0].lower())))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...