AI(学习笔记第四课) 使用langchain进行AI开发 load documents(pdf)
文章目录
- AI(学习笔记第四课) 使用langchain进行AI开发 load documents(pdf)
- 学习内容:
- 1.load documents(pdf)
- 1.1 学习`url`
- 1.2 `pdf`文件准备
- 1.3 准备`ollama`的模型
- 1.3.1 安装`ollama`
- 1.3.3 下载需要的`embedding`大模型
- 1.4 在`pycharm`中准备代码
- 1.5 在`pycharm`中下载必要的`python library`
- 1.6 执行代码
- 1.7 代码解析
- 1.7.1 准备`embed`模型
- 1.7.2 将`pdf`进行`load`
- 1.7.3 使用`pdf`内容创建`vector store`
- 1.7.4 使用`vector store`进行`ai`检索
- 2.段落分析`Layout analysis`
- 2.1 导入必要的包
- 2.2 需要安装的软件
- 2.2.1 Poppler (PDF analysis)
- 2.2.2 `Tesseract (OCR)`
- 2.2 准备代码
- 2.3 代码执行,对`pdf`进行分解
AI(学习笔记第四课) 使用langchain进行AI开发 load documents(pdf)
- 使用
langchain
如何构建vector store
- 使用
Layout analysis
学习内容:
- 使用构建
vector store
- 使用利用
vector store
进行检索 - 使用
Layout analysis
进行段落分析
1.load documents(pdf)
1.1 学习url
langchain的load documents文档。
1.2 pdf
文件准备
这里,想定公司需要做成知识向量库vector store
文档有pdf
文档,因此这里处理pdf
文件,langchain
的官方链接给提供了一个pdf文件
。请在这里提前下载文件。
1.3 准备ollama
的模型
langchain
对ollama
支持的非常好,而且国外的AI
商用模型,一般国内都使用不了,因此这里准备本地的ollama
1.3.1 安装ollama
ollama的官方网站
可以deepseek
一下,如何安装ollama
,这里在mac
系统上安装。
1. 下载安装包
访问 Ollama 官方下载页面:https://ollama.com/download,选择 macOS 版本(支持 Intel 和 Apple Silicon 芯片)。2. 运行安装程序
下载完成后,双击 .dmg 文件,将 Ollama 拖到 Applications 文件夹中。3. 启动 Ollama
打开 Launchpad 或 Applications 文件夹,点击 Ollama 图标运行。首次启动时,可能需要授予权限(在系统设置中允许)。下载安装包
访问 Ollama 官方下载页面:https://ollama.com/download,选择 macOS 版本(支持 Intel 和 Apple Silicon 芯片)。4. 运行安装程序
下载完成后,双击 .dmg 文件,将 Ollama 拖到 Applications 文件夹中。5. 启动 Ollama
打开 Launchpad 或 Applications 文件夹,点击 Ollama 图标运行。首次启动时,可能需要授予权限(在系统设置中允许)。
1.3.3 下载需要的embedding
大模型
这里需要embedding
的文本处理模型,所以下载nomic-embed-text
模型。
ollama pull nomic-embed-text
1.4 在pycharm
中准备代码
这里代码和pdf
文件分别如下:
代码: src\document_loaders\001_load_pdf.py
pdf
测试文件:src\document_loaders\examples\layout-parse-paper.pdf
代码如下所示:
from langchain_community.document_loaders import PyPDFLoader
import asyncio
from langchain_core.vectorstores import InMemoryVectorStore
from langchain_ollama.embeddings import OllamaEmbeddings# 替换 OpenAIEmbeddings 配置为 Ollama 本地模型
embeddings = OllamaEmbeddings(model="nomic-embed-text", # 或其他支持的本地模型如 "mistral", "nomic-embed-text"base_url="http://192.168.43.158:11434" # Ollama 默认地址
)async def load_pdf():file_path = './examples/layout-parser-paper.pdf'loader = PyPDFLoader(file_path)pages = []async for page in loader.alazy_load():pages.append(page)# 后续使用方式与 OpenAIEmbeddings 完全一致vector_store = InMemoryVectorStore.from_documents(pages,embeddings)docs = vector_store.similarity_search("What is LayoutParser?", k=2)for doc in docs:print(f'Page {doc.metadata["page"]}: {doc.page_content[:300]}\n')asyncio.run(load_pdf())
1.5 在pycharm
中下载必要的python library
1.6 执行代码
1.7 代码解析
1.7.1 准备embed
模型
# 替换 OpenAIEmbeddings 配置为 Ollama 本地模型
embeddings = OllamaEmbeddings(model="nomic-embed-text", # 或其他支持的本地模型如 "mistral", "nomic-embed-text"base_url="http://192.168.43.158:11434" # Ollama 默认地址
)
这里,已经构建了ollama
,直接指向本地的ollama
。
1.7.2 将pdf
进行load
file_path = './examples/layout-parser-paper.pdf'loader = PyPDFLoader(file_path)pages = []async for page in loader.alazy_load():pages.append(page)
将pdf
文件进行load
,每个pdf
文件的page
都append
到pages
变量。
1.7.3 使用pdf
内容创建vector store
# 后续使用方式与 OpenAIEmbeddings 完全一致vector_store = InMemoryVectorStore.from_documents(pages,embeddings)
这里,需要执行参数pages
和embeddings
,即文档以及embedding
模型。
1.7.4 使用vector store
进行ai
检索
docs = vector_store.similarity_search("What is LayoutParser?", k=2)for doc in docs:print(f'Page {doc.metadata["page"]}: {doc.page_content[:300]}\n')
2.段落分析Layout analysis
有时候,pdf
文件不能只按照page
进行load
,而是按照段落,通常包括:
paragraphs
段落titles
题目tables
表格other structures
其他结构
接下来进行段落的解析,如下这样,将一个文件进行分解。
2.1 导入必要的包
- unstructured系列
- langchain-unstructured
- unstructured
- unstructured-api-tools
- unstructured-client
- unstructured-inference
- unstructured-paddleocr
- unstructured.pytesseract
- pdf系列
- pdf2image
- pdfminer.six
- PyMyPDF
- PyPDF2
- pyPdfium2
2.2 需要安装的软件
2.2.1 Poppler (PDF analysis)
这个pdf analysis
的软件,这里需要安装。这里给出了三种系统的安装方法。
Linux: apt-get install poppler-utils
Mac: brew install poppler
Windows: https://github.com/oschwartz10612/poppler-windows/releases/tag/v24.08.0-0
这里是windows
安装,所以下载windows
的软件包,之后直接解压,放在如下路径
D:\01_software\27_pdf_unstructured\poppler-24.08.0
继续设定环境变量PATH
。将如下命令设定到PATH
中。当然这里需要和自己的路径一致即可。
D:\01_software\27_pdf_unstructured\poppler-24.08.0\Library\bin
2.2.2 Tesseract (OCR)
这里还需要安装Tesseract (OCR)
,这是一个windows
的安装包。
https://github.com/UB-Mannheim/tesseract/wiki#tesseract-installer-for-windows
- 这里安装到如下目录
D:\01_software\27_pdf_unstructured\tesseract
-同样设定PATH
目录
将D:\01_software\27_pdf_unstructured\tesseract
设定到PATH
,过程和上面的poppler
类似。
2.2 准备代码
os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"
os.environ["TESSDATA_PREFIX"] = r"D:\01_software\27_pdf_unstructured\tesseract\tessdata"
os.environ["PATH"] += r";D:\01_software\27_pdf_unstructured\tesseract\\"
os.environ["OCR_AGENT"] = r"D:\01_software\27_pdf_unstructured\tesseract\\"
file_path = r'D:\00_study\07_python\PythonProject\src\document_loaders\examples\layout-parser-paper.pdf'
loader_local = UnstructuredLoader(file_path=file_path,strategy="hi_res",ocr_languages="eng+chi_sim" # 添加OCR语言支持
)
docs_local = []
for doc in loader_local.lazy_load():docs_local.append(doc)
print(len(docs_local))
first_page_docs = [doc for doc in docs_local if doc.metadata.get("page_number") == 1]
for doc in first_page_docs:print(doc.page_content)
这里,按照如下过程处理pdf
文件。注意,在执行过程中,还可能报错,可能出现错误,这时候引入提示的python包即可
- 使用
UnstructuredLoader
类进行pdf
文件的解析 - 之后打印出整个
pdf
文件分解出来的doc
的数量 - 最后根据每个
doc
对象的metadata
中的page_number
,来打印出page_number=1
的所有doc
的内容
2.3 代码执行,对pdf
进行分解
可以看出,这里将第一个page_number
进行了完美的划分,之后都保存在doc
对象里面。