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

参考:https://python.langchain.com/docs/modules/data_connection/document_loaders/

https://github.com/thomas-yanxin/LangChain-ChatGLM-Webui/blob/master/app.py

1、代码

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

复制代码
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)

2、另外单独加载pdf,制定chunk_size,不是特定上面中文安装标点分

复制代码
from langchain.document_loaders import UnstructuredFileLoader


loader = UnstructuredFileLoader(r"C:\Use***\数字人研究报告.pdf")
textsplitter = CharacterTextSplitter(
    chunk_size=200,
    chunk_overlap=20)
chunks = loader.load_and_split(textsplitter)
for num,chunk in enumerate(chunks):
    print(num,chunk)

loader.load()单独获取UnstructuredFileLoader里全部数据

复制代码
loader = UnstructuredFileLoader(r"C:\Use***\数字人研究报告.pdf")
data =loader.load()[0].page_content
data
相关推荐
开源量化GO2 分钟前
学量化:看到“2026年 AI 写 Python”内容时,先用示例和练习补交易认知
人工智能·python
SelectDB技术团队20 分钟前
StarRocks 适合做日志分析吗?
大数据·数据结构·后端·python·doris·日志分析·starrock
weixin_3077791339 分钟前
Databricks里用PySpark统计指定表和字段中各字段的空值、空字符串或零值比例
运维·数据仓库·python·spark·云计算
万年咸鱼43 分钟前
Java List 接口详解:从基础到实战
java·windows·list
海兰44 分钟前
【 Python 量化交易】第6章:数据可视化
开发语言·python·信息可视化
多多鼠1 小时前
Tool Calling的信任边界:从协议校验到执行沙箱的完整链路设计
运维·开发语言·网络·人工智能·python·langchain
breeze jiang1 小时前
LangChain Memory 实战:用 InMemoryChatMessageHistory 管理多轮对话
前端·算法·langchain
Neighbor_OldY1 小时前
【实战复盘】RDP暴力破解与内网横向移动溯源:Windows全套排查命令与事件ID硬核解析
运维·windows·web安全
Jazz_z1 小时前
使用 Python 合并与取消合并 Excel 单元格
开发语言·python·excel
Lenyiin1 小时前
第6篇_Python高级语法与标准库精髓:从会用到达精通
java·python·html