一、依赖库总览按功能分类先列全代码中用到的所有库方便你整体梳理功能模块依赖库核心作用文档解析pdfplumber精准解析PDF提取文本块字号粗体位置python-docx (docx)解析Word(.docx)提取段落字号粗体基础数据处理os处理文件路径、识别文件后缀numpy数值计算如字号均值、数组处理pandas结构化数据存储、清洗、分析核心载体聚类/特征处理scikit-learn (sklearn)字号频率聚类KMeans 特征归一化Embedding/语义sentence-transformers生成文本Embedding用于语义切分RAG语义切分langchain提供SemanticChunker按语义切分文本二、逐个库详细讲解1. 文档解析模块1pdfplumber核心作用PDF解析的“瑞士军刀”比PyPDF2、PyMuPDF更精准提取PDF的「布局信息」文本块坐标、字号、字体、粗体是PDF标题识别的核心依赖。代码中的应用对应函数parse_pdf_document核心功能pdfplumber.open()打开PDF文件page.extract_text_blocks()提取带坐标的文本块x0/y0/x1/y1确定位置page.chars遍历每个字符提取字号char[size]和粗体char[fontname]。关键用法示例代码片段importpdfplumberwithpdfplumber.open(test.pdf)aspdf:pagepdf.pages[0]# 获取第1页索引从0开始# 提取文本块带坐标blockspage.extract_text_blocks()# 返回[(x0,y0,x1,y1,text), ...]# 提取字符级字体信息forcharinpage.chars:print(f字符{char[text]}字号{char[size]}字体{char[fontname]})安装方式pip install pdfplumber无兼容问题Python3.7均可。2python-docx代码中导入为docx核心作用专门解析Word文档.docx格式不支持.doc提取段落、字号、粗体等格式信息。代码中的应用对应函数parse_word_document核心功能Document()打开Word文档doc.paragraphs遍历所有段落para.runs遍历段落内的“运行块”Word的格式最小单位提取字号run.font.size.pt和粗体run.bold。关键用法示例代码片段fromdocximportDocument docDocument(test.docx)forparaindoc.paragraphs:textpara.text.strip()ifnottext:continue# 提取段落的字号和粗体forruninpara.runs:font_sizerun.font.size.ptifrun.font.sizeelse12is_boldrun.boldorFalseprint(f文本{text}字号{font_size}粗体{is_bold})安装方式pip install python-docx注意库名是python-docx但代码中导入用import docx。2. 基础数据处理模块1os核心作用Python内置库无需额外安装处理文件路径、识别文件后缀实现“自动区分PDF/Word”。代码中的应用对应函数auto_parse_document核心APIos.path.splitext(file_path)拆分文件路径和后缀如test.pdf→(test, .pdf)file_ext.lower()统一后缀为小写避免.PDF/.Pdf识别错误。关键用法示例importos file_pathyour_document.PDFfile_extos.path.splitext(file_path)[-1].lower()# 输出.pdfiffile_ext.pdf:print(是PDF文件)eliffile_ext.docx:print(是Word文件)2numpy核心作用Python数值计算基础库处理数组、均值/极值计算弥补Python原生列表的数值操作短板。代码中的应用np.mean(char_fonts)计算文本块内所有字符的字号均值避免单个字符字号误差np.round(1)字号保留1位小数统一格式range(len(df))→ 结合numpy生成有序索引。关键用法示例importnumpyasnp font_sizes[12.0,12.2,11.8]mean_sizenp.mean(font_sizes).round(1)# 输出12.0安装方式pip install numpy建议安装1.21版本兼容性更好。3pandas核心作用结构化数据处理的核心载体所有文本块的特征顺序、字号、粗体、文本都存储在DataFrame中方便聚类、筛选、排序。代码中的应用全程依赖核心功能pd.DataFrame(text_blocks)将解析后的文本块转为结构化表格df.sort_values(by[page, position])按阅读顺序排序文本块df.groupby(cluster).agg(...)聚类后统计各簇的字号/粗体均值区分标题/正文df.loc[...]按条件筛选标题/正文块。关键用法示例importpandasaspd# 构造DataFramedata[{order:0,font_size:24,is_bold:True,text:第一章}]dfpd.DataFrame(data)# 按字号分组统计cluster_statsdf.groupby(cluster).agg({font_size:mean}).round(2)安装方式pip install pandas建议和numpy版本匹配避免冲突。3. 聚类/特征处理模块scikit-learn代码中导入为sklearn核心作用提供字号频率聚类的核心算法KMeans和特征归一化工具MinMaxScaler是“标题识别”的算法核心。代码中的应用两个核心组件①MinMaxScaler()特征归一化作用字号12-24、频率0-1、粗体0-1量纲不同归一化到[0,1]避免某特征主导聚类代码scaler.fit_transform(df[[font_size, font_freq, bold_score]])。②KMeans(n_clusters3)聚类算法作用将文本块按“字号频率粗体”聚为3类一级标题/二级标题/正文代码kmeans.fit_predict(df[[font_size_scaled, font_freq_scaled, bold_scaled]])。关键用法示例fromsklearn.clusterimportKMeansfromsklearn.preprocessingimportMinMaxScalerimportpandasaspd# 模拟特征数据datapd.DataFrame({font_size:[24,16,12,24,16,12],font_freq:[0.05,0.1,0.85,0.05,0.1,0.85],bold_score:[1,1,0,1,1,0]})# 归一化scalerMinMaxScaler()data_scaledscaler.fit_transform(data)# KMeans聚类kmeansKMeans(n_clusters3,random_state42)data[cluster]kmeans.fit_predict(data_scaled)print(data)# 输出聚类结果3类分别对应一级标题/二级标题/正文安装方式pip install scikit-learn建议安装1.0版本。4. Embedding/语义模块sentence-transformers核心作用加载预训练的轻量级Embedding模型如all-MiniLM-L6-v2将文本转为向量用于后续的语义切分。代码中的应用对应章节内语义切分环节核心APISentenceTransformer(all-MiniLM-L6-v2)加载模型自动下载约80MB轻量高效model.encode(text)将文本转为768维向量是语义相似度计算的基础。关键用法示例fromsentence_transformersimportSentenceTransformer modelSentenceTransformer(all-MiniLM-L6-v2)# 生成文本Embeddingtext第一章 人工智能概述embeddingmodel.encode(text)print(fEmbedding维度{len(embedding)})# 输出384all-MiniLM-L6-v2是384维安装方式pip install sentence-transformers依赖torch安装时会自动适配无需手动装torch。5. RAG语义切分模块langchain核心作用提供SemanticChunker语义切分器替代基础的字符数切分按文本Embedding的相似度切分保证语义完整。代码中的应用对应章节内语义切分环节核心APISemanticChunker(embed_model, breakpoint_threshold_typepercentile)初始化语义切分器create_documents([text])对章节正文做语义切分返回切分后的文本块。关键用法示例fromlangchain.text_splitterimportSemanticChunkerfromsentence_transformersimportSentenceTransformer embed_modelSentenceTransformer(all-MiniLM-L6-v2)# 初始化语义切分器semantic_splitterSemanticChunker(embed_model,breakpoint_threshold_typepercentile,breakpoint_threshold_amount95)# 切分文本text人工智能AI是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。机器学习是AI的核心包括监督学习、无监督学习等。chunkssemantic_splitter.create_documents([text])forchunkinchunks:print(chunk.page_content)安装方式pip install langchain建议安装0.1版本。三、安装注意事项避坑指南版本兼容性Python版本建议3.8-3.113.12部分库可能兼容不佳核心库版本pandas1.4、scikit-learn1.0、langchain0.1。PDF解析特殊情况加密PDFpdfplumber无法解析需先解密扫描件PDF图片需搭配OCR工具如pytesseract代码需额外扩展。Word解析限制仅支持.docx格式.doc格式需转成.docx后再解析。Embedding模型下载首次运行SentenceTransformer会自动下载模型需保证网络通畅若下载失败可手动从HuggingFace下载。总结核心依赖逻辑文档解析pdfplumber/python-docx→ 数据结构化pandas→ 标题识别sklearn KMeans→ 章节划分 → 语义切分sentence-transformerslangchain关键库不可替代pdfplumberPDF精准解析、sklearn字号频率聚类、langchain语义切分是整个流程的三大核心缺一不可新手优先级先掌握pandas数据处理和sklearn聚类再熟悉文档解析和语义切分逐步拆解学习。