记录正则提取文章

收到了个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.rhkb.cn/news/361717.html

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

相关文章

Power BI 占比函数

1,普通层级结构占比 占比1 DIVIDE([sum_qty], CALCULATE([sum_qty],ALLSELECTED(Item[ITEM_CODE]))) //按照line为一个整理展示数据占比2 SWITCH( true(),ISINSCOPE(Item[ITEM_CODE]),DIVIDE([sum_qty], CALCULATE([sum_qty],ALLSELECTED(Item[ITEM_CODE]))), IS…

石油化工厂为什么要用专业防爆手机?

防爆手机之所以必须使用专业设计的产品,主要是出于安全考虑,以防止在易燃易爆环境中因手机使用不当引发爆炸事故。以下几点详细解释了使用专业化工防爆手机的必要性: 本质安全设计:顶坚专业防爆手机采用了本质安全(本安…

植物大战僵尸杂交版技巧大全(附下载攻略)

《植物大战僵尸杂交版》为策略游戏爱好者带来了全新的挑战和乐趣。如果你是新手玩家,可能会对游戏中的植物和僵尸感到困惑。以下是一些实用的技巧,帮助你快速掌握游戏并享受其中的乐趣。 技巧一:熟悉基本玩法 游戏的基本玩法与原版相似&…

Java学习笔记(多线程):CompetableFuture

本文是自己的学习笔记,主要参考资料如下 https://www.cnblogs.com/dolphin0520/p/3920407.html JavaSE文档 https://blog.csdn.net/ThinkWon/article/details/102508721 1、Overview2、重要参数3、主要方法3.1、创建实例,获取返回值3.2、线程执行顺序相关…

Linux系统安装Lua语言及Lua外部库

安装Lua Lua语言是一种轻量级、高效且可扩展的脚本语言,具有简洁易学的语法和占用资源少的特点。它支持动态类型,提供了丰富的表达式和运算符,同时具备自动垃圾回收机制和跨平台性。Lua语言易于嵌入到其他应用程序中,并可与其他语…

查询DBA_TEMP_FILES报错,删除临时表空间报错ORA-60100

SYMPTOMS 查询DBA_TEMP_FILES报错如下图 ORA-01157: cannotidentify/ock data fle 201 -see DBWR trace fle ORA-01110: data fle 20 1: D:APPADMINISTRATORIORADATA MARTIDATAFILE 01157,00000-"cannotidentify/ock data fle %s -see DBWR trace fle"*Cause: The b…

安卓免费短剧大全v1.0.2/全部无需VIP实时更新全平台短剧

在当今社会,时间成为了许多人最为宝贵的资源。忙碌的工作与繁重的日常事务,常常让我们难以拨出时间沉浸于长篇大幅的影视作品中。对于那些热爱剧情、渴望在生活中点缀一抹戏剧色彩的朋友们而言,这无疑是一种挑战。 然而,随着免费…

高通安卓12-在源码中查找应用的方法

1.通过搜索命令查找app 一般情况下,UI上看到的APP名称会在xml文件里面定义出来,如 搜索名字为WiGig的一个APP 执行命令 sgrep "WiGig" 2>&1|tee 1.log 将所有的搜索到的内容打印到log里面 Log里面会有一段内容 在它的前面是这段内…

尚品汇-(七)

(1)在网关中实现跨域 全局配置类实现 包名:com.atguigu.gmall.gateway.config 创建CorsConfig类 Configuration public class CorsConfig {Beanpublic CorsWebFilter corsWebFilter(){// cors跨域配置对象CorsConfiguration configuration…

操作符详解(上) (C语言)

操作符详解(上) 一. 进制转换1. 二进制2. 二进制的转换 二. 原码 补码 反码三. 操作符的分类四. 结构成员访问操作符1. 结构体的声明2. 结构体成员访问操作符 一. 进制转换 1. 二进制 在学习操作符之前,我们先了解一些2进制、8进制、10进制…

mybatis的SQL打印说明

打印SQL记录子类: org.apache.ibatis.logging.jdbc.PreparedStatementLogger extends BaseJdbcLogger implements InvocationHandler org.apache.ibatis.logging.jdbc.ConnectionLogger extends BaseJdbcLogger implements InvocationHandler org.apache.ibatis.logging.jdbc.…

点云处理实战 PCL求解点云表面曲率

目录 一、什么是曲率 二、曲率计算过程 三、pcl 求解点云局部曲率 四、思考?为何曲率计算会使用协方差矩阵? 五、推荐阅读 一、什么是曲率 曲率是几何学中用来描述曲线或曲面形状变化的一个量。它反映了曲线或曲面的弯曲程度。在不同的上下文中,曲率的定义和计算方式有…

go中的方法 func-----数据类型

本文是java学习者学go种产生的容易记混点的笔记,所以有其他编译语言的基础更好 go的方法有点像js 基础 func main() {fmt.Println("Starting")var p *string new(string)*p "hello world"demo : "demo"fmt.Println(*&demo) //这样既然也…

sys.stdin对象——实现标准输入

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法参考 sys.stdin是一个标准化输入对象,可以连续输入或读入文件所有内容,不结束,不能直接使用。输入完成后&am…

Springboot整合Zookeeper分布式组件实例

一、Zookeeper概述 1.1 Zookeeper的定义 Zookeeper是一个开源的分布式协调服务,主要用于分布式应用程序中的协调管理。它由Apache软件基金会维护,是Hadoop生态系统中的重要成员。Zookeeper提供了一个高效且可靠的分布式锁服务,以及群集管理…

深入探讨C++的高级反射机制(2):写个能用的反射库

在现代软件开发中,反射是一种强大的特性,它可以支持程序在运行时查询和调用对象的属性和方法。 但是在C中,没有内置的反射机制。我们可以通过一些巧妙的技术模拟反射的部分功能。 上一篇文章写了个简单的反射功能,这回完善一下&a…

Java 8 新特性:Lambda表达式让你的代码焕然一新——掌握它,让编程变得轻松又高效!

前言 Java 8 是 Java 发展史上的一次重要里程碑。作为企业级开发语言,它在性能和功能上做了巨大的提升。这其中,Lambda表达式是一个关键的新特性,它为 Java 语言带来了函数式编程的概念。本篇文章将深入探讨Lambda表达式,并结合热…

社区团购小程序开发

在快节奏的现代生活中,人们越来越追求便利与效率。社区团购小程序应运而生,以其独特的优势成为连接社区居民与优质商品的重要桥梁。本文将探讨社区团购小程序的特点、优势以及未来发展趋势,为大家揭示这一新型购物模式的魅力。 社区团购小程序…

React学习(二)——状态(数据)与状态修改

useState 在React中,useState 是一个非常重要的Hook,它允许你在函数组件中添加“状态”(state)。在传统的React类组件中,我们使用this.state来管理和更新组件的状态。然而,在函数组件中,由于它们…

Linux-笔记 全志平台休眠功能初探

前言 全志平台支持的休眠功能主要包括两种模式:休眠模式和待机模式。这两种模式用于降低设备的功耗,并在需要时快速恢复工作状态。由于平台为T113,所以可以很方便的使用RTC来做唤醒源。唤醒源指的是能够让系统从休眠状态恢复到工作状态的信号…