Библиотека для поиска текстов

Вопрос или проблема

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

  • Быстрый поиск тысяч до сотен тысяч ключевых слов с возвратом их начальной и конечной позиции
  • Ограниченный поиск по регулярным выражениям (потенциально тысячи параллельно) (Трудно описать ограничение здесь, я в основном использую повторы, подстановочные знаки, необязательные символы)
  • Поддержка поиска слов

Результаты поиска затем обрабатываются снова:

  • Произвольные логические операции (AND, OR, NOT, комбинации)
  • Проверка расстояний (например, два ключевых слова AND’ed, но должны встречаться в основном на N символов друг от друга)

Опционально, но было бы действительно здорово:

  • Фонетический поиск
  • Устойчивость к опечаткам

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

C++ или Java мне подойдут. Open-source обязательно.

Библиотеки Python re и regex очень мощные для таких задач и могут быть объединены с multiprocessing для параллелизации работы.

Могу я также предложить взглянуть на Natural Language Toolkit Python nltk.

Не C++/Java, но определенно Open Source.

Ответ или решение

Для реализации проекта, связанного с поиском текстовых файлов, в основном неструктурированных, необходимо выбрать библиотеку, соответствующую следующим критериям:

Основные требования

  1. Быстрый поиск по ключевым словам:
    Вам потребуется библиотека, способная осуществлять эффективный поиск по большому количеству ключевых слов (от тысячи до сотни тысяч) и возвращать их начальные и конечные позиции в тексте.

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

  3. Поиск слов:
    Необходимо поддерживать возможность поиска слов в тексте, что может включать границы слов и различные формы слов.

Дополнительные требования к обработке результатов

  1. Логические операции:
    Вам потребуется возможность выполнять сложные логические операции (AND, OR, NOT) с найденными результатами. Это позволит более гибко интерпретировать и обрабатывать искомые данные.

  2. Проверка расстояний:
    Возможность задать условия, когда два ключевых слова должны появляться в пределах определённого количества символов друг от друга.

Опциональные функции

  1. Фонетический поиск:
    Возможно, вам будет полезен поиск, который учитывает фонетику, что особенно актуально при работе с текстами, где могут быть разнообразные варианты написания слов.

  2. Устойчивость к опечаткам:
    Поддержка функций, позволяющих эффективно находить слова с опечатками.

  3. Связывание действий с результатами поиска:
    Наличие возможности ассоциировать определённые действия с найденными результатами увеличивает гибкость и функциональность системы.

Рекомендованные библиотеки

Для разработки вашей системы на C++ или Java подойдут следующие решения:

  1. Apache Lucene (Java):
    Lucene – это мощная библиотека для полнотекстового поиска с открытым исходным кодом. Она поддерживает многие из вышеперечисленных функций, включая быстрый поиск по индексу, логические операции и регулярные выражения. Она также позволяет связывать действия с результатами поиска.

  2. Xapian (C++):
    Xapian – это библиотека для создания систем полнотекстового поиска. Она предлагает гибкость в использовании логических операторов, продвинутые функции поиска и возможность анализа текстов на разных языках.

  3. Sphinx (C++):
    Sphinx может быть отличным выбором для быстрого поиска по большим объемам текста. Она поддерживает как полное слово, так и регулярные выражения, что делает ее универсальным инструментом.

Заключение

Выбор подходящей библиотеки для поиска текста зависит от ваших конкретных требований и условий работы. Apache Lucene и Xapian предлагают мощные возможности для выполнения поставленных задач, поддерживая высокую скорость обработки и продвинутые функции поиска. Учитывая все критерии, вы сможете создать эффективную систему для поиска и анализа текстовых файлов.

Оцените материал
Добавить комментарий

Капча загружается...