Эффективный метод замены нескольких слов в тексте

Использование JavaScript Мне нужно эффективно удалить ~ 10000 ключевых слов из ~ 100000 словного документа, из которых ~ 1000 будут ключевыми словами. Какой подход вы бы предложили?

Было бы практичным регулярное выражение массовое? Или я должен просто перебирать символы документа, ищущие ключевые слова (скучные)?

Edit:
Хорошая точка - только целые слова, а не части. И некоторые ключевые слова содержат пробелы.
Я пытаюсь сделать все это на стороне клиента, чтобы уменьшить давление на сервер.

Ответ 1

Использование регулярного выражения может быть хорошим вариантом:

var words = ['bon', 'mad'];
'joe bon joe mad'.replace(new RegExp('(' + words.join('|') + ')', 'g'), '');
// 'joe  joe  '

Регулярное выражение 1 не очень сложное с такими вещами, как look-ahead, а механизм regexp написан на C/С++, поэтому вы можете ожидать, что он будет довольно быстрым. Тем не менее - контрольный показатель и посмотреть, соответствует ли производительность вашим потребностям.

Я не думаю, что реализация собственного анализатора будет быстрее, но я могу ошибаться - эталон.

Отправка документа на сервер мне не подходит. С 100 тыс. Слов вы просматриваете полезную нагрузку в мегабайтах, и вам все равно нужно что-то сделать с ней на сервере и отбросить назад.


1 Возможно, вам придется настроить регулярное выражение, чтобы что-то сделать с пробелами.

Ответ 2

Мой инстинкт подсказывает мне, что для такого большого количества ключевых слов - сортировка ключевых слов и создание конечного автомата для каждого символа будет намного быстрее, чем регулярное выражение, поскольку конечный автомат тривиален, он может генерироваться автоматически.