在LangChain中加载和处理PDF文档

概要

PDF(Portable Document Format)是一种广泛使用的文件格式,最初由Adobe在1992年开发,用于以一种与应用程序软件、硬件和操作系统无关的方式呈现文档。在自然语言处理(NLP)和机器学习项目中,常常需要从PDF文档中提取文本信息。LangChain 提供了工具来帮助我们加载和处理PDF文件。本文将详细介绍如何使用LangChain加载PDF文档,并通过向量数据库进行高效检索。

整体架构流程

加载单个PDF文件

from langchain_community.document_loaders import PyPDFLoader

loader = PyPDFLoader("./pdf/2403.04667.pdf")
pages = loader.load_and_split()

# 查看加载后的文档
print(pages)

处理PDF内容
一旦加载了PDF文件,我们就可以将各个页面的内容拼接起来,形成一个连续的文本流,以便进一步处理。

docs = ""
for item in pages:
    docs += item.page_content

# 打印所有页面的内容
print(docs)

接下来,我们可以使用这个文本流来生成摘要或其他形式的文本分析。

from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser

openai_api_key = "EMPTY"
openai_api_base = "http://127.0.0.1:1234/v1"
model = ChatOpenAI(
    openai_api_key=openai_api_key,
    openai_api_base=openai_api_base,
    temperature=0.3,
)

template = """

从目录加载PDF文件
如果需要处理整个目录中的多个PDF文件,可以使用 PyPDFDirectoryLoader 来批量加载。

from langchain_community.document_loaders import PyPDFDirectoryLoader

# 加载目录中的所有PDF文件
loader = PyPDFDirectoryLoader("pdf/")
docs = loader.load()

# 查看加载的文档
print(docs)

创建向量数据库
为了能够高效地检索文档内容,我们可以将加载的文档嵌入到向量数据库中。

from langchain_community.vectorstores import FAISS
from langchain_community.embeddings.huggingface import HuggingFaceEmbeddings

embeddings_path = "D:\\ai\\download\\bge-large-zh-v1.5"
embeddings = HuggingFaceEmbeddings(model_name=embeddings_path)

# 创建向量数据库
vectorStoreDB = FAISS.from_documents(docs, embedding=embeddings)
print(vectorStoreDB)

使用向量数据库生成检索器
接下来,我们将使用向量数据库来生成一个检索器,并通过设置相似度阈值来限制检索结果。

retriever = vectorStoreDB.as_retriever(
    search_type="similarity_score_threshold", search_kwargs={"score_threshold": 0.3}
)

# 创建提示模板
template = """
只根据以下文档回答问题:
{context}

问题:{question}
"""

prompt = ChatPromptTemplate.from_template(template)

# 创建请求链
outputParser = StrOutputParser()
setup_and_retrieval = RunnableParallel(
    {
        "context": retriever,
        "question": RunnablePassthrough()
    }
)

# 测试请求链
result = setup_and_retrieval.invoke("ChatGPT在法律层面有哪些影响?")
print(result)

# 完整请求链
chain = setup_and_retrieval | prompt | model | outputParser
answer = chain.invoke("ChatGPT在法律层面有哪些影响?")
print(answer)

小结

通过本文,我们学习了如何使用LangChain加载和处理PDF文档。无论是单个文件还是整个目录,LangChain 提供了丰富的工具来帮助我们高效地完成任务。此外,通过向量数据库检索器,我们可以轻松地在大量文档中定位相关的信息。希望这篇博客能为你的项目提供有用的参考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值