2011-01-25 3 views
0

Моя функция анализирует тексты и удаляет короткие слова, такие как «a», «on», «in», «on», «at» и т. Д.Где я должен хранить список стоп-слов?

Список этих слов может быть изменен в будущем , Кроме того, переключение между различными списками (например, для разных языков) также может быть вариантом.

Итак, где я должен хранить такой список?

  • О 50-200 слов
  • Многие читает каждую минуту
  • Почти нет записи (модификации) - например, раз в несколько месяцев

у меня есть эти варианты в моей голове:

  1. список внутри кода (быстрый, но это не звучит как хорошая практика)
  2. Отдельный файл «stop_words.txt» (как быстро читается из файла? должен ли я читать одни и те же данные из одного и того же файла каждые несколько секунд, я вызываю ту же функцию?)
  3. Таблица базы данных. Было бы действительно эффективно, когда список слов должен быть почти статичным?

Я использую Ruby on Rails (если это имеет значение).

ответ

2

Если это всего лишь около 50-200 слов, я бы сохранил его в памяти в структуре данных, которая поддерживает быстрый поиск, например хэш-карту (я не знаю, какая такая структура вызывается в Ruby).

Вы можете использовать опцию 2 или 3 (сохраняйте данные в таблице файлов или базы данных, в зависимости от того, что вам проще), а затем прочитайте данные в памяти в начале вашего приложения. Храните время, в которое данные были прочитаны, и перечитайте его из постоянного хранилища, если запрос поступит, и данные не были обновлены за X минут.

Это в основном кэш. Возможно, Ruby on Rails уже предоставляет такой механизм, но я слишком мало знаю об этом, чтобы ответить на этот вопрос.

2

Поскольку поиск стоп-слов должен быть быстрым, я бы сохранил стоп-слова в хеш-таблице. Таким образом, проверка того, является ли слово стоп-слотом, амортизирует O (1) сложность.

Теперь, поскольку список стоп-слов может измениться, имеет смысл сохранить список в текстовом файле и прочитать этот файл при запуске программы (или каждые несколько минут/после изменения файла, если ваша программа запущена непрерывно).

Смежные вопросы