1. 簡單文本的讀取
用LangChain讀入txt文檔
# 讀取單個txt文件
import os
from langchain_community.document_loaders import TextLoader
# 獲取當前腳本文件所在的目錄
script_dir = os.path.dirname(__file__)
print(f"獲取當前腳本文件所在的目錄:{script_dir}")?
# 結合相對路徑構建完整路徑
file_dir = os.path.join(script_dir, '../../90-文檔-Data/黑悟空/設定.txt')
loader = TextLoader(file_dir)
documents = loader.load()
print(documents)
langchain會將文檔轉換為Document對象
LangChain Document對象和其中的元數據
LangChain中的各種Loader
Providers | 🦜?🔗 LangChain
用LangChain讀取目錄中的所有格式類型文檔
pip install unstructured
pip install "unstructured[image]"
pip install "unstructured[md]"
sudo apt-get install tesseract-ocr
pip install pytesseract?
用LangChain不同的Loader解析結果不同
from langchain_community.document_loaders import DirectoryLoader, TextLoaderimport os
# 獲取當前腳本文件所在的目錄
script_dir = os.path.dirname(__file__)
print(f"獲取當前腳本文件所在的目錄:{script_dir}")
# 結合相對路徑構建完整路徑
data_dir = os.path.join(script_dir, '../../90-文檔-Data/黑悟空')# 加載目錄下所有 Markdown 文件
loader = DirectoryLoader(data_dir,glob="**/*.md",#loader_cls=TextLoader # 指定加載工具)
docs = loader.load()
print(docs[0].page_content[:100]) # 打印第一個文檔內容的前100個字符
用LlamaIndex讀取目錄中的所有文檔
from llama_index.core import SimpleDirectoryReader
# 使用 SimpleDirectoryReader 加載目錄中的文件
dir_reader = SimpleDirectoryReader("90-文檔-Data/黑悟空")
documents = dir_reader.load_data()
# 查看加載的文檔數量和內容
print(f"文檔數量: {len(documents)}")
print(documents[0].text[:100]) # 打印第一個文檔的前100個字符# 僅加載某一個特定文件
dir_reader = SimpleDirectoryReader(input_files=["data/黑神話/黑神話悟空的設定.txt"])
documents = dir_reader.load_data()
print(f"文檔數量: {len(documents)}")
print(documents[0].text[:100]) # 打印第一個文檔的前100個字符
用Unstructured工具讀取各式類型的文檔
Partitioning - Unstructured
Unstructured工具會將文檔轉換為element格式
from unstructured.partition.text import partition_text
text = "data/黑神話/黑神話悟空的設定.txt"
elements = partition_text(text)
for element in elements:
? ? print(element)
LangChain集成了各種Unstructured Loader
2. 結構化文本的讀取(JSON\網頁\Markdown)
使用LangChain的JSON Loader
- 當輸入數據為 JSON 格式時,若需從嵌套復雜的 JSON 中提取特定字段或結構,可通過
jq_schema
定義提取規則(類似 SQL 查詢或 JSONPath 表達式)。
LangChain中的各種網頁加載器

#WebBaseLoader
#UnstructuredLoader
UnstructuredLoader – 父子元素的鏈接
from langchain_unstructured import UnstructuredLoader
from typing import List
from langchain_core.documents import Document
page_url = "https://zh.wikipedia.org/wiki/黑神話:悟空"
def _get_setup_docs_from_url(url: str) -> List[Document]:
? ? loader = UnstructuredLoader(web_url=url)
? ? setup_docs = []
? ? # parent_id = None ?# 初始化 parent_id
? ? # current_parent = None ?# 用于存儲當前父元素
? ? for doc in loader.load():
? ? ? ? # 檢查是否是 Title 或 Table
? ? ? ? if doc.metadata["category"] == "Title" or doc.metadata["category"] == "Table":
? ? ? ? ? ? parent_id = doc.metadata["element_id"]
? ? ? ? ? ? current_parent = doc ?# 更新當前父元素
? ? ? ? ? ? setup_docs.append(doc)
? ? ? ? elif doc.metadata.get("parent_id") == parent_id:
? ? ? ? ? ? setup_docs.append((current_parent, doc)) ?# 將父元素和子元素一起存儲
? ? return setup_docs ? ? ??
docs = _get_setup_docs_from_url(page_url)
for item in docs:
? ? if isinstance(item, tuple):
? ? ? ? parent, child = item
? ? ? ? print(f'父元素 - {parent.metadata["category"]}: {parent.page_content}')
? ? ? ? print(f'子元素 - {child.metadata["category"]}: {child.page_content}')
? ? else:
? ? ? ? print(f'{item.metadata["category"]}: {item.page_content}')
? ? print("-" * 80)