LangChain TextLoader: преобразование обычных файлов .txt в объекты Document
LangChain TextLoader читает файлы .txt в формат Documents с исходной метаданными, без разбиения на части, а функция autodetect_encoding позволяет обрабатывать файлы в формате Shift-JIS и другие файлы, отличные от UTF-8.
Источники: How to Use TextLoader in LangChain to Load .txt File
В пайплайне RAG первым шагом является загрузка исходных данных. Источники поступают в формате .txt, .csv, .pdf, .md и других. В этой заметке рассматривается TextLoader — инструмент LangChain для работы с обычными файлами .txt.
Загрузчик документов читает исходный файл и преобразует его в один или несколько объектов Document. Объект Document представляет собой стандартную единицу содержимого в LangChain. Он имеет два поля:
- page_content — сам текст
- metadata — словарь с информацией о происхождении (часто только путь к файлу)
TextLoader берет путь, читает файл и возвращает объекты Documents. Он не разбивает файл на части, не очищает его, не выполняет обработку с помощью OCR и не преобразует его. Он только загружает файл. Разбиение на части должно выполняться позже с помощью специального инструмента, а очистка — в предобработчике. Разделение этих этапов позволяет легко заменять отдельные компоненты.
Когда подходит TextLoader
- Исходный материал — простой текст:
.txt, лог-файлы, экспортированные заметки, данные после скрапинга - Вы загружаете один файл или несколько файлов с одинаковой структурой текста
- Вам нужны только базовые метаданные, такие как путь к файлу
- Вы хотите использовать самый простой возможный первый шаг перед дальнейшей обработкой
Когда стоит выбрать что-то другое
- Смешанные форматы (PDF, DOCX, HTML, CSV) при одной обработке
- Вам нужны номера страниц, заголовки, названия листов или метаданные об авторстве
- Файл является двоичным или находится в контейнере, и требуется специализированный парсер
Эксперимент: от файла к документу
1. Подготовьте примерный файл
Сохраните текст статьи в формате Sample.txt в проекте, чтобы загрузчик имел что-то конкретное для чтения. Подойдёт любой текст в формате UTF-8; более большие файлы делают поведение «один документ на файл» более заметным.
2. Создайте загрузчик
Note on Package Location
TextLoader is currently available through langchain_community.document_loaders.
However, LangChain is moving integrations into standalone packages, and this import path may change.
The import shown above works with langchain-community 0.4.2. For new projects, check the current LangChain documentation for the recommended import path.
На этом этапе диск ещё не трогается. TextLoader хранит только путь (и опциональные флаги кодировки), которые вы ему указали. Такой подход с отложенной обработкой полезен, когда вы создаёте список загрузчиков и запускаете их позже в рамках пакетной задачи.
3. Вызовите метод .load()
load() читает файл и возвращает список. Каждый загрузчик LangChain возвращает список, даже если имеется всего один документ. Дальнейшие инструменты для обработки и хранения векторов ожидают именно такую структуру списка, поэтому загрузчики остаются согласованными независимо от типа файла.
4. Проверьте длину списка
Для Sample.txt в списке есть ровно один элемент. Файл простого текста всегда формирует один Документ, независимо от его длины. Разрывы строк и абзацы не создают дополнительных Документов — весь файл представляет собой один блок page_content. Если вам нужны более мелкие единицы, добавьте инструмент разделения текста после загрузки.
5. Просмотр Документа
docs[0] — это Документ. В page_content хранится полный текст. metadata обычно содержит только source (путь к файлу). TextLoader не добавляет заголовки, авторов или даты. Если вам нужны более подробные метаданные, добавьте их самостоятельно после загрузки или выберите загрузчик, который извлекает структуру.
Параметры конструктора
TextLoader(file_path, encoding=None, autodetect_encoding=False)
- file_path — путь к файлу с расширением
.txt - encoding — специфический кодек для чтения (UTF-8, latin-1 и т. д.)
Проблемы с кодировкой в смешанных корпусах данных
Если не указать кодировку, TextLoader будет использовать стандартную для платформы (обычно UTF-8). Файл Sample.txt в формате UTF-8 загружается без проблем, без необходимости использования дополнительных флагов.
Создайте файл sample2.txt в формате Shift-JIS с несколькими японскими строками:
今日は良い天気です。
私は毎日プログラミングを勉強しています。
Pythonを使って新しいアプリを作っています。
Загрузка без указания параметра кодировки проваливается — декодер UTF-8 не может обработать байты формата Shift-JIS. Необходимо передать параметр autodetect_encoding=True. TextLoader использует инструмент chardet для определения кодека после неудачной попытки декодирования в формате UTF-8, затем повторяет попытку с использованием полученного предположения. Это важно при обработке файлов из смешанных или неизвестных источников, где одна неверная кодировка может привести к сбою всей задачи.
Итог
TextLoader — это самый простой полезный загрузчик для обычного текста в LangChain RAG: вход — путь к файлу, выход — список документов, минимальное количество метаданных; при наличии беспорядка в корпусе данных возможна автоматическая детекция кодировки. Используйте его, когда файл уже представляет собой текст; переходите на более сложные загрузчики, когда требуется учет структуры или двоичных форматов.