fts индексация на уровне документа, получение результатов на уровне страницы (на примере dtSearch)

Это не обязательно вопрос, специфичный для dtSearch (например, это больше похоже на вопрос о fts-engine), но он касается способа индексации документов, состоящих из нескольких страниц, и получения результатов попаданий на уровне страниц.

Я гуглил, искал и ничего не нашел, отсюда и мой вопрос:

У нас есть несколько отсканированных страниц из m книг. Мы OCR-них, полнотекстовые индексировать их и выполнить поиск.

Мы хотим, чтобы результаты поиска были на уровне книги (например, результат поиска должен содержать одну книгу), а также чтобы можно было получать найденные элементы на уровне страницы (чтобы иметь возможность эффективно выполнять выделение совпадений, например, термин SomeTerm был найден на странице 1, странице 2 и странице 7).

И тут возникает проблема:

  • если мы индексируем текст страниц по одной за раз, и Page 1 из BookA содержит термин Term1, а Page2, также из BookA, содержит термин Term2, поисковый Term1 и Term2 не даст никаких результатов, что является нормальным
  • если мы проиндексируем текст всех страниц в одном большом текстовом блоке, все принадлежащие одной и той же книге, мы не сможем получить страницу, к которой принадлежит найденный термин.

В dtSearch Desktop есть такая функция для индексации PDF: он может индексировать текст всех страниц из одного документа, но также может сообщать страницу, на которой произошло попадание, используя символ %%Page%%.

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

Если бы вы использовали любой другой движок fts (например, Lucene/Sphinx), как бы вы подошли к вышеупомянутой проблеме (с риском повторения):

  1. Вам нужно проиндексировать содержимое страниц
  2. Страницы логически сгруппированы в документы
  3. Вам необходимо получить результаты по документу
  4. Результаты выделения должны содержать номер страницы

Спасибо за любые предложения, Джордж

PS: простите за длинное сообщение

2 ответа

Как пользователь dtsearch в течение долгого времени, я думаю, что вернусь к основам, генерируя и индексируя постраничный pdf-файл, каждая страница которого соответствует текстовой странице ocr вашей книги.

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

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

Надеюсь, что это поможет, и извините за мой сломанный английский

Подход грубой силы будет иметь два типа проиндексированных документов:

  • Документы уровня страницы с текстом страницы, номером страницы, названием книги и флажком, указывающим, что это документ уровня страницы.
  • Документы уровня книги с текстом книги, названием книги и флажком, указывающим, что это документ уровня книги.

Сначала вы будете искать только документы на уровне книг, чтобы найти подходящие книги. Затем вы должны искать только в документах на уровне страницы соответствующие книги, чтобы найти соответствующие документы на уровне страницы. Это позволило бы вам сказать, что "термин X и термин Y появляются в книге Z, а термин X на страницах 2, 47 и 293 и термин Y появляются на страницах 1, 3, 5 и 293."

Одним из недостатков этого подхода является то, что вы в конечном итоге индексируете содержимое каждой страницы дважды.

Другие вопросы по тегам