正则表达式根据文章的目录结构把整篇文章剖析成字典格式

文章目录

  • 根据章节目录把文章拆分成字典
    • 摘要
      • 实现基础
    • 效果
    • 代码
      • 扩展
    • 代码解读
      • 核心代码
      • 递归拆分多级目录

根据章节目录把文章拆分成字典

摘要

 开展文本分析时,文章的章节目录是重要内容。在对不同文章比较时,章节标题往往是重要信息,用户通常有根据标题拿到对应文本内容的需求,比如有如下需求:

  • 把一整篇文章,按照树形结构展开;
  • 获得文章的目录;

实现基础

 本文基于正则匹配实现,要求文章的有形如第一章 博主文笔真好、第一节 读者点赞
这样规范且固定的标题结构。

效果

如下图所示,展示了将一篇文章,根据目录结构拆分成字典的格式。字典的键是标题,值是内容。若是多级标题,则会以递归方式创造嵌套字典。
在这里插入图片描述

代码

import re
from pprint import pprintdata = open('data.txt').read()level = '章节' # 请把文章的章节列在这里,比如篇章节def cut(content, value):data = re.findall(f"(第[一二三四五六七八九十]+{value}.*)\n*([\s\S]*?)(?=第[一二三四五六七八九十]+{value}|\Z)",content,)d = {}idx = level.index(value)for title, content in data:d[title] = content.strip() if idx == len(level) - 1 else cut(content, level[idx + 1])return dres = cut(data, '章')
pprint(res)

在代码的同级目录下创建data.txt文件
下面是data.txt的文件内容:

标题 《彼岸之花》
第一章 迷雾重重
第一节 密林相遇
在茂密的雨林中,探险家李昂首次遇见了神秘女子艾莉娅。他们因为共同的目标——寻找传说中的神秘花朵“彼岸之花”而结伴同行。
第二节 险象环生的征程
李昂和艾莉娅在探险途中遭遇了种种险境,他们不仅要面对恶劣的自然环境,还要与危险的野生动物搏斗。两人在这段旅程中建立了深厚的友谊。
第三节 揭开迷雾
经过艰苦的跋涉,李昂和艾莉娅终于找到了神秘花朵“彼岸之花”所在的位置。然而,花朵却被一道无形的屏障守护着,让他们无法靠近。
第二章 命运的抉择
第一节 神秘力量的诱惑
李昂和艾莉娅在探索过程中发现,“彼岸之花”拥有改变命运的力量。艾莉娅想要利用这股力量改变自己的命运,而李昂则持怀疑态度。
第二节 分道扬镳
因为对力量的追求和信念的差异,李昂和艾莉娅产生了分歧。最终,艾莉娅独自去寻找“彼岸之花”,而李昂则决定返回文明世界。
第三节 重逢与释怀
李昂在离开前与艾莉娅重逢。他们经过一番交谈,终于放下了彼此间的误会与隔阂,重新建立了信任。他们意识到,真正的力量来自于内心的勇敢与善良。
第三章 勇往直前
第一节 挑战自我
为了获得“彼岸之花”,李昂和艾莉娅必须挑战自己的极限。他们不仅要克服内心的恐惧,还要面对未知的危险。在这个过程中,他们逐渐成长并变得更加坚强。
第二节 团结一致
在挑战过程中,李昂和艾莉娅逐渐认识到彼此的重要性。他们开始团结一致,互相扶持,共同面对困难。这种团队精神让他们逐渐接近目标。
第三节 绽放彼岸之花
经过艰苦的努力和无数次的尝试,李昂和艾莉娅终于成功地采摘到了“彼岸之花”。花朵绽放的瞬间,他们感受到了来自内心的喜悦和满足。这段旅程让他们明白了生命的真谛和勇敢追求梦想的重要性。

运行代码后便可得到如下输出结果:
程序结果生成的字典如下所示:

{'第一章 迷雾重重': {'第一节 密林相遇': '在茂密的雨林中,探险家李昂首次遇见了神秘女子艾莉娅。他们因为共同的目标——寻找传说中的神秘花朵“彼岸之花”而结伴同行。','第三节 揭开迷雾': '经过艰苦的跋涉,李昂和艾莉娅终于找到了神秘花朵“彼岸之花”所在的位置。然而,花朵却被一道无形的屏障守护着,让他们无法靠近。','第二节 险象环生的征程': '李昂和艾莉娅在探险途中遭遇了种种险境,他们不仅要面对恶劣的自然环境,还要与危险的野生动物搏斗。两人在这段旅程中建立了深厚的友谊。'},'第三章 勇往直前': {'第一节 挑战自我': '为了获得“彼岸之花”,李昂和艾莉娅必须挑战自己的极限。他们不仅要克服内心的恐惧,还要面对未知的危险。在这个过程中,他们逐渐成长并变得更加坚强。','第三节 绽放彼岸之花': '经过艰苦的努力和无数次的尝试,李昂和艾莉娅终于成功地采摘到了“彼岸之花”。花朵绽放的瞬间,他们感受到了来自内心的喜悦和满足。这段旅程让他们明白了生命的真谛和勇敢追求梦想的重要性。','第二节 团结一致': '在挑战过程中,李昂和艾莉娅逐渐认识到彼此的重要性。他们开始团结一致,互相扶持,共同面对困难。这种团队精神让他们逐渐接近目标。'},'第二章 命运的抉择': {'第一节 神秘力量的诱惑': '李昂和艾莉娅在探索过程中发现,“彼岸之花”拥有改变命运的力量。艾莉娅想要利用这股力量改变自己的命运,而李昂则持怀疑态度。','第三节 重逢与释怀': '李昂在离开前与艾莉娅重逢。他们经过一番交谈,终于放下了彼此间的误会与隔阂,重新建立了信任。他们意识到,真正的力量来自于内心的勇敢与善良。','第二节 分道扬镳': '因为对力量的追求和信念的差异,李昂和艾莉娅产生了分歧。最终,艾莉娅独自去寻找“彼岸之花”,而李昂则决定返回文明世界。'}}

扩展

若你的标题结构是其他格式的,本代码无法运行,。
若你的章节目录不同,你只需修改下述正则表达式:
f"(第[一二三四五六七八九十]+{value}.*)\n*([\s\S]*?)(?=第[一二三四五六七八九十]+{value}|\Z)"

比如你的章节目录是:

  • 第1章 第1节
    正则表达式修改成:
    f"(第\d+{value}.*)\n*([\s\S]*?)(?=第\d+{value}|\Z)"

代码解读

核心代码

如下是一个只拆分的代码,希望这个小案例能够帮助你理解。

import re
from pprint import pprintdata = open('data.txt').read()
value = "章"
res = re.findall(f"(第[一二三四五六七八九十]+{value}.*)\n*([\s\S]*?)(?=第[一二三四五六七八九十]+{value}|\Z)",data,
)
d = {}
for title, content in res:d[title] = contentpprint(d)

你也可以把value = “章”,换成value = "节"去体会这个区别

如下述结果所示,只从文章中拆分出章:

/usr/bin/python3 /Users/jshen/Documents/git/python/basic/string/examples/章节匹配/test.py 
{'第一章 迷雾重重': '第一节 密林相遇\n''在茂密的雨林中,探险家李昂首次遇见了神秘女子艾莉娅。他们因为共同的目标——寻找传说中的神秘花朵“彼岸之花”而结伴同行。\n''第二节 险象环生的征程\n''李昂和艾莉娅在探险途中遭遇了种种险境,他们不仅要面对恶劣的自然环境,还要与危险的野生动物搏斗。两人在这段旅程中建立了深厚的友谊。\n''第三节 揭开迷雾\n''经过艰苦的跋涉,李昂和艾莉娅终于找到了神秘花朵“彼岸之花”所在的位置。然而,花朵却被一道无形的屏障守护着,让他们无法靠近。\n','第三章 勇往直前': '第一节 挑战自我\n''为了获得“彼岸之花”,李昂和艾莉娅必须挑战自己的极限。他们不仅要克服内心的恐惧,还要面对未知的危险。在这个过程中,他们逐渐成长并变得更加坚强。\n''第二节 团结一致\n''在挑战过程中,李昂和艾莉娅逐渐认识到彼此的重要性。他们开始团结一致,互相扶持,共同面对困难。这种团队精神让他们逐渐接近目标。\n''第三节 绽放彼岸之花\n''经过艰苦的努力和无数次的尝试,李昂和艾莉娅终于成功地采摘到了“彼岸之花”。花朵绽放的瞬间,他们感受到了来自内心的喜悦和满足。这段旅程让他们明白了生命的真谛和勇敢追求梦想的重要性。','第二章 命运的抉择': '第一节 神秘力量的诱惑\n''李昂和艾莉娅在探索过程中发现,“彼岸之花”拥有改变命运的力量。艾莉娅想要利用这股力量改变自己的命运,而李昂则持怀疑态度。\n''第二节 分道扬镳\n''因为对力量的追求和信念的差异,李昂和艾莉娅产生了分歧。最终,艾莉娅独自去寻找“彼岸之花”,而李昂则决定返回文明世界。\n''第三节 重逢与释怀\n''李昂在离开前与艾莉娅重逢。他们经过一番交谈,终于放下了彼此间的误会与隔阂,重新建立了信任。他们意识到,真正的力量来自于内心的勇敢与善良。\n'}Process finished with exit code 0

递归拆分多级目录

cut是一个递归函数,它的返回值是{ 标题 : cut(内容) }。对上一级递归生成的内容递归调用cut函数生成嵌套字典。
使用level = '章节',level 代表文章所有的章节结构名。

level = "章节"
idx = level.index(value)
...
idx == len(level) - 1 # 退出递归条件

当递归到达最后一级目录结构,达到递归出口无需继续调用cut函数。

希望上述针对递归粗浅的描述能帮助到你理解!

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

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

相关文章

L类型网络

案例背景 宿舍只提供WIFI上网,网页拨号认证,但是我有其他设备需要上网,只有一个有线网络,这就难办了 路由器,笔记本电脑,其他设备(手机), 路由器在此用于网络有线转无线的功能, 笔记本电脑在此用于,网络认证和网络代理的功能 电脑连上WIFI, 设置 最后,进行手机上操作,连上…

ABB直流调速器维修DCS550 DCS400 DCS402.0200

德国ABB维修包括:直流调速器维修,伺服驱动器维修,变频器维修,伺服放大器维修,工控机维修,触摸屏维修 ABB直流调速器故障分析: 1、脱扣电流变压器过热引起的直流电机。 发现问题的根源在夏季常见或室内条…

微信服务号换订阅号全程攻略

服务号和订阅号有什么区别?服务号转为订阅号有哪些作用?首先我们要看一下服务号和订阅号的主要区别。1、服务号推送的消息没有折叠,消息出现在聊天列表中,会像收到消息一样有提醒。而订阅号推送的消息是折叠的,“订阅号…

书-顺序查找某个数字p153

#include<stdio.h> int main(){int a[10]{12,13,14,15,16,17,18,19,20,1};int i ;for( i0;i<9;i)if (a[i]15)break; //这里a【i】1要加括号&#xff0c;不要加分号if(i>9)printf("没找到你所需要的数字\n");elseprintf("找到了目标数字&#xff0…

牛客周赛 Round 22(C、D题解)

C、小红的数组构造&#xff08;思维&#xff09; 一、题目要求 链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 题目描述 小红想让你构造一个长度为 n 的数组&#xff0c;满足以下三个条件&#xff1a; 1. 该数组最大值不超过 k。 2. 该数…

.NET core 搭建一个跨平台的 Web Service

以前搭建的webservice 都是基于.NET fromwork的&#xff0c;我们知道.NET fromwork是非跨平台的&#xff0c;只能部署在iis上&#xff0c;今天教大家用.NET core搭建一个可跨平台的Web Service 新建一个.net core空项目 给项目起一个名字 选一个.net框架&#xff0c;我这里选…

强大的音频编辑器 Metadatics直装 for mac

Metadatics是一款Mac上的音频元数据编辑器&#xff0c;功能强大且高级。它支持批量编辑最常见的音频文件类型&#xff0c;包括MP3、M4A、AIFF、WAV、FLAC、APE、OGG、WMA等。它可以从在线资源中查找元数据&#xff0c;根据元数据重命名文件&#xff0c;或使用众多内置函数之一来…

mysqldump --set-gtid-purged参数详解

在开启了GTID模式的数据库&#xff0c;使用mysqldump进行部分数据备份的时候&#xff0c;经常会遇到如下警告 Warning: A partial dump from a server that has GTIDs will by default include the GTIDs of all transactions, even those that changed suppressed parts of t…

什么是 web 组态?web 组态与传统组态的区别是什么?

组态软件是一种用于控制和监控各种设备的软件&#xff0c;也是指在自动控制系统监控层一级的软件平台和开发环境。这类软件实际上也是一种通过灵活的组态方式&#xff0c;为用户提供快速构建工业自动控制系统监控功能的、通用层次的软件工具。通常用于工业控制&#xff0c;自动…

你知道如何画时间轴吗?

时间轴的英文是time axis。贯穿四维空间的一条线&#xff0c;是虚数轴&#xff0c;时间轴上一段距离表示时间 。&#xff08;源自“百度百科”&#xff09; 时间轴&#xff1a;通过互联网技术&#xff0c;依据时间顺序&#xff0c;把一方面或多方面的事件串联起来&#xff0c;…

【NLP】RAG 应用中的调优策略

​ 检索增强生成应用程序的调优策略 没有一种放之四海而皆准的算法能够最好地解决所有问题。 本文通过数据科学家的视角审视检索增强生成&#xff08;RAG&#xff09;管道。它讨论了您可以尝试提高 RAG 管道性能的潜在“超参数”。与深度学习中的实验类似&#xff0c;例如&am…

Pika:AIGC新秀,视频生成产业或迎来GPT时刻

今天分享的AIGC系列深度研究报告&#xff1a;《Pika&#xff1a;AIGC新秀&#xff0c;视频生成产业或迎来GPT时刻》。 &#xff08;报告出品方&#xff1a;中泰证券&#xff09; 报告共计&#xff1a;11页 Pika&#xff1a;专注Text to Video生成场景&#xff0c;支持3D和动漫…