@Eldrich

Как ускорить процесс замены слов Python?

Доброго дня.

Необходимо произвести замену слов в небольшом массиве текста (чуть более 1 млн. слов), согласно словарю.
Сейчас я осуществляю это топорно:

text = re.sub(r'\bз\b', '', text)
text = re.sub(r'\bзап\b', '', text)


Задача в том, что таких замен необходимо сделать около 20 000 на всем массиве текста и данное решение явно неоптимально, так как времени на обработку уходит непростительно много.

Есть ли способы ускорить данный процесс?
Спасибо
  • Вопрос задан
  • 314 просмотров
Пригласить эксперта
Ответы на вопрос 3
@immaculate
Программист-путешественник
Можно начать с простого:
bad_words_re = re.compile(r'\b(з(ап)?)\b')
bad_words_re.sub('', text)


Во-первых, выражение компилируется один раз, во-вторых, оба слова заменяются за один проход.
Ответ написан
@vikholodov
Я бы добавил многопоточность, каждому потоку дать на съедение свою часть "массива". Ну и не совсем понятно в каком виде хранится у вас все это добро, если под массивом имеется ввиду список, то может быть можно использовать генератор с проверкой на вхождение в список искомых слов?
Ответ написан
Комментировать
nightvich
@nightvich
ITman
Попробуйте отказаться от регулярок в пользу replace.
replace работает сильно быстрее.

str.replace() should be used whenever it's possible to. It's more explicit, simpler, and faster.

In [1]: import re

In [2]: text = """For python 2.5, 2.6, should I be using string.replace or re.sub for basic text replacements.
In PHP, this was explicitly stated but I can't find a similar note for python.
"""

In [3]: timeit text.replace('e', 'X')
1000000 loops, best of 3: 735 ns per loop

In [4]: timeit re.sub('e', 'X', text)
100000 loops, best of 3: 5.52 us per loop


https://stackoverflow.com/questions/5668947/use-py...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы