Извините, что не отвечаю на разницу, но текущий подход может быть легко улучшен в любом случае.Это идет медленно для вас, потому что вам придется сканировать все предложения несколько раз (для каждого слова).Вы даже проверяете каждое слово дважды, сначала, если оно есть, а затем заменить его - вы можете просто заменить только.
Это важный урок при замене текста, будь то регулярное выражение, простая замена строкиили даже когда вы разрабатываете свой собственный алгоритм: попробуйте просмотреть текст только один раз.Независимо от того, сколько слов вы хотите заменить.Регулярное выражение проходит долгий путь, но в зависимости от реализации необходимо возвращаться назад на несколько символов, когда оно не находит попадания.Для интересующихся: ищите структуру данных trie.
Попробуйте, например, реализацию быстрого текстового поиска (aho-corasick).Я разрабатываю для этого библиотеку, но до тех пор вы можете использовать flashtext
(что немного по-другому):
import flashtext
# already considers word boundaries, so no need for " " + word " "
fl = flashtext.KeywordProcessor()
fl.add_keywords_from_dict(dic)
train['comment_text'] = train['comment_text'].apply(fl.replace_keywords)
Если вам нужно заменить много слов, это будетна порядок быстрее.
Для сравнения по первым данным я смог найти:
Words to replace: 8520
Sentences to replace in: 11230
Replacements made using flashtext: 1706
Replacements made using correct_contraction1: 25
flashtext: (considers word boundaries and ignores case)
39 ms ± 355 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
correct_contraction1: (does not consider case nor words at end of line)
11.9 s ± 194 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
<unannounced>
30 ms ± 366 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
Итак, мы говорим об ускорении в 300 раз.Это случается не каждый день; -)
Для справки добавил способ регулярных выражений Джона Клемента:
pandas.str.replace + regex (1733 replacements)
3.02 s ± 82.7 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
Моя новая библиотека уменьшит еще 30%, как я ее проверил.Я видел улучшение в 2-3 раза по сравнению с flashtext, но, что более важно, предоставил вам, как пользователю, больше контроля.Он полностью функционален, просто нужно его почистить и добавить больше документации.
Я обновлю ответ, когда он прибудет!