记录正则提取文章

收到了个word版的电子书,需要拆分并转换为md存储到数据库中,便于搜索,记录下用正则提取文章的过程
word原文中有目录,可提取出目录后,在正文中根据目录来正则提取文章

正则的多行匹配

在匹配大量文章的时候,需要用到多行匹配

  • 使.匹配\n:要多行匹配,那么需要加上re.S和re.M标志. 加上re.S后, .将会匹配换行符,默认.不会匹配换行符
str = "a23b\na34b"
re.findall(r"a(\d+)b.+a(\d+)b", str)
#输出[]
#因为不能处理str中间有\n换行的情况
re.findall(r"a(\d+)b.+a(\d+)b", str, re.S)
#s输出[('23', '34')]
  • 加上re.M后, ^ 标志将会匹配每一行,默 认 和 标志将会匹配每一行,默认^和 标志将会匹配每一行,默只会匹配第一行.
str = "a23b\na34b"
re.findall(r"^a(\d+)b", str)
#输出['23']
re.findall(r"^a(\d+)b", str, re.M)
#输出['23', '34']

word转md

开始用的是pandoc这个神器来完成docx转换为md https://pandoc.org/installing.html 下载zip文件,解压缩并加入到环境变量中
通过命令转换 pandoc -f docx -t markdown --extract-media ./ -o 原版1.md 原版.docx
对于py中,可以用mammoth,可以把word中的图片也保存下来。它是一个用于将Word文档转换为HTML的模块,它支持在Python、JavaScript、Java、 .Net等平 台使用。
而markdownify则是将HTML转换为Markdown文档的模块。
https://pypi.org/project/markdownify/

import time
import mammoth
from markdownify import markdownify# 转存 Word 文档内的图片
def convert_img(image):with image.open() as image_bytes:file_suffix = image.content_type.split("/")[1]path_file = "./img/{}.{}".format(str(time.time()),file_suffix)with open(path_file, 'wb') as f:f.write(image_bytes.read())return {"src":path_file}# 读取 Word 文件
with open(r"原版.docx" ,"rb") as docx_file:# 转化 Word 文档为 HTMLresult = mammoth.convert_to_html(docx_file,convert_image=mammoth.images.img_element(convert_img))# 获取 HTML 内容html = result.value# 转化 HTML 为 Markdownmd = markdownify(html,heading_style="ATX")with open("./docx_to_html.html",'w',encoding='utf-8') as html_file,open("./docx_to_md.md","w",encoding='utf-8') as md_file:html_file.write(html)md_file.write(md)messages = result.messages

手动复制md文件中的目录部分到ml.md

正则提取目录

在这里插入图片描述

import re
import csvwith open('ml.md', 'r', encoding='utf-8') as source_file:content = source_file.read()pattern = r'^\[([\u4e00-\u9fa5].*?[\u4e00-\u9fa5].*?)[\:,\s].*?\].*?\)$'# 使用re.findall找到所有匹配项
matches = re.findall(pattern, content, re.M)with open('output.csv', 'w', newline='', encoding='utf-8') as csvfile:writer = csv.writer(csvfile)# 将每个匹配的单词作为一行写入CSV文件for match in matches:writer.writerow([match])

保存为csv文件
在这里插入图片描述

正则提取文章正文

import re
import jsondir = "文章"
types = ['药方','风寒暑湿燥火辨治','风']
articles = ['荆防达表汤','荆防汤','荆防颗粒','荆防败毒散','桑菊饮','防风汤','牵正散','玉真散','天麻钩藤饮','镇肝熄风汤','羚角钩藤汤','大定风珠','补肝汤']
# 写入到md文件
def write_md(name, content):with open(f"{dir}/{name}.md", "w", encoding="utf-8") as f:f.write(content)# 正则找到匹配的文章,在嗨正则里不可以,但是在py里是能用的
def match_article(name):pattern = re.compile('^(#\s+'+name+'.*?)^#\s+[\u4e00-\u9fa5]+', re.MULTILINE | re.DOTALL)items = pattern.search(content).group(1)return itemswith open('docx_to_md.md', "r", encoding="utf-8") as f:content = f.read()for i in articles:print(f"{i}")z_content = match_article(i)filename = '-'.join(types)+'-'+iwrite_md(filename, z_content)

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

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

相关文章

互联网时代的语义网知识表示框架---OWL和OWL2 Fragments

文章目录 RDF和RDFSOWL的重要词汇RDF和RDFS 前面介绍了RDF和RDFS,通过RDF (S)可以表示一些简单的语义,但在更复杂的场景下, RDF (S)语义的表达能力显得太弱,还缺少常用的特征: 对于局部值域的属性定义。RDF (S)中通过rdfs:range定义了属性的值域,该值域是全局性的…

llm-universe | 四. 构建RAG应用

构建RAG应用 一.将LLM 接入 LangChain二.构建检索问答链1.加载向量数据库2.创建一个 LLM3.构建检索问答链4.检索问答链效果测试5.添加历史对话的记忆功能5.1 记忆(Memory)5.2 对话检索链(ConversationalRetrievalChain) 三. 部署知…

ts可选参数

可选参数 参数后加个问号,代表这个参数是可选的 function bdd(x:number,y?:number){return x y } console.log(bdd(2,3)) function bdd(x:number,y?:number){return x y } console.log(bdd(2))

从0到1构建自己的短链接系统

1. 短链系统简介 1.1 短链系统的定义与用途 短链系统是指将一个较长的URL地址,通过特定的算法生成一个较短的、具备唯一性的URL地址。这种系统广泛应用于社交网络、短信、邮件营销等场景,它能帮助用户在字数受限的情况下分享链接,并且还具有…

Jenkins 创建流水线任务

Jenkins是一个流行的持续集成(Continuous Integration,CI)工具。 Jenkins 创建任务 选择“流水线”类型,该类型的优点是定制化程度非常高 (可选)添加“参数化构建” 配置仓库选项(ssh连接、分支)和凭据…

C语言从头学26——函数说明符

一、extern 说明符 我们在阅读C、C底层代码或是MFC代码时,会看经常到 extern 这个符号。对于多文件的项目,源码文件经常会用到其他文件声明的函数。这时,当前文件里面,需要给出外部函数的原型,并用 extern 说明…

上古世纪台服注册账号+下载客户端全方位图文教程

又一款新的MMRPG游戏即将上线啦,游戏名称叫做《上古世纪》游戏采用传统MMO类型游戏的玩法,但是开发商采用了先进的游戏引擎,让玩家们可以享受到极致的视觉体验。同时游戏的背景是建立在大陆分崩离析的基础上。各个部落因为领地的原因纷纷开战…

华为HCIP Datacom H12-821 卷11

1.多选题 OSPF 包括哪些报文类型? A、Link State DD B、Hello C、Link State Request D、Database Description 正确答案: B,C,D 解析: 在 OSPF协议中,报文类型分为:hello、DD、LSR、LSU、LSAck 。所以正确答案是“Hello”、“Database Description”、“Link State Re…

Linux中Vim的安装与配置:从入门到精通

Vim,一个功能强大的文本编辑器,已经成为许多开发者和系统管理员的首选工具。它不仅拥有丰富的功能,而且高度可定制,支持多种编程语言的语法高亮,使得编辑代码变得更加轻松。本文将详细介绍如何在Linux系统中安装Vim&am…

设计模式——责任链

责任链模式是一种行为设计模式,用于将请求的发送者和接收者解耦。在这种模式中,请求通过一条由多个对象组成的链传递,直到有一个对象能够处理该请求为止。每个对象都可以决定是否处理请求以及是否将请求传递给下一个对象。 责任链模式通常在…

螺丝扭断力试验机SJ-12

一、设备简介: 螺丝扭断力试验机用于测试螺丝的耐扭断力。本机将螺丝产品所受到轴向扭转力与反作用力,常用扭力扳手来计量。本机可对产品进行转力测、锁动测试、锁动扭力测试等多种测试方式。 二、设备使用: 1、将螺丝强度扭力试验机底座锁于…

代码随想录-Day41

46. 携带研究材料(第六期模拟笔试) 题目描述 小明是一位科学家,他需要参加一场重要的国际科学大会,以展示自己的最新研究成果。他需要带一些研究材料,但是他的行李箱空间有限。这些研究材料包括实验设备、文献资料和实…

【小学期】总结与启发:项目结构分析及设计原因

项目结构分析及设计原因 项目结构 student_management │ ├── src │ ├── model │ │ ├── Student.java │ │ └── StudentDAO.java │ │ │ ├── view │ │ └── StudentView.java │ │ │ ├── controller │ │ └── S…

Font Awesome 教程

Font Awesome 是一个非常流行的图标字体库,它提供了一套可缩放的矢量图标,可以方便地在网页、应用程序和其他界面设计中使用。下面是一个基础的Font Awesome教程,帮助你快速上手使用这个图标库: ### 1. 引入Font Awesome #### 使…

Mysql数据库学习

1、数据库基本认知 一:数据库分类 关系型数据库:SQL 主要有MySQL,Oracle,Sql Server等,其主要通过表与表之间,行与列之间的关系进行数据的存储。可以通过外键来建立表之间的关联。 非关系型数据库:NoSQL 主要有HB…

分享一个 MySQL 简单快速进行自动备份和还原的脚本和方法

前言 数据备份和还原在信息技术领域中具有非常重要的作用,不论是人为误操作、硬件故障、病毒感染、自然灾害还是其他原因,数据丢失的风险都是存在的。如果没有备份,一旦数据丢失,可能对个人、企业甚至整个组织造成巨大的损失。 …

阻塞IO、非阻塞IO、异步IO的区别

1. 阻塞IO (Blocking IO) 在传统的阻塞IO模型中,示例中的 serverSocket.accept(),这是一个阻塞调用,意味着调用线程将被挂起直到一个连接请求到达。这是典型的阻塞行为。 import java.io.IOException; import java.net.ServerSocket; impor…

ARM-V9 RME(Realm Management Extension)系统架构之系统初始化流程

安全之安全(security)博客目录导读 目录 一、重置取消 二、应用处理单元(PE)初始启动 三、MSD初始化 四、GPT初始化 五、初始启动退出(由所有应用PE执行) 六、RMSD初始化 七、PE进入丢失上下文的低功耗状态 本博客提供了R…

uniapp H5端使用百度地图

1、登录百度地图开放平台 https://lbsyun.baidu.com/(没有账号则先去创建一个百度账号) 2、进入百度地图开放平台控制台(导航栏“控制台”),点击“应用管理”-“我的应用” 3、选择“创建应用”,应用模块选…