记录正则提取文章

收到了个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,一经查实,立即删除!

相关文章

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连接、分支)和凭据…

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

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

设计模式——责任链

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

螺丝扭断力试验机SJ-12

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

代码随想录-Day41

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

Mysql数据库学习

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

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

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

uniapp H5端使用百度地图

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

msvcr110.dll丢失的解决方法,亲测有效的几种解决方法

最近,我在启动一个程序时,系统突然弹出一个错误提示,告诉我电脑缺失了一个名为msvcr110.dll的文件。这让我感到非常困惑,因为我之前从未遇到过这样的问题。经过一番搜索和尝试,我总结了5种靠谱的解决方法。下面分享给大…

高效运维:标准化与智能化的运维流程管理实践

高效运维:标准化与智能化的运维流程管理实践 在信息化建设日益深化的今天,运维流程管理已成为企业确保其信息系统稳定、高效运行的关键手段。通过系统化、标准化的运维流程管理,企业能够有效预防系统故障,提升服务质量&#xff0…

React的路由(ReactRouter)-路由导航跳转

1.第一步 // createBrowserRouter路由 RouterProvider组件 import {createBrowserRouter,RouterProvider} from react-router-dom // 创建router实例对象&#xff0c;并配置路由对应关系 const routercreateBrowserRouter([{path:/login,element:<div>我是登录页</di…

vue3-登录小案例(借助ElementPlus+axios)

1.创建一个vue3的项目。 npm create vuelatest 2.引入Elementplus组件库 链接&#xff1a;安装 | Element Plus npm install element-plus --save 在main.js中引入 import ElementPlus from "element-plus";import "element-plus/dist/index.css";ap…

python--序列化模块json与pickle

什么叫序列化&#xff1f; 将原本的字典、列表等内容转换成一个字符串的过程就 叫做序列化。 多用的两个序列化模块&#xff1a;json与pickle json&#xff0c;用于字符串 和 python数据类型间进行转换 pickle&#xff0c;用于python特有的类型 和 python的数据类型间进行转换 …

Scania斯堪尼亚SHL题库综合能力性格测试真题题型解析及面试经验

一、走进Scania斯堪尼亚 Scania是一家成立于1891年的瑞典公司&#xff0c;专注于重型卡车和巴士的制造&#xff0c;以其模块化系统和环保设计闻名。作为全球领先的运输解决方案提供商&#xff0c;Scania不仅提供高质量的车辆&#xff0c;还提供相关服务和融资解决方案。公司秉…

Ruby langchainrb gem and custom configuration for the model setup

题意&#xff1a;Ruby 的 langchainrb gem 以及针对模型设置的自定义配置 问题背景&#xff1a; I am working in a prototype using the gem langchainrb. I am using the module assistant module to implemente a basic RAG architecture. 我正在使用 langchainrb 这个 ge…

实战|记一次java协同办公OA系统源码审计

前言 因为笔者也是代码审计初学者&#xff0c;写得不好的地方请见谅。该文章是以项目实战角度出发&#xff0c;希望能给大家带来启发。 审计过程 审计思路 1、拿到一个项目首先要看它使用了什么技术框架&#xff0c;是使用了ssh框架&#xff0c;还是使用了ssm框架&#xff…

C#基于SkiaSharp实现印章管理(2)

上一篇文章最后提到基于System.Text.Json能够序列化SKColor对象&#xff0c;但是反序列化时却无法解析本地json数据。换成Newtonsoft.Json进行序列化和反序列化也是类似的问题。   通过百度及查看微软的帮助文档&#xff0c;上述情况下需自定义转换类以处理SKColor类型数据的…