RAG - 文档加载器

加载TXT的文件

#安装langchain_community  
    # pip install langchain_community 
# 读取普通的文件
from langchain_community.document_loaders import TextLoader
text = TextLoader(file_path="asset/load/01-langchain-utf-8.txt",encoding="utf-8")
docs = text.load()
print(docs)
# Documment对象中有两个重要的属性:
#     page_content:真正的文档内容
#     metadata:文档内容的原数据

加载pdf

#加载pdf
#LangChain加载PDF文件使用的是pypdf
# pip install pypdf

from langchain_community.document_loaders import PyPDFLoader
pdfLoader = PyPDFLoader(file_path="asset/load/02-load.pdf")
docs  = pdfLoader.load()
# print(type(docs))
# print(docs[0])
for doc in docs:
    print(f"文档的内容:{doc.page_content}")
    
# type(pages[0]) #langchain_core.documents.base.Document
# pages[0].page_content #只获取本页内容
# pages[0].metadata # {...,'source': './asset/load/load.pdf',.., 'page': 0}

load_and_split 加载并切分

from langchain_community.document_loaders import PyPDFLoader
pdfLoader = PyPDFLoader(file_path="asset/load/02-load.pdf")
docs = pdfLoader.load_and_split()
# print(docs)
for doc in docs:
    print(f"❀{doc.page_content}")

加载CSV

from langchain_community.document_loaders import CSVLoader
loader = CSVLoader(file_path="asset/load/03-load.csv")
data= loader.load()
print(type(data[0].page_content))
#打印每一行
for doc in data:
    print(f"{doc.page_content}\n")

加载JSON

#安装jq  pip install jq
from langchain_community.document_loaders import JSONLoader
#情况1 打印完整json数据
loader = JSONLoader(
    file_path="asset/load/04-load.json",
    jq_schema=".",
    text_content=False  # <--- 关键修改:允许 page_content 是 dict 类型
)
docs = loader.load()
print(docs[0].page_content)
# 情况2
# .messages[].content:遍历.messages[]中所有元素 从每一个元素中提取.content字段
json_loader = JSONLoader(
    file_path="asset/load/04-load.json",
    jq_schema=".messages[].content",
)
# 3.加载
doc2 = json_loader.load()
print("-" * 60)
print(doc2[0].page_content)

提取JSON内容

#json 示例2 提取04-response.json文件中嵌套在 data.items[].content 的文本
# 如果希望处理 JSON 中的 嵌套字段、数组元素提取,可以使用 content_key 配合is_content_key_jq_parsable=True ,通过 jq 语法精准定位目标数据。
# 通常,对api请求结果的采集
#   "status": "success",
#   "data": {
#     "page": 2,
#     "per_page": 3,
#     "total_pages": 5,
#     "total_items": 14,
#     "items": [
#       {
#         "id": 101,
#         "title": "Understanding JSONLoader",
#         "content": "This article explains how to parse API responses...",
#         "author": {
#           "id": "user_1",
#           "name": "Alice"
#         },
#         "created_at": "2023-10-05T08:12:33Z"
#       },
from langchain_community.document_loaders import JSONLoader
file_path = 'asset/load/04-response.json'
# 方式1:
loader = JSONLoader(
    file_path=file_path,
    jq_schema=".data.items[].content",
)
docs = loader.load()
for doc in docs:
    print(f"文档内容:{doc.page_content}")
    
# 方式2:
loder2 = JSONLoader(
    file_path="asset/load/04-response.json",
    jq_schema=".data.items[]", # 先定位到数组条目
    content_key=".content", # 再从条目中提取 content 字段
    is_content_key_jq_parsable=True
)
docs2 = loder2.load()
print("-"*60)
for doc in docs2:
    print(f"文档内容:{doc.page_content}")
    

深层提取json文本

#提取04-response.json文件中嵌套在 data.items[] 里的 title、content 和 其文本
from langchain_community.document_loaders import JSONLoader
from pprint import pprint
loader = JSONLoader(
    file_path=file_path,
    # jq_schema=".data.items[] | {id, author, text: (.title + '\n' + .content)}",
    jq_schema=".data.items[]",
    content_key='(.title + "\n\n" + .content)',
    is_content_key_jq_parsable=True # 用jq解析content_key
)
docs = loader.load()
pprint(docs[0].page_content)

#取出第二层的作者
loader2 = JSONLoader(
    file_path=file_path,
    jq_schema=".data.items[]",
    content_key='.author.name',
    is_content_key_jq_parsable=True )
docs2 = loader2.load()
print("=== 取出第二层的作者 ===")
print(docs2[0].page_content)

加载HTML

# 加载HTML(了解)
# 1.导入相关的依赖
from langchain_community.document_loaders import UnstructuredHTMLLoader
# 2.定义UnstructuredHTMLLoader对象
# strategy:
# "fast" 解析加载html文件速度是比较快(但可能丢失部分结构或元数据)
# "hi_res": (高分辨率解析) 解析精准(速度慢一些)
# "ocr_only" 强制使用ocr提取文本,仅仅适用于图像(对HTML无效)
# mode :one of `{'paged', 'elements', 'single'}
# "elements" 按语义元素(标题、段落、列表、表格等)拆分成多个独立的小文档
html_loader = UnstructuredHTMLLoader(
    file_path="asset/load/05-load.html",
    mode="elements",
    strategy="fast"
)
# 3.加载
docs = html_loader.load()
print(len(docs)) # 16
# 4.打印
for doc in docs:
    print(doc)
    

加载Markdown

# 2.6 加载Markdown(了解)
# pip install markdown
# pip install unstructured

# 1.导入相关的依赖
from langchain_community.document_loaders import UnstructuredMarkdownLoader
from pprint import pprint
# 2.定义UnstructuredMarkdownLoader对象
md_loader = UnstructuredMarkdownLoader(
    file_path="asset/load/06-load.md",
    strategy="fast"
)
# 3.加载
docs = md_loader.load()
print(len(docs))
# 4.打印
for doc in docs:
    pprint(doc)
    
添加新评论