书籍切片提取制作SQLite数据库检索方案之一

news/2026/1/22 17:40:15/文章来源:https://www.cnblogs.com/igaoyuan/p/19518427

书籍切片提取制作SQLite数据库检索方案之一

步骤

  1. epub转换为html格式
  2. 用Python识别html分类提取

片段的结构:

  1. 病症标题:<p><strong>第一节 感冒</strong></p>
  2. 定义部分:没有标题,直接跟在病症标题后面
  3. 各小节:以【】包裹的标题,如【病因病机】、【诊断与鉴别诊断】等

用代码适应这种结构:

import re
import pandas as pd
from bs4 import BeautifulSoup
import warnings
warnings.filterwarnings('ignore')def extract_disease_data(html_content):"""从HTML内容中提取病症数据"""soup = BeautifulSoup(html_content, 'html.parser')# 找到所有的段落paragraphs = soup.find_all('p')diseases = []current_disease = Nonecurrent_section = Nonebuffer = []for i, p in enumerate(paragraphs):# 获取段落文本,保留换行text = p.get_text(strip=False)# 检查是否是病症标题(如"第一节 感冒")# 同时处理 <strong>第一节 感冒</strong> 这种格式if p.find('strong'):strong_text = p.find('strong').get_text(strip=True)title_match = re.match(r'^第.*节\s+(.*)$', strong_text.strip())else:title_match = re.match(r'^第.*节\s+(.*)$', text.strip())if title_match:# 保存上一个病症if current_disease:# 处理缓冲区内容if buffer and current_section:buffer_text = '\n'.join(buffer).strip()if buffer_text:current_disease[current_section] = buffer_textdiseases.append(current_disease)# 开始新的病症disease_name = title_match.group(1)current_disease = {'病症名称': disease_name,'定义': '','病因病机': '','诊断与鉴别诊断': '','辨证论治': '','辨治备要': '','临证要点': '','预防调护': '','小结': '','名医经验': '','古籍摘要': '','文献推介': ''}current_section = '定义'  # 定义部分没有明确标题,直接跟在病症名称后面buffer = []continue# 检查是否是各个部分的标题(使用【】包裹)section_patterns = [(r'【病因病机】', '病因病机'),(r'【诊断与鉴别诊断】', '诊断与鉴别诊断'),(r'【辨证论治】', '辨证论治'),(r'【辨治备要】', '辨治备要'),(r'【临证要点】', '临证要点'),(r'【预防调护】', '预防调护'),(r'【小结】', '小结'),(r'【名医经验】', '名医经验'),(r'【古籍摘要】', '古籍摘要'),(r'【文献推介】', '文献推介')]section_found = Falsefor pattern, section_name in section_patterns:if pattern in text:if buffer and current_section and current_disease:buffer_text = '\n'.join(buffer).strip()if buffer_text:current_disease[current_section] = buffer_textcurrent_section = section_namebuffer = []section_found = True# 移除标题文本,只保留内容部分text = text.replace(pattern, '').strip()if text:  # 如果标题后面还有内容buffer.append(text)breakif section_found:continue# 跳过空行和只包含span标签的内容if not text.strip() or re.match(r'^\s*$', text):continue# 跳过图片标签if p.find('img'):continue# 跳过纯字体格式标签(如<font>)if p.find('font') and not p.get_text(strip=True):continue# 将内容添加到缓冲区if current_section and text.strip():# 清理文本中的多余空格,但保留换行cleaned_text = re.sub(r'\s+', ' ', text.strip())# 保留有序列表格式(如1.、2.等)if re.match(r'^\d+[\..]', cleaned_text):buffer.append(cleaned_text)else:buffer.append(cleaned_text)# 处理最后一个病症if current_disease:if buffer and current_section:buffer_text = '\n'.join(buffer).strip()if buffer_text:current_disease[current_section] = buffer_textdiseases.append(current_disease)return diseasesdef clean_html_content(html_content):"""清理HTML内容,移除不需要的标签"""# 移除script和style标签html_content = re.sub(r'<script[^>]*>.*?</script>', '', html_content, flags=re.DOTALL)html_content = re.sub(r'<style[^>]*>.*?</style>', '', html_content, flags=re.DOTALL)# 保留段落格式html_content = html_content.replace('<br>', '\n')html_content = html_content.replace('<br/>', '\n')html_content = html_content.replace('<br />', '\n')return html_contentdef main():# 读取HTML文件with open('中医内科学.html', 'r', encoding='utf-8') as f:html_content = f.read()# 清理HTML内容html_content = clean_html_content(html_content)# 提取病症数据diseases = extract_disease_data(html_content)# 创建DataFramedf = pd.DataFrame(diseases)# 重新排列列顺序(可以根据需要调整)column_order = ['病症名称', '定义', '病因病机', '诊断与鉴别诊断', '辨证论治', '辨治备要', '临证要点', '预防调护','小结', '名医经验', '古籍摘要', '文献推介']# 只保留实际存在的列existing_columns = [col for col in column_order if col in df.columns]df = df[existing_columns]# 保存到Exceloutput_file = '中医内科学_病症数据.xlsx'df.to_excel(output_file, index=False, engine='openpyxl')print(f"数据提取完成!共提取了 {len(diseases)} 个病症信息")print(f"数据已保存到: {output_file}")# 显示前几行数据print("\n前5个病症的信息:")print(df.head().to_string())# 显示列信息print(f"\n提取的列:{list(df.columns)}")if __name__ == "__main__":main()

主要修改点:

  1. 病症标题识别:改进了对<strong>第一节 感冒</strong>这种格式的支持
  2. 章节标题识别:使用正则表达式匹配【】包裹的标题
  3. 字段设置:根据您提供的片段,设置了完整的字段列表
  4. 内容清理:添加了对图片标签、字体格式标签的过滤
  5. 动态列处理:根据实际提取的列进行DataFrame构建

使用说明:

  1. 将HTML文件保存为中医内科学.html
  2. 运行此脚本
  3. 提取的数据将保存为中医内科学_病症数据.xlsx

如果您的书籍结构有变化,可以调整section_patterns列表来添加或修改章节标题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1201169.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中医执医技能考试培训机构哪家强?

中医执医技能考试培训机构哪家强?导语:随着中医药在健康中国战略中的地位日益凸显,中医执业医师资格考试,尤其是实践技能环节,已成为衡量中医临床人才专业水准的关键标尺。近年来,考生规模持续增长,在职备考比例…

宏智树 AI:拆解毕业论文写作密码,让学术创作少走弯路

对于高校学子而言&#xff0c;毕业论文写作往往是一场 “摸着石头过河” 的旅程 —— 选题怕空泛、文献理不清、实证不会做、格式改到崩&#xff0c;每一步都暗藏门槛。作为深耕论文写作科普的教育博主&#xff0c;今天就带大家解锁一款能精准破解这些难题的工具 ——宏智树 AI…

oleacc.dll文件丢失找不到问题 免费下载方法分享

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

oleaut32.dll文件丢失找不到 免费下载方法分享

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

C14-2026.1.21

1. 远程执行漏洞原理: 后台服务器将用户可控的、未经严格过滤的输入,直接或间接地拼接到操作系统的命令中并执行 LEVEL:LOWLEVEL:MEDIUNLEVEL:HIGH 分析代码 | 管道符号后有空格,输入命令时删除空格,即可实现绕过2…

专业电动冲浪板品牌有哪些?这个行业正迎“黄金发展期”

水上运动领域里,传统冲浪往往依赖海浪,对场地和时机要求颇高。然而,电动冲浪板的出现打破了这一局限,它让冲浪不再完全受制于自然海浪,无论有无海浪,玩家都能尽情享受冲浪的乐趣。如今,专业电动冲浪板品牌有哪些…

冻鱼

https://xinyoudui.com/ac/contest/74500D282000A6307D6541/problem/43709 话说这是人类能够写出来的题面吗? 首先把中间的连续非零段剥出来。 发现从 \(s \to t\) 的路径结构为,从 \(s \to 1 \to n \to t\),对于 \…

永磁同步电机,可做异步电机,单轴的电流调节器适用于力矩控制,发电控制,独特的MTPA控制+弱磁...

永磁同步电机&#xff0c;可做异步电机&#xff0c;单轴的电流调节器适用于力矩控制&#xff0c;发电控制&#xff0c;独特的MTPA控制弱磁控制&#xff0c;以及电流路径规划&#xff0c;实现全速范围内的力矩调节&#xff0c;适用于轨道交通领域以及电动汽车领域。 程序化的svp…

Java AI 开发核心:工程化先行,而非仅接入大模型

在AI技术席卷各行各业的当下&#xff0c;不少Java技术团队投身于AI应用开发浪潮。很多团队认为&#xff0c;接入通义千问等主流大模型、调用API完成基础交互&#xff0c;便算搭建好AI应用。但实际开发中&#xff0c;代码耦合、成本失控、服务不稳定等问题接踵而至&#xff0c;让…

国内电动冲浪板公司推荐,千万别错过!

国内电动冲浪板公司推荐,千万别错过! 在国内,水上运动的热度正持续攀升,电动冲浪板作为其中极具魅力的运动装备,受到了众多爱好者的关注。天科机电有限公司(GOYOJO)就是在这个领域中表现出色的企业,为水上运动…

探秘 AgentRun|基于 Serverless 的 AI Agent 沙箱工程化之路

阿里云函数计算 AgentRun 全新发布后,我们整理了“探秘 AgentRun”系列文章,本系列将梳理企业落地Agent 常见难题,给出具体解法,助力 Agentic AI 快速走进生产级环境。欢迎加入“函数计算 AgentRun 客户群”与我们…

opengl32.dll文件丢失找不到 免费下载方法分享

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

gitlab内网配置https调整加载异常

gitlab内网配置https调整加载异常pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&q…

Java企业入局AI:核心在于落地,框架需“授人以渔”

当人工智能从技术概念走向产业落地&#xff0c;Java作为企业级开发的主流语言&#xff0c;如何衔接AI能力成为众多技术团队的核心命题。不同于单纯的算法研究&#xff0c;Java企业的AI探索&#xff0c;重点从来不是从零搭建大模型&#xff0c;而是如何将AI能力与现有业务系统深…

行李包装机选购新视角:2026年实力厂家质量揭秘,摇臂式缠绕包装机/自动缠绕包装机/全自动封箱机,行李包装机工厂联系电话

随着全球物流行业的快速发展,行李包装机作为提升运输效率、保障货物安全的核心设备,其市场需求持续攀升。然而,市场产品良莠不齐,采购方在技术适配性、稳定性及售后服务等维度面临决策难题。本文基于公开数据与行业…

2026 年靠谱的一键式闪测仪,专业售后闪测仪厂家推荐及选购

2026 年靠谱的一键式闪测仪,专业售后闪测仪厂家推荐及选购 在当今制造业蓬勃发展的大背景下,工业生产对测量检测环节的要求日益提高。闪测仪作为这一环节的关键设备,其性能的优劣直接影响着产品质量和生产效率。一款…

闪测仪在工业测量的重要地位与迪赛福品牌

闪测仪在工业测量的重要地位与迪赛福品牌 在工业测量领域,闪测仪(又称一键式影像测量仪)正以其高效、精准的检测能力,成为现代智能制造的关键装备。它能有效解决传统测量方式在效率、精度等方面的诸多问题,为工业…

2026年AI摄影培训机构TOP5优选指南:五大优质机构助力视觉职业成长,涵盖摄影培训、短视频培训、视频剪辑培训

随着AI技术重塑影像行业,商业摄影、短视频创作、AI修图等复合型人才缺口持续扩大,预计2025年相关领域人才缺口规模将突破220万。面对市场对“传统摄影+AI技能”融合型人才的迫切需求,如何选择一家兼具教学实力、就业…

packager.dll文件丢失找不到 免费下载方法分享

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

pcacli.dll文件丢失找不到 免费下载方法分享

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…