Лучший подход для полнотекстового поиска в документах со списком целых чисел - PullRequest
1 голос
/ 13 сентября 2011

Я работаю над системой поиска изображений C ++ / Qt, основанной на сходстве, которое работает следующим образом (я постараюсь избежать ненужных или не относящихся к теме деталей):

Я беру коллекцию изображений ипостроить индекс из них, используя функции OpenCV.После этого для каждого изображения я получаю список целочисленных значений, представляющих важные «классы», к которым принадлежит каждое изображение.Чем больше целых двух общих изображений, тем больше они похожи.Поэтому, когда я хочу запросить систему, мне просто нужно вычислить список целых чисел, представляющих изображение запроса, выполнить полнотекстовый поиск (или аналогичный) и получить X наиболее похожих изображений.

Мой вопросв чем заключается наилучший подход к выполнению такого поиска?Я слышал о Lucene, Lemur и других методах индексации, но я не знаю, является ли этот вид полнотекстового поиска лучшим способом, учитывая, что домен сокращается (только слова вместо слов).Я хотел бы знать об альтернативах с точки зрения эффективности, точности или C ++ удобство.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 15 декабря 2011

Вы можете взглянуть на Lucene для поиска изображений (LIRE) здесь: http://www.semanticmetadata.net/2006/05/19/lire-lucene-image-retrieval-04-released/

Если я ошибаюсь, вы пытаетесь реализовать типичный набор слов поиска изображений, я прав?Если это так, вы, вероятно, пытаетесь создать инвертированный индекс файла.Lucene сам по себе не подходит, так как вы, вероятно, уже поняли, что он индексирует текст вместо цифр.Использование его классов для запроса индекса также было бы проблемой, так как он не предназначен для «анализа» (то есть обнаружения ключевых точек, извлечения дескрипторов, а затем векторного квантования) изображения в вектор запроса.

LIRE с другой стороныРука была изменена для индексации векторов объектов.Тем не менее, он не работает из коробки для модели мешок слов.Кроме того, я думаю, что я прочитал на веб-сайте автора, что в настоящее время он использует сопоставление методом грубой силы, а не инвертированный индекс файла для извлечения изображений, но я ожидаю, что его будет проще расширять, чем сам Lucene, для ваших целей.

Надеюсь, это поможет.

0 голосов
/ 15 сентября 2011

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

  1. Вы заранее не знаете количество классов
  2. Есть много классов относительно количества изображений

Если ваша проблема не соответствует этим критериям, нормальная реляционная БД может работать лучше, как предположил Томас. Если он соответствует № 1, но не № 2, вы можете исследовать одну из «нелицензионных» баз данных, ориентированных на столбцы. Я не достаточно знаком с ними, чтобы сказать вам, насколько хорошо они будут работать, но моя интуиция заключается в том, что вам нужно будет самому копировать многие функциональные возможности в инструментарии IR.

Lucene написан на Java, и я не знаю ни одного порта C ++. Solr представляет Lucene как веб-сервис, поэтому достаточно легко получить к нему доступ с любого языка, который вы выберете.

Я не знаю много о Лемуре, но похоже, что у него похожая модель векторного пространства, и она написана на C ++, так что вам будет проще пользоваться.

...