🔥🔥🔥一文搞懂Langchain Document Loader(二)

Transform Loaders:将数据从特定格式加载到文档格式

转换加载器(Transform Loaders:)就像上文提到的的TextLoader一样 - 它们将输入格式转换为我们的文档格式。LangChain中有越来越多的转换加载器,包括但不限于以下几种:

  • CSV
  • Email
  • HTML
  • Markdown
  • Microsoft Word/PowerPoint
  • Notion (raw files or through API integration)
  • Reddit
  • PDF

许多这些加载器的基础是Unstructured Python库。这个库非常擅长将各种文件类型转换为我们文档所需的文本数据。

无结构分区(Unstructured Partitions)

Unstructured库的核心概念是将文档划分为元素。当传递一个文件时,库将读取源文档,将其分割为多个部分,对这些部分进行分类,然后提取每个部分的文本。在划分之后,返回一个文档元素列表。

以下是直接使用库时的例子:

python 复制代码
from unstructured.partition.auto import partition
elements = partition(filename="dashboard.html")

该库在底层使用了一些工具来自动检测文件类型,并根据文件类型正确地进行划分。

例子:加载Microsoft Word文档

让我们看一下加载Microsoft Word文档的过程是什么样的。

这是我们的样例Word文档:

现在我们可以使用LangChain的UnstructuredWordDocumentLoader来划分这个文档。

python 复制代码
from langchain.document_loaders import UnstructuredWordDocumentLoader

# use mode="elements" to return each Element as a Document
# otherwise it defaults the "single" option which returns a single document
loader = UnstructuredWordDocumentLoader(file_path="test_doc.docx", mode="elements")

data = loader.load()

print(data)

当使用mode="elements"时的结果,它将为源文档中的每个元素返回一个文档。

python 复制代码
[
    Document(page_content = 'Title Text', metadata = {
        'source': 'test_doc.docx',
        'filename': 'test_doc.docx',
        'filetype': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
        'page_number': 1,
        'category': 'Title'
    }),
    Document(page_content = 'Heading 1', metadata = {
        'source': 'test_doc.docx',
        'filename': 'test_doc.docx',
        'filetype': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
        'page_number': 1,
        'category': 'Title'
    }),
    Document(page_content = 'This is paragraph 1', metadata = {
        'source': 'test_doc.docx',
        'filename': 'test_doc.docx',
        'filetype': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
        'page_number': 1,
        'category': 'NarrativeText'
    }),
    Document(page_content = 'Heading 2', metadata = {
        'source': 'test_doc.docx',
        'filename': 'test_doc.docx',
        'filetype': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
        'page_number': 1,
        'category': 'Title'
    }),
    Document(page_content = 'This is paragraph 2', metadata = {
        'source': 'test_doc.docx',
        'filename': 'test_doc.docx',
        'filetype': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
        'page_number': 1,
        'category': 'NarrativeText'
    })
]

使用默认的mode="single"时的结果,它将为源文档中的所有文本返回一个单一的文档。

python 复制代码
[
	Document(
		page_content='Title Text\n\nHeading 1\n\nThis is paragraph 1\n\nHeading 2\n\nThis is paragraph 2', 
		metadata={'source': 'test_doc.docx'}
	)
]

总结下,在"single"模式下,元素之间使用"\n\n"分隔符连接。接下来我们介绍文本拆分器时,这是字符拆分器的默认拆分字符。

相关推荐
AI创界者11 小时前
Python 进阶实战(十八):API 网关安全与异步鉴权中间件 —— 基于 AsyncIO 的 JWT 零拷贝验权与动态黑名单过滤
人工智能·python·aigc
ShuangNaoPai20 小时前
广告语信噪比检测:用香农信息论解构“WRI字词重复指数”
aigc
摸鱼的张三1 天前
如何使用 GPT 协议调用 API:从原理到实战
gpt
西索斯coding1 天前
scribe_v2 和 gpt-transcribe 转会议录音差多少?2026 年六项指标实测审计
gpt·ai
李剑一1 天前
没收用户的钱冲史上最大IPO?2 万亿美元的估值有多少是罚没来的
aigc·openai·ai编程
谟松1 天前
RTX 5070 Ti 跑 Qwen2.5-VL-7B-AWQ:一个真实工业质检项目的部署踩坑记录
aigc
小虎AI生活1 天前
腾讯 Buddy One 架构解读:跨应用 Agent 底座怎么打通办公协同
aigc·ai编程
stormzhangV1 天前
科普下 AI 降智
人工智能·aigc
变量棱镜1 天前
GPT-6.1 Terra 正式上线
gpt·ai·openai·codex
星际码仔1 天前
Codex Co²:AI 时代的结对编程,应该是怎样的?
openai·ai编程·vibecoding