一、从PDF文件读取文本PDF是一种常用的文档格式常用于只读的通知文件或者电子版书籍。Python提供了多种三方库用来解析PDF文件其中pdfplumber较常用。使用Python代码读取PDF文件内容前要先在命令行执行下面的pip安装命令pip install pdfplumber然后调用pdfplumber的open方法打开指定文件即可逐页读取文档内容并拼接为文本字符串。读取PDF文件的代码例子如下所示import pdfplumberdef 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二、从WORD文件读取文本DOCX格式的WORD文件也是常用的文档格式常用于可读可写的办公文档编写。Python提供了多种三方库用来解析DOCX文件其中python-docx较常用。使用Python代码读取DOCX文件内容前要先在命令行执行下面的pip安装命令pip install python-docx然后通过python-docx的Document工具打开指定文件即可逐页读取文档内容并拼接为文本字符串。读取DOCX文件的代码例子如下所示from docx import Documentdef 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)三、爬取网页读取文本除了以PDF和DOCX为代表的本地文档之外开发者还经常在网络上爬取网页资料作为在线知识库。Python提供了多种三方库用来解析HTML网页其中trafilatura较常用。使用Python代码读取HTML网页内容前要先在命令行执行下面的pip安装命令pip install trafilatura接着调用requests库的get方法从指定网址获取应答信息然后通过trafilatura的extract方法从应答信息中解析文本。读取网页内容的代码例子如下所示import requestsimport trafilaturadef get_webpage_text(url):# 请求网页headers {“User-Agent”:“Mozilla/5.0”}resp requests.get(url, headersheaders, timeout10)resp.encoding “utf-8”# 自动提取纯净正文剔除广告导航 raw trafilatura.extract(resp.text) return raw if raw else 提取失败四、打造基于网页的在线知识库RAG接下来结合之前介绍的BGE-small与FAISS通过解析网页实现在线RAG的检索功能。在编写Python代码前要先在命令行执行下面的pip安装命令pip install faiss-cpu sentence然后编写下面的Python检索测试代码与之前教程的代码相比仅仅把knowledge数组改成从网页获取并分块from sentence_transformers import SentenceTransformerimport faissimport numpy as npimport requestsimport trafilatura加载一整段文本def get_webpage_text(url):# 请求网页headers {“User-Agent”:“Mozilla/5.0”}resp requests.get(url, headersheaders, timeout10)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_len50):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])# 从 FAISS 检索对应的知识D, I index.search(np.array(q_vec).astype(“float32”), 1)best knowledge[I[0][0]]answer best.split(“”)[-1]print( 答案 answer)print(“-” * 50)运行ifname “main”:print(“ 本地智能 RAG 系统问什么答什么 ”)while True:q input(“\n请输入问题q退出”)if q.lower() “q”:breakrag(q)运行上面的Python代码根据提示先后输入三个问题“GS1码是什么”、“GS1编码是什么”、“GS1码有什么作用”输出日志结果如下 本地智能 RAG 系统问什么答什么 请输入问题q退出GS1码是什么问题GS1码是什么答案国际 GS1 编码体系。GS1码在药品追溯体系中的应用。在药品追溯中GS1码通常由数字、字母和符号组成常见载体为二维码格式。请输入问题q退出GS1编码是什么问题GS1编码是什么答案最后一种就是国际 GS1 编码Global Standard 1即全球统一编码标识系统GS1编码载体为二维码多见于进口药品。请输入问题q退出GS1码有什么作用问题GS1码有什么作用答案采集GS1码的准备工作。在我国医药市场上吉利德、安进、辉瑞、渤健、强生等公司的部分或全部药品采用了GS1码作为药品追溯码大部分医疗器械也都使用GS1码制进行追溯