Где я должен хранить список стоп-слов? - PullRequest
0 голосов
/ 25 января 2011

Моя функция анализирует тексты и удаляет короткие слова, такие как "a", "the", "in", "on", "at" и т. Д.

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

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

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

У меня есть следующие варианты:

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

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

Ответы [ 2 ]

2 голосов
/ 25 января 2011

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

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

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

2 голосов
/ 25 января 2011

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

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

...