Легко разбивайте сложные документы на части так же, как это делает человек.
Разбиение документов на части — сложная задача, лежащая в основе любой системы RAG. Высокое качество результатов имеет решающее значение для успешного приложения искусственного интеллекта, однако большинство библиотек с открытым исходным кодом ограничены в своих возможностях обработки сложных документов.
Open Parse призван заполнить этот пробел, предоставляя гибкую и простую в использовании библиотеку, способную визуально распознавать макеты документов и эффективно разбивать их на части.
Разделение текста преобразует файл в необработанный текст и разрезает его на части.
Есть несколько фантастических библиотек, таких как Layout-Parser.
? Визуально управляемый: Open-Parse визуально анализирует документы для обеспечения превосходного ввода LLM, выходя за рамки простого разделения текста.
✍️ Поддержка Markdown: базовая поддержка Markdown для анализа заголовков, жирного шрифта и курсива.
Поддержка таблиц высокой точности. Извлекайте таблицы в чистые форматы Markdown с точностью, превосходящей традиционные инструменты.
Расширяемость: легко реализуйте свои собственные этапы постобработки.
Интуитивно понятный: отличная поддержка редактора. Завершение везде. Меньше времени на отладку.
Простота: Разработан, чтобы быть простым в использовании и обучении. Меньше времени на чтение документации.
import openparse
basic_doc_path = "./sample-docs/mobile-home-manual.pdf"
parser = openparse . DocumentParser ()
parsed_basic_doc = parser . parse ( basic_doc_path )
for node in parsed_basic_doc . nodes :
print ( node )
? Попробуйте образец блокнота здесь
Разбиение документов на части – это, по сути, группировка схожих семантических узлов вместе. Встраивая текст каждого узла, мы можем затем сгруппировать их на основе их сходства.
from openparse import processing , DocumentParser
semantic_pipeline = processing . SemanticIngestionPipeline (
openai_api_key = OPEN_AI_KEY ,
model = "text-embedding-3-large" ,
min_tokens = 64 ,
max_tokens = 1024 ,
)
parser = DocumentParser (
processing_pipeline = semantic_pipeline ,
)
parsed_content = parser . parse ( basic_doc_path )
? Пример блокнота здесь
Использует pydantic под капотом, поэтому вы можете сериализовать результаты с помощью
parsed_content . dict ()
# or to convert to a valid json dict
parsed_content . json ()
Питон 3.8+
Работа с PDF-файлами:
Извлечение таблиц:
pip install openparse
Включение поддержки OCR :
PyMuPDF уже будет содержать всю логику для поддержки функций OCR. Но ему дополнительно необходимы данные языковой поддержки Tesseract, поэтому установка Tesseract-OCR все равно требуется.
Местоположение папки языковой поддержки должно быть передано либо путем сохранения ее в переменной среды «TESSDATA_PREFIX», либо в качестве параметра в применимых функциях.
Поэтому для работы функции OCR обязательно заполните этот контрольный список:
Установите Тессеракт.
Найдите папку языковой поддержки Tesseract. Обычно вы найдете его здесь:
Windows: C:/Program Files/Tesseract-OCR/tessdata
Системы Unix: /usr/share/tesseract-ocr/5/tessdata
macOS (устанавливается через Homebrew):
/opt/homebrew/share/tessdata
/opt/homebrew/Cellar/tesseract/<version>/share/tessdata/
Установите переменную среды TESSDATA_PREFIX.
Windows: setx TESSDATA_PREFIX "C:/Program Files/Tesseract-OCR/tessdata"
Системы Unix: declare -x TESSDATA_PREFIX=/usr/share/tesseract-ocr/5/tessdata
macOS (устанавливается через Homebrew): export TESSDATA_PREFIX=$(brew --prefix tesseract)/share/tessdata
Примечание. В системах Windows это должно произойти вне Python — перед запуском сценария. Просто манипулировать os.environ не получится!
Этот репозиторий предоставляет дополнительную функцию для анализа содержимого таблиц с использованием различных моделей глубокого обучения.
pip install "openparse[ml]"
Затем загрузите веса модели с помощью
openparse-download
Вы можете запустить анализ следующим образом.
parser = openparse . DocumentParser (
table_args = {
"parsing_algorithm" : "unitable" ,
"min_table_confidence" : 0.8 ,
},
)
parsed_nodes = parser . parse ( pdf_path )
Обратите внимание, что в настоящее время мы используем табличные преобразователи для обнаружения всех таблиц и считаем, что их производительность не на должном уровне. Это негативно влияет на последующие результаты объединения. Если вам известна более совершенная модель, откройте проблему — команда unitable отметила, что, возможно, вскоре добавит и ее.
https://github.com/Filimoa/open-parse/tree/main/src/cookbooks
https://filimoa.github.io/open-parse/
Требуется ли для вашего варианта использования что-то особенное? Протяни руку помощи.