找回密码
 立即注册
首页 业界区 业界 【Rag实用分享】小白也能看懂的文档解析和分割教程 ...

【Rag实用分享】小白也能看懂的文档解析和分割教程

拓炊羡 2025-8-2 17:00:08

1. 我们要做什么?

我们要做一件“魔术”一样的事情:把一份份“看不懂”的文档,变成电脑能理解、能提问、能回答的格式。我们会教电脑怎么“读文件”“找重点”“分段落”。
就像我们把一本厚厚的书,按小故事一个个剪下来,这样以后看、问、找都方便!
2. 我们需要的工具(环境准备)

就像做蛋糕前要准备面粉、鸡蛋,我们也要先装好工具!
先装 Python(电脑必须装过 Python 才能继续)
接下来打开你的终端或命令行,依次输入这些命令:
  1. # 创建虚拟环境(可选)
  2. python -m venv env
  3. source env/bin/activate  # Windows上是 env\Scripts\activate
  4. # 安装我们需要的工具包
  5. pip install langchain
  6. pip install unstructured
  7. pip install beautifulsoup4
  8. pip install pymupdf
  9. pip install openpyxl
  10. pip install python-docx
  11. pip install python-pptx
  12. pip install modelscope
复制代码
3. 让我们教电脑认识“文档”

电脑不像人,不认识 Word、PDF 这些文件,它只懂“文本”和“结构”这两样东西。
我们要先教它一个“概念”——Document(文档对象)。
  1. from langchain.schema import Document
  2. doc = Document(
  3.     page_content="我是正文内容",
  4.     metadata={"source": "我的文件路径.pdf"}
  5. )
  6. print(doc.page_content)  # 打印正文
  7. print(doc.metadata)      # 打印元数据(比如文件名、页数)
复制代码
这就像我们告诉电脑:“这是第几页的内容,它是来自哪里,它的原话是这些。”

4. 解析 HTML 网页

有两种方法:

  • 方法一:网页链接直接读(推荐)
  • 方法二:本地 HTML 文件
  1. from langchain_community.document_loaders import WebBaseLoader,BSHTMLLoader
  2. # 方法一:从网址抓网页内容
  3. loader = WebBaseLoader(
  4.     "https://flask.palletsprojects.com/en/stable/tutorial/layout/")
  5. docs = loader.load()
  6. for doc in docs:
  7.     print(doc.page_content,doc.metadata)
  8. # 方法二:读取本地html文件
  9. loader = BSHTMLLoader("student-grades.html")
  10. docs = loader.load()
  11. for doc in docs:
  12.     print(doc.page_content,doc.metadata)
复制代码
我们可以用 BeautifulSoup 自己抓代码块:
  1. from bs4 import BeautifulSoup
  2. with open("student-grades.html", "r", encoding="utf-8") as f:
  3.     html = f.read()
  4. soup = BeautifulSoup(html, "html.parser")
  5. code_blocks = soup.find_all("td", class_="py-3 px-4")
  6. for block in code_blocks:
  7.     print(block.get_text())
复制代码
5. 解析 PDF 文件

PDF 是最常见的办公文档。我们用两个方法来解析它。
方法一:简单读取文字内容
  1. from langchain.document_loaders import PyMuPDFLoader
  2. loader = PyMuPDFLoader("analysisReport.pdf")
  3. docs = loader.load()
  4. for doc in docs:
  5.     print(doc.page_content)
复制代码
方法二:高级自定义——提取表格

安装依赖
pip install pymupdf pandas openpyxl
  1. import fitz  # PyMuPDF
  2. import pandas as pd
  3. # 打开PDF文件
  4. doc = fitz.open("analysisReport.pdf")
  5. # 创建一个ExcelWriter对象,用于写入多个工作表
  6. with pd.ExcelWriter("output_tables.xlsx", engine="openpyxl") as writer:
  7.     page_num = 0
  8.     for page in doc.pages():
  9.         page_num += 1
  10.         tables = page.find_tables()
  11.         for table_index, table in enumerate(tables, start=1):
  12.             df = table.to_pandas()
  13.             print(df)
  14.             # 写入Excel,每个表格作为一个sheet,命名方式为 Page_1_Table_1 等
  15.             sheet_name = f"Page_{page_num}_Table_{table_index}"
  16.             df.to_excel(writer, sheet_name=sheet_name, index=False)
  17.             print(f"已写入:{sheet_name}")
复制代码
6. Word、PPT、Excel 怎么解析?

Word
  1. from docx import Document as DocxDocument
  2. doc = DocxDocument("analysisReport.docx")
  3. print("文本段落:")
  4. for para in doc.paragraphs:
  5.     print(para.text)
  6. print("表格:")
  7. for table in doc.tables:
  8.     for row in table.rows:
  9.         print([cell.text for cell in row.cells])
复制代码
PPT
  1. import os
  2. import uuid
  3. from pptx import Presentation
  4. ppt = Presentation("demo.pptx")
  5. # Create a directory to save images if it doesn't exist
  6. output_dir = "ppt_images"
  7. os.makedirs(output_dir, exist_ok=True)
  8. for slide_id, slide in enumerate(ppt.slides):
  9.     print(f"\n--- 第{slide_id+1}页 ---")
  10.     for shape in slide.shapes:
  11.         if shape.has_text_frame:
  12.             print("[Text]", shape.text)
  13.         elif shape.shape_type == 13:  # picture
  14.             print("[Image] 有图片,保存")
  15.             try:
  16.                 # Get the image
  17.                 image = shape.image
  18.                 # Generate a unique filename using UUID
  19.                 unique_id = uuid.uuid4()
  20.                 image_filename = os.path.join(output_dir, f"slide_{slide_id + 1}_image_{unique_id}.{image.ext}")
  21.                 # Save the image
  22.                 with open(image_filename, 'wb') as img_file:
  23.                     img_file.write(image.blob)
  24.                 print(f"[Image] Saved: {image_filename}")
  25.             except Exception as e:
  26.                 print(f"Error saving image: {e}")
  27.         elif shape.has_table:
  28.             print("[Table]")
  29.             for row in shape.table.rows:
  30.                 print([cell.text for cell in row.cells])
复制代码

Excel
  1. from openpyxl import load_workbook
  2. wb = load_workbook("fake.xlsx")
  3. sheet = wb.active
  4. print("按行打印单元格:")
  5. for row in sheet.iter_rows():
  6.     print([cell.value for cell in row])
  7. print("合并单元格:")
  8. for merged_range in sheet.merged_cells.ranges:
  9.     print("合并: ", merged_range)
复制代码

7. 把文档“切”成小段落(分块)

方法一:递归文本分块(最常用)
  1. from langchain.text_splitter import RecursiveCharacterTextSplitter
  2. text_splitter = RecursiveCharacterTextSplitter(
  3.     chunk_size=128,
  4.     chunk_overlap=30,
  5.     separators=["\n", "。", "!", "?"]
  6. )
  7. docs_split = text_splitter.split_documents(docs)
  8. for i, doc in enumerate(docs_split[:3]):
  9.     print(f"第{i+1}块:\n{doc.page_content}\n")
复制代码
方法二:语义分块(智能一点)
  1. from langchain.embeddings import HuggingFaceEmbeddings
  2. from langchain.text_splitter import SemanticChunker
  3. embedding = HuggingFaceEmbeddings(model_name="BAAI/bge-small-zh")
  4. chunker = SemanticChunker(embedding)
  5. docs_split = chunker.split_documents(docs)
复制代码
方法三:模型分块(阿里的模型)
  1. from modelscope.pipelines import pipeline
  2. splitter = pipeline(
  3.     task="text-segmentation",
  4.     model="damo/nlp_corom_sentence-segmentation_chinese-base"
  5. )
  6. result = splitter("这是第一句话。这是第二句话。这是第三句话。")
  7. print(result)
复制代码
8. 总结一下!

工具名用途安装命令langchain框架,封装 documentpip install langchainunstructured自动识别多种文档pip install unstructuredPyMuPDF解析 PDFpip install pymupdfbeautifulsoup4HTML解析pip install beautifulsoup4python-docxWord处理pip install python-docxpython-pptxPPT处理pip install python-pptxopenpyxlExcel处理pip install openpyxlmodelscope使用 AI 模型pip install modelscope
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册