langchain 加载各种格式文件读取方法

news2025/1/28 1:17:37

参考:https://python.langchain.com/docs/modules/data_connection/document_loaders/
https://github.com/thomas-yanxin/LangChain-ChatGLM-Webui/blob/master/app.py
在这里插入图片描述

代码

可以支持pdf、md、doc、txt等格式

from langchain.document_loaders import UnstructuredFileLoader
import re
from typing import List

from langchain.text_splitter import CharacterTextSplitter


class ChineseTextSplitter(CharacterTextSplitter):
    def __init__(self, pdf: bool = False, **kwargs):
        super().__init__(**kwargs)
        self.pdf = pdf

    def split_text(self, text: str) -> List[str]:
        if self.pdf:
            text = re.sub(r"\n{3,}", "\n", text)
            text = re.sub('\s', ' ', text)
            text = text.replace("\n\n", "")
        sent_sep_pattern = re.compile(
            '([﹒﹔﹖﹗.。!?]["’”」』]{0,2}|(?=["‘“「『]{1,2}|$))') 
        sent_list = []
        for ele in sent_sep_pattern.split(text):
            if sent_sep_pattern.match(ele) and sent_list:
                sent_list[-1] += ele
            elif ele:
                sent_list.append(ele)
        return sent_list



def load_file(filepath):
    if filepath.lower().endswith(".md"):
        loader = UnstructuredFileLoader(filepath, mode="elements")
        docs = loader.load()
    elif filepath.lower().endswith(".pdf"):
        loader = UnstructuredFileLoader(filepath)
        textsplitter = ChineseTextSplitter(pdf=True)
        docs = loader.load_and_split(textsplitter)
    else:
        loader = UnstructuredFileLoader(filepath, mode="elements")
        textsplitter = ChineseTextSplitter(pdf=False)
        docs = loader.load_and_split(text_splitter=textsplitter)
    return docs

在这里插入图片描述

继续把上面切分数据保存到FAISS
参考:https://blog.csdn.net/weixin_42357472/article/details/133778618?spm=1001.2014.3001.5502


from langchain.vectorstores import FAISS
from langchain.embeddings import HuggingFaceEmbeddings

embedding = HuggingFaceEmbeddings(model_name=r"C:\Users\loong\.cache\huggingface\hub\models--shibing624--text2vec-base-chinese\snapshots\2642****1812248")  ##HuggingFace离线模型,用加载HuggingFaceEmbeddings

##保存向量
docs = load_file(r"C:\Users\loong\D***资料.txt")
vector_store = FAISS.from_documents(docs, embedding)
vector_store.save_local('faiss_index')

## query 向量库搜索测试

query = "公司地址"
vector_store.similarity_search(query)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1094295.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据库管理-第109期 19c OCM考后感(20231015)

数据库管理-第109期 19c OCM考后感(202301015) 距离上一篇又过了两周多,为啥又卡了这么久,主要是后面几个问题:1. 9月1日的19c OCM upgrade考试木有过,因为有一次免费补考机会就又预约了10月8日的考试&…

IoT知识点补充

MySQL vs NoSQL数据库(MongoDB) 这里举的例子使用MySQL存储用户信息和博客文章的关系数据,同时使用MongoDB存储博客文章的评论,因为评论可以是不同结构的半结构化数据。 MySQL部分如下 import java.sql.Connection; import jav…

普冉PY32系列(九) GPIO模拟和硬件SPI方式驱动无线收发芯片XL2400

目录 普冉PY32系列(一) PY32F0系列32位Cortex M0 MCU简介普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境普冉PY32系列(三) PY32F002A资源实测 - 这个型号不简单普冉PY32系列(四) PY32F002A/003/030的时钟设置普冉PY32系列(五) 使用JLink RTT代替串口输出日志普冉PY32…

初出茅庐的小李博客之SPI工作模式

SPI的工作模式 SPI(Serial Peripheral Interface)是一种同步串行通信协议,常用于连接微控制器和外围设备。SPI有四种模式,分别是0、1、2、3模式。 0模式:时钟空闲时为低电平,数据在时钟的下降沿采样&#…

Using sunbeam to deploy openstack (by quqi99)

作者:张华 发表于:2023-10-15 版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明(http://blog.csdn.net/quqi99) What’s sunbeam sunbeam是一个部署openstack的工具,它会用ju…

利用ChatGPT练习口语

目录 ChatGPT 这两天发布了一个激动人心的新功能,App端(包括iOS和Android)开始支持语音对话以及图片识别功能。 这两个功能一如既往的优先开放给Plus用户使用,现在将App更新到最新版本,就能体验。 为什么说激动人心&a…

Android组件通信——PendingIntent(二十八)

1. PendingIntent 1.1 知识点 (1)了解PendingIntent与Intent的区别; (2)可以完成Notification功能的开发; (3)可以使用PendingIntent进行短信的发送; 1.2 具体内容 …

mysql作业(牛客60-80)

文章目录 606162636465666768697071727374757677787980 60 select cust_id from Customers;61 select distinct prod_id from OrderItems;62 select * from Customers;63 小小的脑袋大大的疑惑,按字母排?order by select cust_name from Customers orde…

计算机网络第2章-DNS(3)

DNS:因特网的目录服务 在因特网上,主机和人类都一样,可以用很多种方式进行标识,主机的一种标识方法是它的主机名。 但是主机名一般是用IP来表示,IP是由四个字节组成,并且有严格的层次结构,不利…

不止硬件,苹果的软件也是频出问题!iOS 17.0.3使iPhone在一夜之间随机开关机

就在我们以为iPhone的问题已经解决了一段时间的时候,一个新的问题似乎突然出现了。在Reddit和其他网站上,人们报告说,他们的iPhone在一夜之间莫名其妙地断电,有时会导致错过警报。 目前尚不清楚是什么原因导致了这个问题&#xf…

python利用多线程让http请求异步返回

嗨喽~大家好呀,这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 有时我们可能会碰到这样一种情况: 我们有一个功能,这个功能对外提供了一个http接口, 我们需要对这个http接口发起请求才能启…

Liunx中日志分析与网络设置(极其粗糙版)

liunx系统日志的管理 系统日志:操作系统本身和大部分服务器程序的日志文件 日志是记录系统所产生的各种事故,在某个时间节点发生了什么,发生的原因 liunx的路径是/var/log下 /var/log/messages:内核日志还有公共信息日志(所有…

冒泡排序(学习笔记)

冒泡排序(基于交换的排序,每一轮确定一个数的位置) 哨兵举例: 待排序序列:6 3 1 2 5 第一轮排列: 3 6 1 2 5 3 1 6 2 5 3 1 2 6 5 3 1 2 5 6(最大的数移动到了正确的位置) 第二轮排列…

Mall脚手架总结(五) —— SpringBoot整合MinIO实现文件管理

前言 在项目中我们经常有资源的上传和下载的功能需求,比如用户头像、产品图片、配置文件等等,大数据量的文件存储无疑需要更高性能的数据存储服务,对于无需对结构实现复杂查询的文件对象来说,对象存储服务无疑是一个较好的选择&am…

并查集路径压缩

我们来看看如果要是100个数,往20个数的集合合并如何 那么我们应该,把数据量小的集合往数据量大的合并 解决另一种极端场景的路径压缩

限制条件加入构造范围:Gym - 102832L

https://vjudge.net/contest/587311#problem/D 场上列方程求首项,假设是全部加1,然后一部分(后缀)减去 k 1 k1 k1,就用到了以下两个条件: 但在这两种情况符合情况下,这个条件不一定满足 然后…

【软件测试】 初识软件测试

文章目录 🌴什么是软件测试🎋软件测试和开发的区别🚩软件测试与调试的区别 🌳软件测试的发展🎄软件测试岗位🍀软件测试在不同类型公司的定位🎍一个优秀的软件测试人员具备的素质🌲软…

105AspectRatio调整宽高比组件_flutter

AspectRatio组件 AspectRatio 的作用是根据设置调整子元素 child 的宽高比。 AspectRatio 首先会在布局限制条件允许的范围内尽可能的扩展,widget 的高度是由宽 度和比率决定的,类似于 BoxFit 中的 contain,按照固定比率去尽量占满区域。 …

【Redis】Java Spring操作redis

目录 引入Redis依赖StringRedisTemplate使用String使用List使用Set使用hash使用zset 引入Redis依赖 StringRedisTemplate 此处RedisTemplate是把这些操作Redis的方法,分成了几个类别,分门别类的来组织的。 此处提供的一些接口风格,和原生的Re…

利达卓越:发挥金融力量,促进团队发展

随着中国经济的快速增长和金融改革的逐步深化,我国金融业取得了令人瞩目的发展。作为经济的重要支柱,我国金融业的规模和实力不断扩大,已经成为全球最大的金融市场之一。利达卓越是一支由管理精英组成的团队,专注于金融行业的投资…