文本小说章回目录及内容提取(Python之list、dict试炼)

本文档展示了使用 Python 和正则表达式从文本小说中提取章回目录和内容的过程。作者通过练习改善了代码,解决了章回内容错位的问题,并提供了多种输出方式。代码中定义了一个名为 `text_extract` 的函数,该函数接收正则表达式和小说文本,返回一个以章回为键、内容为值的字典。示例代码分别用于演示《稻草人》和《骆驼祥子》的章节提取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


Python 官网https://www.python.org/




  自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。
            —— 华罗庚


等风来,不如追风去……



文本小说
章回目录及内容提取
(Python之list、dict试炼)




回目录


想法倒是简单:

  先从小说文本提取章回目录,再依章回目录提取章回内容。前面我有做过 re 提取章回的练习《re提取小说文本章回目录》

  但学“艺”不精的我,代码实现起来就难了。反反复复尝试用列表和字符串方法,最终用字符串拆分方法str.split()以章回目录为阈值拆分小说文本,达到目的。👀👀


Bug代码运行效果截屏图

  CSDN博文审核机制判定因涉及“版权不明”,有bug的运行效果截图,就只好撤下去咯。

在这里插入图片描述

在这里插入图片描述

  非但是第一章没有写入,而且还张冠李戴,章回目录和内容“错位”。😭😭
  被几行代码困久,“得意忘形”得错漏都被“无视”😛😛
  更改代码,缩略试炼文本小说字符串,让代码理“简洁”。😜😜用了两种不同的输出调用工具模块函数。



调用工具模块函数

运行效果
在这里插入图片描述
  CSDN博文审核机制判定因涉及“版权不明”,运行效果截图,这张撤下去,修改试炼文本后重run效果图。

提取工具函数调用方式一——直接打印字典

    # 稻草人试码
    re_s = r'第\w*章\s?\w*' # re小说章回目录提取表达式。
    print(f"{cut_line()}{color(1, 'f_green')}输出文本小说章回内容字典:{color(0)}\n{text_extract(re_s, scarecrow)}{cut_line()}")

    # 骆驼祥子试码
    re_s = r'骆驼祥子\w?' # re小说章回目录提取表达式。
    print(f"{cut_line()}{color(1, 'f_green')}输出文本小说章回内容字典:{color(0)}\n{text_extract(re_s, rickshaw_boy)}{cut_line()}")

在这里插入图片描述

提取工具函数调用方式二——打印字典keys

    # 稻草人试码
    re_s = r'第\w*章\s?\w*' # re小说章回目录提取表达式。
    print(f"{cut_line()}{color(1, 'f_green')}输出文本小说章回内容字典keys:{color(0)}\n{list(text_extract(re_s, scarecrow).keys())}{cut_line()}")

    # 骆驼祥子试码
    re_s = r'骆驼祥子\w?' # re小说章回目录提取表达式。
    print(f"{cut_line()}{color(1, 'f_green')}输出文本小说章回内容字典keys:{color(0)}\n{list(text_extract(re_s, rickshaw_boy).keys())}{cut_line()}")

在这里插入图片描述


提取工具函数调用方式三——按章回打印key -> value

    # 稻草人试码
    re_s = r'第\w*章\s?\w*' # re小说章回目录提取表达式。
    print(f"{cut_line()}{color(1, 'f_green')}输出文本小说章回及内容:{color(0)}\n\n")
    for key,value in text_extract(re_s, scarecrow).items():
        print(f"§ {key} §\n{value}\n{'-'*50}\n\n")

    print(cut_line())

    # 骆驼祥子试码
    re_s = r'骆驼祥子\w?' # re小说章回目录提取表达式。
    print(f"{cut_line()}{color(1, 'f_green')}输出文本小说章回及内容:{color(0)}\n\n")
    
    for key,value in text_extract(re_s, rickshaw_boy).items():
        print(f"§ {key} §\n{value}\n{'-'*50}\n\n")

    print(cut_line())

在这里插入图片描述

CSDN:此运行效果截图涉嫌“版权不明”违规,不宜展示。修改试炼文本,再上图。🤠

在这里插入图片描述


== 工具函数代码 ==


def text_extract(re_s, texts):
    
    '''
    提取.txt文本小说章回目录和章回内容,
    返回以章回目录为key,章回内容为value的字典。

    位置参数:
    re_s -> 章回目录提取re表达式字符串
    texts -> 待处理文本小说字符串
    
    '''
    
    texts_dict = {} # 初始化小说章回字典。
    
    from re import findall # 从re模块加载findall方法。
    contents = findall(re_s, texts) # 提取小说章回目录。

    for k,content in enumerate(contents): # 枚举遍历提取章回目录列表。
        tem = texts.split(content) # 以当前章回目录字符串拆分小说文本。
        if k == 0: # 首章写入字典。
            texts_dict['Start'] = tem[0] # 第一章回前面的内容写入字典。
            texts = tem[1] # 待继续拆分文本赋值。
        else: # 其她章回写入字典。
            texts_dict[contents[k-1]] = tem[0]
            texts = tem[1] # 待继续拆分文本赋值。

    texts_dict[content] = texts # 最后一章写入字典。

    return texts_dict # 返回小说章回内容字典。



回目录


试炼文本


一、《稻草人》

(此“稻草人”章回目录是我随意添加,为炼码成为,非原作者叶老先生原文,望阅者和叶老勿怪。)

稻草人
作者:叶圣陶

第一章 田野里的风景

  第一自然段………

第二章 上帝创造稻草人

  第一自然段………

第三章 稻草人很尽责

  第一自然段………

  第二自然段………

  第三自然段………


二、《骆驼祥子》

骆驼祥子一

    第一章回第一自然段……

    第一章回第二自然段………

    第一章回第三自然段………

骆驼祥子二


    第二章回第一自然段………

    第二章回第二自然段………

    第二章回第三自然段………


骆驼祥子三

    第三章回第一自然段………

    他第三章回第二自然段。

    第三章回第三自然段………

    第三章回第四自然段………


  CSDN博文审核机制判定因涉及“版权不明”,试码文本修改为每段落前面数字,以证“码”之功效。连这样子都仍“版权不明”,只好再改了。😭😭如来“真的”,请自行准备版权文本


回首页

完整 Python 代码(完整代码为最后完成调试后的最终代码,前面贴出的代码是调试出功能就上传的,可能后来已作优化。完整代码中的对应部分,可能比前面贴出的“高级”哦。这是个人记笔记定CSDN博文的习惯所致,敬请谅解。)

  我的解题思路,已融入代码注释,博文中就不再赘述。

(如果从语句注释不能清楚作用,请评论区留言指教和探讨。🤝)

#!/sur/bin/env python
# coding: utf-8

'''
filename: /sdcard/qpython/tem.py
梦幻精灵_cq的炼码场

'''


from mypythontools import TimeSpan, isprime,\
clear, wait, cut_line, color # 从自定,工具模块加载工具。


clear() 
print(f"{cut_line()}{color(1, 'f_green')}{' 自制工具启动成功!':=^32}{color(0)}{cut_line()}")


def text_extract(re_s, texts):
    
    '''
    提取.txt文本小说章回目录和章回内容,
    返回以章回目录为key,章回内容为value的字典。

    位置参数:
    re_s -> 章回目录提取re表达式字符串
    texts -> 待处理文本小说字符串
    
    '''
    
    texts_dict = {} # 初始化小说章回字典。
    
    from re import findall # 从re模块加载findall方法。
    contents = findall(re_s, texts) # 提取小说章回目录。

    for k,content in enumerate(contents): # 枚举遍历提取章回目录列表。
        tem = texts.split(content) # 以当前章回目录字符串拆分小说文本。
        if k == 0: # 首章写入字典。
            texts_dict['Start'] = tem[0] # 第一章回前面的内容写入字典。
            texts = tem[1] # 待继续拆分文本赋值。
        else: # 其她章回写入字典。
            texts_dict[contents[k-1]] = tem[0]
            texts = tem[1] # 待继续拆分文本赋值。

    texts_dict[content] = texts # 最后一章写入字典。

    return texts_dict # 返回小说章回内容字典。


if __name__ == '__main__':

    scarecrow = '''

《稻草人》节选并撰改

''' # 为简洁笔记代码,略去试炼文本,run码请加文本,望君知悉。


    rickshaw_boy = '''

《骆驼祥子》节选

''' # 为简洁笔记代码,略去试炼文本,run码请加文本,望君知悉。


    # 稻草人试码
    re_s = r'第\w*章\s?\w*' # re小说章回目录提取表达式。
    print(f"{cut_line()}{color(1, 'f_green')}输出文本小说章回及内容:{color(0)}\n\n")
    for key,value in text_extract(re_s, scarecrow).items():
        print(f"§ {key} §\n{value}\n{'-'*50}\n\n")

    print(cut_line())

    # 骆驼祥子试码
    re_s = r'骆驼祥子\w?' # re小说章回目录提取表达式。
    print(f"{cut_line()}{color(1, 'f_green')}输出文本小说章回及内容:{color(0)}\n\n")
    
    for key,value in text_extract(re_s, rickshaw_boy).items():
        print(f"§ {key} §\n{value}\n{'-'*50}\n\n")

    print(cut_line())


wait(' Test re txt  ... ')

相关练习笔记:


回目录


My Up and Down
__上一篇:__ 朴实无华的四则混合运算计算器

__下一篇:__ 小炼二维数组

我的HOT博:
推荐条件 点阅破千

回目录


老齐漫画头像

精品文章:

来源:老齐教室


回目录

Python 入门指南【Python 3.6.3】

好文力荐:

CSDN实用技巧博文:


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦幻精灵_cq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值