Всем привет, я студенческий посол Джамбо. Цель этой серии — сделать робота, который отвечает на вопросы на основе данных, поэтому извлечение текстовой информации из источников данных — вещь необходимая. Однако наши форматы источников данных разнообразны, например 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