开源模型应用落地-LangChain实用小技巧-使用各种Loader高效解析不同数据源(七)

一、前言

  在 LangChain框架中,提供了Loader机制,以统一的方式来从各种数据源获取数据,使得开发人员可以方便地集成不同类型的数据源,而无需为每种数据源编写特定的加载代码。它可以将不同格式的数据转换为 LangChain 可以处理的统一格式,为后续的文本处理、知识提取和问答等任务提供基础。


二、术语

2.1.LangChain

    是一个全方位的、基于大语言模型这种预测能力的应用开发工具。LangChain的预构建链功能,就像乐高积木一样,无论你是新手还是经验丰富的开发者,都可以选择适合自己的部分快速构建项目。对于希望进行更深入工作的开发者,LangChain 提供的模块化组件则允许你根据自己的需求定制和创建应用中的功能链条。

    LangChain本质上就是对各种大模型提供的API的套壳,是为了方便我们使用这些 API,搭建起来的一些框架、模块和接口。

   LangChain的主要特性:
        1.可以连接多种数据源,比如网页链接、本地PDF文件、向量数据库等
        2.允许语言模型与其环境交互
        3.封装了Model I/O(输入/输出)、Retrieval(检索器)、Memory(记忆)、Agents(决策和调度)等核心组件
        4.可以使用链的方式组装这些组件,以便最好地完成特定用例。
        5.围绕以上设计原则,LangChain解决了现在开发人工智能应用的一些切实痛点。


三、前提条件 

3.1. 基础环境

  1.  操作系统:不限

3.2. 安装虚拟环境

conda create --name langchain python=3.10
conda activate langchain
pip install langchain langchain-community
pip install unstructured[all-docs]==0.13.2

四、技术实现

4.1.加载markdown文本

markdown文件内容:

# 一级标题

这是一个段落。
这里可以包含一些**加粗**的文字,一些_*斜体*的文字。

## 二级标题

1. 第一项
2. 第二项
3. 第三项


### 三级标题

* 第一项
* 第二项
* 第三项

测试代码:

# -*- coding: utf-8 -*-

from langchain_community.document_loaders import TextLoader

def markdown_loader():
    loader = TextLoader("test.md",encoding="utf-8")
    docs = loader.load()
    # print(len(docs))

    for i in range(0,len(docs)):
        print(docs[i].page_content)

if __name__ == '__main__':
    markdown_loader()

调用结果:

4.2.加载文件目录

测试代码:

# -*- coding: utf-8 -*-

from langchain_community.document_loaders import DirectoryLoader


def directory_loader():
    loader = DirectoryLoader(path="E:\\BaiduNetdiskDownload\\", glob="*.md",show_progress=True)
    docs = loader.load()
    print(docs)


if __name__ == '__main__':
    directory_loader()


调用结果:

ps:

1. 需要下载nltk模型

2. nltk.download('punkt_tab')

3. nltk.download('averaged_perceptron_tagger_eng')

4.3.加载html

html文件内容:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>一级标题</h1>

这是一个段落。<br>
这里可以包含一些<b></b>加粗</b>的文字,一些<i>斜体</i>的文字。

<h2>二级标题</h2>

<ol>
<li>第一项</li>
<li>第二项</li>
<li>第三项</li>
</ol>

<h3>三级标题</h3>

<ul>
<li>第一项</li>
<li>第二项</li>
<li>第三项</li>
</ul>

</body>
</html>

测试代码:

# -*- coding: utf-8 -*-

from langchain_community.document_loaders import UnstructuredHTMLLoader



def html_loader():
    loader = UnstructuredHTMLLoader('test.html')
    docs = loader.load()
    print(docs)

if __name__ == '__main__':
    html_loader()


调用结果:

4.4.加载JSON

安装依赖:

pip install jq

json文件内容:

[
      {
          "role": "system",
          "content": "You are a helpful assistant."
      },
      {
          "role": "user",
          "content": "请推荐一些广州的特色景点?"
      }
]

测试代码:

# -*- coding: utf-8 -*-

from langchain_community.document_loaders import JSONLoader


def json_loader():
    loader = JSONLoader(
        file_path="test.json", jq_schema=".",text_content=False
    )
    docs = loader.load()
    print(docs)


if __name__ == '__main__':
    json_loader()

调用结果:

4.5.加载PDF

安装依赖:

pip install pypdf

PDF文件内容:

测试代码:

# -*- coding: utf-8 -*-

from langchain_community.document_loaders import  PyPDFLoader


def pdf_loader():
    loader = PyPDFLoader(
        file_path="E:\\BaiduNetdiskDownload\\ChatGLM分享.pdf"
    )
    docs = loader.load()
    print(docs)

if __name__ == '__main__':
    pdf_loader()

调用结果:

4.6.加载CSV

CSV文件内容:

name    age
张三丰 100
李长生 180

测试代码:

# -*- coding: utf-8 -*-

from langchain_community.document_loaders import CSVLoader


def csv_loader():
    loader = CSVLoader(file_path="test.csv",encoding="utf-8")
    docs = loader.load()
    print(docs)

if __name__ == '__main__':
    csv_loader()

调用结果:

4.7.完整示例

# -*- coding: utf-8 -*-

from langchain_community.document_loaders import TextLoader, UnstructuredHTMLLoader, JSONLoader, PyPDFLoader, CSVLoader,DirectoryLoader


def markdown_loader():
    loader = TextLoader("test.md", encoding="utf-8")
    docs = loader.load()
    
    for i in range(0, len(docs)):
        print(docs[i].page_content)


def directory_loader():
    loader = DirectoryLoader(path="E:\\BaiduNetdiskDownload\\", glob="*.md", show_progress=True)
    docs = loader.load()
    print(docs)

def html_loader():
    loader = UnstructuredHTMLLoader('test.html')
    docs = loader.load()
    print(docs)


def json_loader():
    loader = JSONLoader(
        file_path="test.json", jq_schema=".",text_content=False
    )
    docs = loader.load()
    print(docs)

def pdf_loader():
    loader = PyPDFLoader(
        file_path="E:\\BaiduNetdiskDownload\\ChatGLM分享.pdf"
    )
    docs = loader.load()
    print(docs)

def csv_loader():
    loader = CSVLoader(file_path="test.csv",encoding="utf-8")
    docs = loader.load()
    print(docs)

if __name__ == '__main__':
    csv_loader()

五、附带说明

5.1.问题一:ImportError: failed to find libmagic. Check your installation

解决:

pip uninstall python-magic
pip install python-magic-bin==0.4.14

PS:

python-magic-bin库要与unstructured库兼容,示例中,unstructured使用0.13.2

  • 50
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

开源技术探险家

以微薄之力温暖这个世界

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值