天学会AI应用开发第十二课:从PDF、Word和网页构建RAG
上一篇文章介绍了如何从TXT文件中读取文本内容,但在日常办公场景中,纯文本文件的使用频率并不高。更常见的需求是处理PDF、Word等文档格式,同时还需要从网页中提取知识信息。 因此,本篇文章将重点讲解如何从PDF、Word以及网页中提取内容,并将其应用于RAG(检索增强生成)系统。 一、从PDF文件
上一篇文章介绍了如何从TXT文件中读取文本内容,但在日常办公场景中,纯文本文件的使用频率并不高。更常见的需求是处理PDF、Word等文档格式,同时还需要从网页中提取知识信息。

因此,本篇文章将重点讲解如何从PDF、Word以及网页中提取内容,并将其应用于RAG(检索增强生成)系统。
一、从PDF文件中高效提取文本内容
PDF格式在日常工作中非常普遍,无论是通知文件还是电子书,大多采用这种格式。Python生态中提供了多种处理PDF的库,其中pdfplumber是最常用的之一。在使用前需要先安装:
pip install pdfplumber
安装完成后,调用pdfplumber的open方法打开文件,逐页提取文本并拼接即可。示例代码如下:
import pdfplumber
def read_from_pdf(file_path):
full_text = ""
with pdfplumber.open(file_path) as pdf:
for page in pdf.pages:
page_text = page.extract_text()
if page_text:
full_text += page_text + "n"
return full_text
逻辑非常简单:打开PDF文件,逐页读取文本,最后将所有内容拼接成一个字符串。
二、从Word文档中读取文本内容
DOCX格式就是常见的Word文档,处理这种文件推荐使用python-docx库。同样,先安装:
pip install python-docx
使用Document打开文件后,不仅可以读取段落文本,还能提取表格中的内容。来看代码示例:
from docx import Document
def read_from_word(file_path):
doc = Document(file_path)
content = []
# 读取段落
for para in doc.paragraphs:
t = para.text.strip()
if t:
content.append(t)
# 读取表格内容
for table in doc.tables:
for row in table.rows:
for cell in row.cells:
t = cell.text.strip()
if t:
content.append(t)
return "n".join(content)
表格内容的读取常被新手忽略,但在实际项目中表格数据往往非常关键,务必不要遗漏。
三、从网页中爬取并读取文本内容
除了本地文件,互联网上的资料也是一个庞大的知识库。如何高效提取网页内容?推荐使用trafilatura库,它能自动过滤广告、导航栏等干扰元素,只保留核心正文。安装命令:
pip install trafilatura
配合requests库请求网页,再通过trafilatura提取纯净文本。代码如下:
import requests
import trafilatura
def get_webpage_text(url):
# 请求网页
headers = {"User-Agent":"Mozilla/5.0"}
resp = requests.get(url, headers=headers, timeout=10)
resp.encoding = "utf-8"
# 自动提取纯净正文(剔除广告导航)
raw = trafilatura.extract(resp.text)
return raw if raw else "提取失败"
User-Agent设置非常重要,如果不配置,请求可能会被服务器拦截。同时,建议设置timeout参数,避免请求长时间等待。
四、构建基于网页的在线知识库RAG系统
仅仅学会读取还不够,我们需要将获取的内容实际应用起来。结合之前介绍的BGE-small模型和FAISS向量库,可以构建一个基于网页的在线RAG系统。
在编写代码之前,先安装所需的依赖库:
pip install faiss-cpu sentence
接下来编写完整的检索测试代码。与之前教程相比,最大的变化是将knowledge数组从手动输入改为从网页自动拉取并分块处理:
from sentence_transformers import SentenceTransformer
import faiss
import numpy as np
import requests
import trafilatura
# 加载一整段文本
def get_webpage_text(url):
headers = {"User-Agent":"Mozilla/5.0"}
resp = requests.get(url, headers=headers, timeout=10)
resp.encoding = "utf-8"
raw = trafilatura.extract(resp.text)
return raw if raw else "提取失败"
# 读取一整段文本,并把换行符换成句号
url = "https://www.nhsa.gov.cn/art/2025/12/25/art_14_19130.html"
raw_text = get_webpage_text(url)
# 自动把一段文字切成多段
def split_text(text, max_len=50):
sentences = text.split("。") # 按句号分割
chunks = []
current = ""
for sen in sentences:
sen = sen.strip()
if not sen:
continue
sen += "。" # 加回去句号,让语义完整
if len(current) <= max_len:
current += sen
else:
if current:
chunks.append(current.strip())
current = sen
if current:
chunks.append(current.strip())
return chunks
# 自动分块
knowledge = split_text(raw_text)
# 加载本地已有的模型
embed_model = SentenceTransformer("./bge-small-zh-v1.5", device="cpu")
# 生成向量(把知识库向量化)
vectors = embed_model.encode(knowledge)
# 构建 FAISS 索引
index = faiss.IndexFlatL2(vectors.shape[1])
index.add(np.array(vectors).astype("float32"))
# RAG 检索
def rag(question):
print("n 问题:" + question)
q_vec = embed_model.encode([question])
D, I = index.search(np.array(q_vec).astype("float32"), 1)
best = knowledge[I[0][0]]
answer = best.split(":")[-1]
print(" 答案:" + answer)
print("-" * 50)
# 运行
if __name__ == "__main__":
print("=== 本地智能 RAG 系统:问什么答什么 ===")
while True:
q = input("n请输入问题(q退出):")
if q.lower() == "q":
break
rag(q)
运行程序后,依次输入“GS1码是什么?”“GS1编码是什么?”“GS1码有什么作用?”,输出结果如下:
=== 本地智能 RAG 系统:问什么答什么 ===
请输入问题(q退出):GS1码是什么?
问题:GS1码是什么?
答案:国际 GS1 编码体系。GS1码在药品追溯体系中的应用。在药品追溯中,GS1码通常由数字、字母和符号组成,常见载体为二维码格式。
--------------------------------------------------
请输入问题(q退出):GS1编码是什么?
问题:GS1编码是什么?
答案:最后一种就是国际 GS1 编码(Global Standard 1,即全球统一编码标识系统)GS1编码载体为二维码,多见于进口药品。
--------------------------------------------------
请输入问题(q退出):GS1码有什么作用?
问题:GS1码有什么作用?
答案:采集GS1码的准备工作。在我国医药市场上,吉利德、安进、辉瑞、渤健、强生等公司的部分或全部药品采用了GS1码作为药品追溯码,大部分医疗器械也都使用GS1码制进行追溯。
--------------------------------------------------
从输出日志来看,回答基本准确。这表明通过BGE-small和FAISS的组合,成功实现了对网页内容的在线检索。整个流程其实并不复杂,核心就是利用trafilatura提取正文、BGE-small进行向量化、FAISS构建索引并检索,三步即可完成。
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
跨境物流AI Agent感知决策全链路自动化技术拆解
2026年,跨境物流领域正迎来一场根本性变革——从“被动记录”全面迈向“主动执行”,AI智能体正在重塑整个行业格局。 你可能已经深有体会:每天一到岗,光是后台处理货件创建、物流追踪等重复操作,就要耗费数小时之久。行业调研数据显示,超过60%的运营人员每天至少花费2小时在这些机械性劳动上,而手动操作引
天学会AI应用开发第十二课:从PDF、Word和网页构建RAG
上一篇文章介绍了如何从TXT文件中读取文本内容,但在日常办公场景中,纯文本文件的使用频率并不高。更常见的需求是处理PDF、Word等文档格式,同时还需要从网页中提取知识信息。 因此,本篇文章将重点讲解如何从PDF、Word以及网页中提取内容,并将其应用于RAG(检索增强生成)系统。 一、从PDF文件
Hy3+WorkBuddy组合国产顶级Agent附完整提示词
五个 Case 跑完,总结一下整体体验。工具使用能力:能不能自己开网页、找信息、标出处。规划能力:能不能把多约束需求拆成可执行步骤。长程执行能力:跨多步任务时会不会丢状态。复杂推理能力:能不能先推导、再写代码、再执行验证。WorkBuddy+Hy3 的表现完全符合预期。趁着 WorkBuddy 里的
AI Agent是什么?一文理解大语言模型、记忆、技能、工具、MCP、工作流与上下文
智能体并非单一模型,而是由大语言模型、记忆、工具、工作流等模块协同构成的自主系统。它通过理解目标、检索记忆、调用工具、构建上下文、推理决策,并基于反馈闭环持续迭代,最终自主完成复杂任务。
DeepSeek决定自研芯片打造人工智能全新算力芯脏
被“逼”出来的第三条路。 一直以模型技术见长的DeepSeek,这次在算力供应链上迈出了让所有人侧目的一步。 2026年7月7日,路透社援引三位知情人士消息,DeepSeek正在悄然开发自有AI芯片。值得玩味的是,这颗芯片的定位非常精准——专攻推理,不涉足训练。消息人士称,项目大约启动于一年前,目前
- 热门数据榜
相关攻略
2026-07-11 16:50
2026-07-11 16:50
2026-07-11 16:50
2026-07-11 16:28
2026-07-11 16:28
2026-07-11 14:38
2026-07-11 14:38
2026-07-11 14:38
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程

