Эффективный метод замены нескольких слов в тексте
Использование 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
Мой инстинкт подсказывает мне, что для такого большого количества ключевых слов - сортировка ключевых слов и создание конечного автомата для каждого символа будет намного быстрее, чем регулярное выражение, поскольку конечный автомат тривиален, он может генерироваться автоматически.
Ответ 3
Автономный аппарат, как представляется, часто используется для подобных задач, например. http://www.codeproject.com/KB/string/civstringset.aspx