Использование LangChain для создания робота вопросов и ответов на основе базы данных (2): извлечение текстовой информации из источников данных

Всем привет, я студенческий посол Джамбо. Цель этой серии — сделать робота, который отвечает на вопросы на основе данных, поэтому извлечение текстовой информации из источников данных — вещь необходимая. Однако наши форматы источников данных разнообразны, например PDF, Word, HTML, PPT и т. д., а некоторые источники данных даже поступают из Интернета. Эти форматы не могут извлекать текст напрямую, но, к счастью, в Python есть множество сторонних библиотек, которые мы можем помочь Мы извлекаем текстовую информацию, и LangChain также помогает нам интегрировать ее вместе, нам нужно только вызвать интерфейс LangChain.

Я нашел контракт в формате PDF в общедоступной сети.Давайте возьмем этот контракт в качестве примера, чтобы представить, как извлекать текстовую информацию.

извлечение текста

LangChain содержит множество сторонних библиотек для PDF, таких как PyPDF2, PyPDFium2, PDFMinerи т. д. Здесь мы рассмотрим в качестве PyPDF2примера извлечение текстовой информации.

pip install pypdf

Мы используем PyPDFLoaderдля загрузки файла PDF, а затем вызываем loadметод для получения текстовой информации. Программа чтения PDF преобразует каждую страницу файла PDF в фрагмент текста и возвращает фрагменты в виде списка.

from langchain.document_loaders import PyPDFLoader
loader = PyPDFLoader("./contract.pdf")
documents = loader.load()

сегментация текста

Но все же недостаточно просто разделить по страницам, потому что одна страница содержит еще слишком много слов, если эти тексты в дальнейшем помещать в контекст подсказки, то это будет занимать большое количество токенов, а эти тексты очень важны для текущий вопрос Вопросы не обязательно полезны, поэтому нам нужно сегментировать эти тексты.

LangChain предоставляет несколько разделителей, которые могут разделять код, абзацы и заголовки Markdown. Здесь мы используем RecursiveCharacterTextSplitter, он будет делить текст по символам, пока длина каждого сегмента текста не станет достаточно маленькой. Его разделенный список по умолчанию ["\n\n", "\n", " ", ""]таков, что он может максимально объединять абзацы, предложения или слова.

Что chunk_sizeограничивает максимальную длину каждого текста. chunk_overlapЭто длина перекрытия между двумя сегментами текста. Если сегмент слишком длинный и принудительно разделен на два сегмента, между двумя сегментами будет перекрывающийся текст, что может обеспечить согласованность контекста.

Он также имеет параметр length_function, используемый для расчета длины текста, значение по умолчанию — len. Если вы хотите разделить по количеству токенов, вы можете tiktokenиспользовать его в сочетании с библиотекой.

from langchain.text_splitter import RecursiveCharacterTextSplitter

text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
docs = text_splitter.split_documents(documents)

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

Конечно, это всего лишь краткое введение в функцию извлечения текста LangChain.Есть много других форматов и соответствующих деталей, которые не были представлены, такие как Word, HTML, PPT и т. д. Если вы хотите узнать больше, вам все равно придется идите и убедитесь сами См. официальную документацию .

Предыдущая: Использование LangChain для создания робота вопросов и ответов на основе базы данных (1): Основное использование
Далее: LangChain для создания робота вопросов и ответов на основе базы данных (3): ReAct

Supongo que te gusta

Origin blog.csdn.net/chenjambo/article/details/131771078
Recomendado
Clasificación