数据加载器--不同文档数据格式的加载方法

news/2025/2/7 21:23:22/

文章目录

    • CSV
    • HTML
    • JSON
    • Markdown
    • PDF
    • 嵌入模型包装器

    LangChain有很强的数据加载能力,而且它可以处理各种常见的数据格式,例如CSV、文件目录、HTML、JSON、Markdown及PDF等。下面,分别介绍这些不同的文档格式数据的加载方法。CSV逗号分隔值(Comma–Separated Values,CSV)文件是一种使用逗号来分隔值的文本文件。文件的每一行都是一条数据记录,每条记录包含一个或多个用逗号分隔的字段。LangChain将CSV文件的每一行都视为一个独立的文档。

CSV

    Loader是BaseLoader的子类,主要用于从CSV文件加载数据,并将其转换为一系列的Document对象。每个Document对象代表CSV文件的一行,CSV文件的每一行都被转换为键值对,并输出到Document对象的page_content中。对于从CSV文件加载的每个文档,在默认情况下源都被设置为file path参数的值。如果设置source column参数的值为CSV文件中的列名,那么每个文档的源将被设置为指定source_column的列的值。

    可以设置的主要参数包括:

  • file path:CSV文件的路径。
  • source column:可选参数,用于指定作为文档源的列的名称。
  • encoding:可选参数,用于指定打开文件的编码方式。
  • csv_args:可选参数,传递给csv.DictReader的参数。

    CSVLoader的典型用法是创建一个CSVLoader实例,然后调用其load方法来加载文件,如下面的示例:

loader =CSVLoader (file_path='data.csv',encoding='utf-8')
documents =loader.load ()

    在这个例子中,documents是从data.csv文件中加载的Document对象的列表。每个Document对象代表文件中的一行。文件目录对于文件目录,LangChain提供了一种方法来加载目录中的所有文件。在底层,它默认使用UnstructuredLoader来实现这个功能。这意味着,只要将文件存放在同一一个目录下,无论文件数量是多少,LangChain都能够将它们全部加载进来。

    DirectoryLoader是BaseLoader的子类,主要用于从一个指定的目录加载文件。每个从目录中加载的文件都被处理为一个Document对象。可以设置的主要参数包括:

  • loader cls:用于加载文件的加载器类,是BaseLoader的子类。
  • loader kwargs:传递给加载器类的参数。
  • recursive:是否递归加载子目录中的文件。
  • show_progress:是否显示加载进度。

    DirectoryLoader的典型用法是创建一个DirectoryLoader实例,并给出一个文件目录的路径。然后调用其l1oad方法来加载目录中的文件。例如:

loader =DirectoryLoader(path='data directory')
documents =loader.load()

    在这个例子中,documents是从data directory目录中加载的Document.对象列表。每个Document对象代表目录中的一个文件。

HTML

    HTML是用于在Web浏览器中显示文档的标准标记语言。LangChain可以将HTML文档加载为它可以使用的文档。这就意味着,它可以直接从网页上提取并处理数据。HTMLLoader的典型用法是创建一个UnstructuredHTMLLoader或者BSHTMLLoader实例。然后调用其load方法来加载HTML文档。这两个实例都可以将HTML文档加载为可以在后续过程中使用的文档。同时,它们还会提取网页标题,并将其作为title存储在元数据metadata中。

    这种方法的优点在于它可以从HTML文档中提取出结构化的信息,比如段落、标题等,这些信息在后续的处理中可能会很有用。使用BSHTMLLoader加载HTML文档的例子如下:

from langchain.document loaders import BSHTMLLoader
loader =BSHTMLLoader (file_path='example.html')
documents =loader.load()

    在这个例子中,documents是从example.html文档中加载的Document对象的列表,其中每个Document对象都代表HTML文档中的一部分内容。

JSON

    JSON是一种使用人类可读的文本来存储和传输数据对象的开放标准文件格式和数据交换格式,这些对象由属性-值对和数组(或其他可序列化值)组成。LangChain的JSONLoader使用指定的jq模式来解析JSON文件。jq是一种适用于Python的软件包。JSON文件的每一行都被视为一个独立的文档。

    JSONLoader的典型用法是创建一个JSONLoader实例。然后调用其load方法来加载文件。JSONLoader可以通过引用一个jq schema(一种用于处理JSON数据的查询语言)来提取文本并加载到文档中。可以设置的主要参数包括:

  • file path:JSON文件的路径。
  • jq_schema:用于从JSON中提取数据或文本的jq schema。
  • content_key:如果jq schema的结果是对象(字典)的列表,则使用此键从JSON中提取内容。

metadata func:一个函数,接受由jq_schema提取的JSON对象和默认的元数据,返回更新后的元数据的字典。下面是一个使用JSONLoader加载JSON文件的例子:

from langchain.document loaders import JSONLoader
loader =JSONLoader (file_path='example.json',jq_schema='.['
documents =loader.load()

    在这个例子中,documents是从example.json文件加载的Document对象的列表,其中每个Document对象都代表JSON文件中的一部分内容。下面的列表提供了一些可能的jq_schema参考值,用尸可以根踞JSON效琚的结构使用这些值来提取内容。在上面的例子中,指定了jq_schema-=‘’,对应的JSON格式是[“…”,“…”,“…”]。如果你预期的JSON格式是[{“text”:…},{“text”:,{“text”:…}],则可以配置

jq_schema='.[].text'
JSON->【("text"...},{"text"...},{"text"...}]
jq_schema->".【].text"
JSON->{"key":[("text":·..),{"text":...),("text":...)])
jq schema-"key[].text"
JSON->["...","...","...",]
jq_schema->".[]"

Markdown

    Markdown是一种使用纯文本编辑器创建格式化文本的轻量级标记语言。LangChain可以将Markdown文档加载为在后续过程中能够使用的文档。设置mode="elements’"后,Markdown文档会被解析成其各个基本组成元素,例如标题、段落、列表和代码块等。MarkdownLoader的典型用法是创建一个UnstructuredMarkdownLoader实例。然后调用其load方法来加载文档。下面是一个使用UnstructuredMarkdownLoader加载Markdown文档的例子:

markdown_path="../../../.,/./README.md"
loader =UnstructuredMarkdownLoader (markdown path,mode="elements")
documents loader.load()

PDF

    PDF是Adob在1992年开发的一种文件格式,这种格式的文档在各种不同的环境下都能以一种标准和一致的方式呈现,无论是文本还是图像。LangChain可以将PDF文档加载为能够在后续过程中使用的文档。LangChain的数据增强模块中有多种文档加载器可以加载PDF文档。下面将介绍一些主要的PDF文档加载器及其用法。

    PyPDF文档加载器:它可以将PDF文档加载为文档数组,数组中的每个文档包含页面内容和页码的元数据。示例如下:

from langchain.document loaders import MathpixPDFLoader
loader =MathpixPDFLoader ("example_data/layout-parser-paper.pdf")

或者可以使用UnstructuredPDFLoader加载:

from langchain.document loaders import UnstructuredPDFLoader
loader= UnstructuredPDFLoader("example data/layout-parser-paper.pdf")

    在底层,UnstructuredPDFLoader会为不同的文本块创建不同的元素。在默认情况下,它会将这些元素合并在一起,但可以通过指定mode="elements’"来轻松地分离这些元素。在线PDF文档加载器:它可以加载在线PDF文档,并将其转换为可以在下游使用的文档格式,示例如下:

from langchain.document_loaders import OnlinePDFLoader
loader=OnlinePDFLoader("请参考本书代码仓库URL映射表,找到对应资源://arxiv.org/pdf/2302.03803.pdf")

    PyPDFium2文档加载器:使用PyPDFium2文档加载器加载PDF文档的示例如下:

from langchain.document loaders import PyPDFium2Loader
loader =PyPDFium2Loader ("example data/layout-parser-paper.pdf")
data =loader.load()

    PDFMiner文档加载器:使用PDFMiner文档加载器加载PDF文档的示例如下:

from langchain.document loaders import PDFMinerLoader
loader =PDFMinerLoader("example data/layout-parser-paper.pdf")

    使用PDFMiner文档加载器可生成HTML文档。这对于将文本按照语义划分为各个部分非常有帮助,生成的HTML内容可以通过使用Python的BeautifulSoup库进行解析和处理,以获取关于字体大小、页码、PDF文件头页脚等更多结构化的信息。PyMuPDF文档加载器:这是最快的一种PDF文档加载器,它输出的文档包含关于PDF及其页面的详细元数据,且为每页返回一个文档。

from langchain.document loaders import PyMuPDFLoader

    PyPDFDirectoryLoader文档加载器可从目录加载PDF文档,示例如下:

from langchain.document_loaders import PyPDFDirectoryLoader

    PDFPlumberLoader文档加载器:与PyMuPDF文档加载器类似,其输出的文档包含关于PDF及其页面的详细元数据,且为每页返回一个文档。以上是LangChain支持的PDF文档加载器及其使用示例。

嵌入模型包装器

    在深度学习和自然语言处理领域,嵌人(Embedding)是一种将文本数据转换为浮点数值表示形式的技术,它能够分析两段文本之间的相关性。嵌人的一个典型例子是词嵌人,这种嵌人将每个词映射到多维空间中的一个点,使得语义上相似的词在空间中的距离更近。词嵌入是将词语映射到向量空间中的一种技术,它通过对大量文本数据的训练,为每个词语生成一个高维向量。通过这个向量能够捕获词语的语义信息,例如,相似的词语(如“男”和“国王”,“女”和“女王”)在向量空间中的位置会非常接近。这是因为嵌人模型在训练过程中学习到了词语之间的语义关系。

    例如,可以使用预训练的Word2Vec或GloVe等模型得到每个词的向量表示。假设“国王”的向量表示为[1.2,0.7,-0.3],“男”的向量表示为[1.1,0.6,-0.2],“女王”的向量表示为[-0.9,-0.8,0.2],“女”的向量表示为[-0.8,-0.7,0.3]。我们就会发现,相同性别的词语(如“国王”和“男”)在向量空间中的距离更近,这就反映了它们之间的语义关系。这种关系可以通过计算向量之间的余弦相似度来量化。

    词嵌入的一个重要应用就是自然语言处理,例如文本分类、命名实体识别、情感分析等。词嵌入通过将词语转换为向量,然后利用深度学习模型来处理文本数据,实现对语言的理解。LangChain框架提供了一个名为Embeddings的类,它为多种文本嵌人模型(如OpenAI、Cohere、Hugging Face等)提供了统一的接口。通过该类实例化的嵌入模型包装器,可以将文档转换为向量数据,同时将搜索的问题也转换为向量数据,这使得可通过计算搜索问题和文档在向量空间中的距离,来寻找在向量空间中最相似的文本。实例化的Embeddings类被称为嵌人模型包装器,同Model I/O模块的LLM模型包装器和聊天模型包装器(Chat Model)并称为三大模型包装器。

    OpenAI平台的嵌人模型,使用大量的文本数据进行训练,以尽可能地捕捉和理解人类语言的复杂性。这使得OpenAI的嵌人模型可以生成高质量的向量表示,并有效地捕捉文本中的语义关系和模式。在LangChain框架中,当你创建一个OpenAIEmbeddings类的实例时,该实例将使用text-embedding-ada-002这个型号模型来进行文本嵌人操作。这种嵌入模型对于搜索、聚类、推荐、异常检测和分类任务等都有很好的效果。


http://www.ppmy.cn/news/1570156.html

相关文章

DeepSeek推动大语言模型发展进入新阶段

过年,最火的还是国产AI,无论是Deepseek V3 R1模型超越ChatGPT 4o,还是国产机器人春晚亮相,不仅让国人眼前一亮,也让IT界大跌眼镜。 一、Deepseek的影响力 Deepseek仅凭一己之力,让英伟达芯片商总市值大跌…

C中静态库和动态库的使用

2.使用尖括号包括 如果要使用尖括号包括头文件,有两种方法 1.将头文件移动到标准头文件目录,linux为/usr/local/include.windows下为C:\MinGW\include 2.编译时指定头文件目录,gcc -I/头文件目录 … 编译时-I参数就是用于指定头文件目录 3.静态库 将文件编译为静态库,可以…

低代码提升交付效率的公式计算

低(无)代码平台(后统称“低代码”)能够提升数字化应用建设、交付效率,已经成为IT从业人员的共识。目前,大部分CIO/CDO都能清晰定位和认知低代码的特点和作用。但仍然有人认为,使用了低代码工具软…

开放式TCP/IP通信

一、1200和1200之间的开放式TCP/IP通讯 第一步:组态1214CPU,勾选时钟存储器 第二步:防护与安全里面连接机制勾选允许PUT/GET访问 第三步:添加PLC 第四步:点击网络试图,选中网口,把两个PLC连接起…

HTML5教程之标签(2)

HTML5 <b> 标签 实例 在HTML5中&#xff0c;你可以使用<b>标签来对某些文本实现加粗的效果&#xff0c;请参考下述的示例&#xff1a; <p>这是一个普通的文本- <b>这是一个加粗文本</b>。</p> 尝试一下 浏览器支持 所有主流浏览器都支…

【C语言】自定义类型讲解

文章目录 一、前言二、结构体2.1 概念2.2 定义2.2.1 通常情况下的定义2.2.2 匿名结构体 2.3 结构体的自引用和嵌套2.4 结构体变量的定义与初始化2.5 结构体的内存对齐2.6 结构体传参2.7 结构体实现位段 三、枚举3.1 概念3.2 定义3.3 枚举的优点3.3.1 提高代码的可读性3.3.2 防止…

游戏引擎 Unity - Unity 打开项目、Unity Editor 添加简体中文语言包模块、Unity 项目设置为简体中文

Unity Unity 首次发布于 2005 年&#xff0c;属于 Unity Technologies Unity 使用的开发技术有&#xff1a;C# Unity 的适用平台&#xff1a;PC、主机、移动设备、VR / AR、Web 等 Unity 的适用领域&#xff1a;开发中等画质中小型项目 Unity 适合初学者或需要快速上手的开…

苹果AR眼镜:产品规划与战略路线深度解析

随着增强现实(AR)技术的不断发展,苹果公司正逐步推进其AR智能眼镜项目。尽管Vision Pro作为一款高端混合现实设备已经面世,但苹果真正的目标是开发出一款轻便、全天候佩戴且能够取代智能手机功能的AR眼镜。本文将梳理苹果在AR领域的探索历程,并分析其当前的产品状态及未来…