草庐IT

用Python摘抄《大道争锋》中的诗句

ShadyPi 2023-04-11 原文

文章目录

前言

随便记一下写这个程序的过程,对新学到的东西做个笔记。

一直很喜欢《大道争锋》这本小说,尤其是误道者文字间的古风韵味以及时不时来一首颇具仙风道骨的诗歌。于是在二刷之后有了将这些诗歌做个摘抄的想法,奈何《大道争锋》全文700万字,要再刷一次去摘抄诗句的工作量不小,所以我就有了用Python帮我摘抄的想法。

数据分析

首先,程序的判定非常死板,所以我们的原文资源一定要好,不要有什么奇奇怪怪的字符或者标点符号有问题。

之后我们观摩一下目标数据:诗句的特征。


我们机智地发现,所有诗句都是由书中人吟诵出来的,所以诗句都是由双引号括起来的。同时,诗句的字数都很工整,均为五个字五个字或者七个字七个字。

(本来还想加一个判断押韵,连pypinyin都装好了,但是押韵的判断并没有想象中的简单,而之前的判断条件对于小说文本来说已经足够严格,漏网之鱼很少,所以就没有加)

开始编程

打开文件

首先把文本文件打开,由于是中文,使用了UTF-8编码,所以不能直接打开,否则只能读出一堆乱码。

f=open('DDZF.txt','r',encoding='utf8')

其中,'DDZF.txt'是要打开的文件名称,'r'表示只读,encoding='utf8'则是文件对应的解码。

更多的读写模式指令详见下图:

筛选出所有人物对话

打开了文件之后,还需要把文件的内容读进来,因为整个文本对于计算机来说比较小,所以这里我选择了f.read()直接把所有文本读入,之后还会有f.readline()f.readlines()等文件读入函数。

主要就是判断引号括起来的部分,比较简单,用一个flag变量就解决了,要做笔记的主要是对汉字的判断:

def is_Chinese(ch):
    return '\u4e00'<=ch<='\u9fff'

至于符号的判断,Python实际有更简洁的写法,我用的则是Python版的C艹写法,在后面会有改进。

另外,为了方便判断,我将所有符号都替换为了'*',在最后输出的时候会重新还原。

代码:

#筛选出人物说的话,替换其中标点
fuhao=[',','。','?','!']
def is_fuhao(ch):
    for fh in fuhao:
        if ch==fh:
            return True
def is_Chinese(ch):
    return '\u4e00'<=ch<='\u9fff'
txt=[]
tmp=[]
flag=0
for ch in f.read():
    if ch=='“':
        flag=1
    if is_Chinese(ch) and flag==1:
        tmp.append(ch)
    if is_fuhao(ch) and flag==1:
        tmp.append('*')
    if ch=='”':
        flag=0
        txt.append("".join(tmp))
        tmp=[]
f.close()

存入的时候,我把tmp从列表转换为了字符串,用到的语句为"".join(),其中双引号括起来的部分为拼接字符串时,列表中各个元素之间的间隔符号,由于这里是中文拼接,不需要间隔,直接为空就行了。括号里的内容则是要转化的列表名称。

其实这是个小失误,应该直接把tmp以列表的形式appendtxt里,将它转化为字符串其实是多此一举了。

筛选出字数符合要求的句子

前面也说了,因为是正常的小说文本,用字数来筛选已经足够严格,我们只需要判断这些人物说的话里有没有五个字五个字一组或者七个字七个字一组的就已经足够把诗句筛选出来了。

类似的,用f=open('out.txt','w')打开/创建一个输出文件,然后用f.write()写入文件。这里就可以看到,为了将字符串里的'*'修正回来,我先转成了列表,修改完再转回字符串,就是因为之前的“多此一举”。

#处理出字数符合要求的句子
def reload(s):
    flag=0
    for i in range(len(s)):
        if s[i]=='*':
            if flag:
                s[i]='。'
            else :
                s[i]=','
            flag=1-flag
    return "".join(s)
f=open('out.txt','w')
for sen in txt:
    lenth=0
    poem=1
    cntfh=0
    for ch in sen:
        lenth+=1
        if ch=='*':
            cntfh+=1
            if lenth!=8 and lenth!=6:
                poem=0
                break
            lenth=0
    if poem and (cntfh==4 or cntfh==6 or cntfh==8):
        f.write(reload(list(sen)))
        f.write('\n')
f.close()

代码运行效果

他人以鼎劝莫争,我却以鼎淬元真。凡心妄演天机道,一番算计空付樽。
摩天弄云霭,食气吞仙斋。浩然朔罡风,决荡天门开。
足踏仙云游八荒,银河星汉渡险隘。若要问那长生果,有缘可来补天斋。
混沌辟生无贵贱,岂叫神人坐金殿。若得一口仙灵气,敢上九天争日月。
我本凡人磨岁寿,困拘庐中不知愁。忽闻仙人阁上坐,蓬莱山外寻天楼。
七星束阳袍,百炼火中烧。莫道形不伤,人劫最难逃。
长河奔流入海西,东来水分清浊气。漫渡急浪覆云履,脚踏罡斗握玄机。
法象竞日出,乾坤定宏图。今日脱劫去,飞身上天庐。
萤流举轻舞,星汉去寂心。横江照夜火,万里烛幽冥。
二十年来藏剑锋,忽起长歌神鬼惊。大道苍茫斩歧路,笑看沧海听雷音。
百炼功成道家果,乾坤自在手中握。日月轮转星流火,瞒天夺寿劫法螺。万浪千礁齐踏破,长生无悔笑蹉跎。
清风扶我上九天,此去浮云织彩间。由来逍遥是神仙,一梦回首已千年。
恩师飞升前,曾让我带话与你。说今时不同往日,能放手便放手吧。
阴阳两气参性命,精元藏胸演五行。神意巍然攀山岭,擎天柱里炼罡英。九霄云中鸣剑音,扫荡妖氛涤气净。心有冲天龙虎意,倒海翻江还天青。
双月映卿水,倾城何独怨。对影如不见,画镜照寂怜。
花愁岁月催色残,谁人听怨道哀怜。漫起香阵蔽星汉,罗带抟风改天颜。
灵珠牝牡化界方,一十六法俱收藏。采撷清气度真法,反演星斗会天象。
杀便杀了吧,把尸体留着。峨山派若有人来,交给他们就是了。
乾坤两分气化真,五龙五行炼法身。身若天柱立昆仑,心盘海山镇劫尘。今朝神屋诛天妖,他日天外斩鬼神。
今日乘风去,舍身了尘扰。明朝得金丸,再入神仙道。
龙头于北饮苍澜,龙尾在南戏寒山。乾坤一动风云变,造化无情天道玄。
龙渊倒悬潮升烟,大滔横流三千年。唤得清澜洗日月,长空一相水齐天。
不堕轮回入大千,心传一道在人间。愿起一剑杀万劫,无情换作有情天。
驱鬼惑人为下道,呼风唤雨为上道。养生调元为小道,长生逍遥为大道。
此身入道五百载,志气长存星斗移。当啸长歌舒胸臆,云霄一气动天地。
少年轻负剑,玄崖寻仙楼。一朝得闻道,畅然天地游。平生舒快意,狂笔写春秋。长生非我愿,只解心中忧。
仰吞初阳火,炼得天魔身。倒卷地灵气,相成阴中神。
一播阳火转朱丹,点破玄冥赤火鸾。红尘解炼去凡身,金阳吐灿开霄汉。
霍真人成就法相,实为我溟沧兴事。以恩师之见,那法相当作何称。
守得灵心见月明,四海潮冲蜕鳍鳞。神通本是石人授,玉磬敲动龙门音。
十万心界量玄关,一剑横光丈千秋。只手拨得天惊弦,搅彻周天乱星汉。
人间本来多磨难,百砺心劫方圆满。采得一风生玄翼,拂去尘身踏仙关。
独上万山巅,孤扣大道钟。千波留不住,淡看云匆匆。衣角拭顽心,尘落显真容。任他风雷雨,鹤徊九云中。
方才我已试过了,这岛上煞气极重。会消磨灵机,可无法吐纳调息。
本是草莽一生灵,石人解玄方辨情。身散气化心未休,一脉当传万载名。
虚空落神精,化气散微尘。功成六转境,百劫不磨身。嘘呵天地气,一力定乾坤。
小舟渡幼鸿,扶翼入云岸。寒山乌云暖,执剑掌幽谭。苍海青天外,鸣声阵阵来。蓦然轻风雨,云破雁飞还。
举手撑天岳,足量九地宽。含烟定四海,吐气动万山。
青桐山下日月藏,斩却前身渡玄航。龙血炼气万化生,神目一开转阴阳。
十二重关载道传,紫气胎里种玄元。摘落真花见根果,拭去凡尘天外仙。
在言语之前,可立下法契。你不放心我,我亦不会放心你。
一气鸿濛演乾坤,问道诸寰斩二身。万法不沾神自定,与天同寿洞玄真。
元海凭舟渡灵真,造化为炉炼法身。一气贯通诸天界,乾坤同和演玄神。
拂清宙黯见神空,始知两界此源同。力撼周宇破天壁,终从一元道法宏。
玄波瑶台服灵种,凝光映霄见明空。甘露洗玉含清丹,天河流裳仙影从。
念成虚空照心景,意作金炉筑玄经。一言可定天地法,身举清光兴万灵。
浑中鉴真开神目,气意显冲散龙图。身去诸天问玄法,从此不言大道孤。
正气浩荡人法宏,齐诵道章九洲同。清阳悬空临绝顶,明照天下万景从。
我听你方才言论,似论及栖霞仙子。观你们行途匆匆,又是要往哪里去。
会炼诸空渡世人,名称太上大道尊。莫道青天无始终,造化门中神常存。
昔闻上法曾授命,才得天火炼真金。长歌一曲问世情,只斩凡身不斩心。
两世持存含灵珠,万般磨炼后人书。洗去心垢抛旧身,天人自此无殊途。
避绝万劫心在前,虚空常渡化未先。往来过去皆落意,神横诸世气倾天。
万劫渡磨入世身,诸常洗却旧顽真。道本无名神自主,莲台座上又一人。
无心亦无定,无常亦无名。神空一意转,不变是顽精。
尘心不觉难自悟,辟开人间通天路。惟愿众生皆长生,穹霄万古执道主。
万顷仙波去,千湖返灵光。玄机天地生,乾坤书道章。

共筛选出57首诗,其中6只巧合而成的漏网之鱼,准确率有90%,由于数据量较小,可以采用人工剔除的办法,得到最终结果:

他人以鼎劝莫争,我却以鼎淬元真。凡心妄演天机道,一番算计空付樽。
摩天弄云霭,食气吞仙斋。浩然朔罡风,决荡天门开。
足踏仙云游八荒,银河星汉渡险隘。若要问那长生果,有缘可来补天斋。
混沌辟生无贵贱,岂叫神人坐金殿。若得一口仙灵气,敢上九天争日月。
我本凡人磨岁寿,困拘庐中不知愁。忽闻仙人阁上坐,蓬莱山外寻天楼。
七星束阳袍,百炼火中烧。莫道形不伤,人劫最难逃。
长河奔流入海西,东来水分清浊气。漫渡急浪覆云履,脚踏罡斗握玄机。
法象竞日出,乾坤定宏图。今日脱劫去,飞身上天庐。
萤流举轻舞,星汉去寂心。横江照夜火,万里烛幽冥。
二十年来藏剑锋,忽起长歌神鬼惊。大道苍茫斩歧路,笑看沧海听雷音。
百炼功成道家果,乾坤自在手中握。日月轮转星流火,瞒天夺寿劫法螺。万浪千礁齐踏破,长生无悔笑蹉跎。
清风扶我上九天,此去浮云织彩间。由来逍遥是神仙,一梦回首已千年。
阴阳两气参性命,精元藏胸演五行。神意巍然攀山岭,擎天柱里炼罡英。九霄云中鸣剑音,扫荡妖氛涤气净。心有冲天龙虎意,倒海翻江还天青。
双月映卿水,倾城何独怨。对影如不见,画镜照寂怜。
花愁岁月催色残,谁人听怨道哀怜。漫起香阵蔽星汉,罗带抟风改天颜。
灵珠牝牡化界方,一十六法俱收藏。采撷清气度真法,反演星斗会天象。
乾坤两分气化真,五龙五行炼法身。身若天柱立昆仑,心盘海山镇劫尘。今朝神屋诛天妖,他日天外斩鬼神。
今日乘风去,舍身了尘扰。明朝得金丸,再入神仙道。
龙头于北饮苍澜,龙尾在南戏寒山。乾坤一动风云变,造化无情天道玄。
龙渊倒悬潮升烟,大滔横流三千年。唤得清澜洗日月,长空一相水齐天。
不堕轮回入大千,心传一道在人间。愿起一剑杀万劫,无情换作有情天。
驱鬼惑人为下道,呼风唤雨为上道。养生调元为小道,长生逍遥为大道。
此身入道五百载,志气长存星斗移。当啸长歌舒胸臆,云霄一气动天地。
少年轻负剑,玄崖寻仙楼。一朝得闻道,畅然天地游。平生舒快意,狂笔写春秋。长生非我愿,只解心中忧。
仰吞初阳火,炼得天魔身。倒卷地灵气,相成阴中神。
一播阳火转朱丹,点破玄冥赤火鸾。红尘解炼去凡身,金阳吐灿开霄汉。
守得灵心见月明,四海潮冲蜕鳍鳞。神通本是石人授,玉磬敲动龙门音。
十万心界量玄关,一剑横光丈千秋。只手拨得天惊弦,搅彻周天乱星汉。
人间本来多磨难,百砺心劫方圆满。采得一风生玄翼,拂去尘身踏仙关。
独上万山巅,孤扣大道钟。千波留不住,淡看云匆匆。衣角拭顽心,尘落显真容。任他风雷雨,鹤徊九云中。
本是草莽一生灵,石人解玄方辨情。身散气化心未休,一脉当传万载名。
虚空落神精,化气散微尘。功成六转境,百劫不磨身。嘘呵天地气,一力定乾坤。
小舟渡幼鸿,扶翼入云岸。寒山乌云暖,执剑掌幽谭。苍海青天外,鸣声阵阵来。蓦然轻风雨,云破雁飞还。
举手撑天岳,足量九地宽。含烟定四海,吐气动万山。
青桐山下日月藏,斩却前身渡玄航。龙血炼气万化生,神目一开转阴阳。
十二重关载道传,紫气胎里种玄元。摘落真花见根果,拭去凡尘天外仙。
一气鸿濛演乾坤,问道诸寰斩二身。万法不沾神自定,与天同寿洞玄真。
元海凭舟渡灵真,造化为炉炼法身。一气贯通诸天界,乾坤同和演玄神。
拂清宙黯见神空,始知两界此源同。力撼周宇破天壁,终从一元道法宏。
玄波瑶台服灵种,凝光映霄见明空。甘露洗玉含清丹,天河流裳仙影从。
念成虚空照心景,意作金炉筑玄经。一言可定天地法,身举清光兴万灵。
浑中鉴真开神目,气意显冲散龙图。身去诸天问玄法,从此不言大道孤。
正气浩荡人法宏,齐诵道章九洲同。清阳悬空临绝顶,明照天下万景从。
会炼诸空渡世人,名称太上大道尊。莫道青天无始终,造化门中神常存。
昔闻上法曾授命,才得天火炼真金。长歌一曲问世情,只斩凡身不斩心。
两世持存含灵珠,万般磨炼后人书。洗去心垢抛旧身,天人自此无殊途。
避绝万劫心在前,虚空常渡化未先。往来过去皆落意,神横诸世气倾天。
万劫渡磨入世身,诸常洗却旧顽真。道本无名神自主,莲台座上又一人。
无心亦无定,无常亦无名。神空一意转,不变是顽精。
尘心不觉难自悟,辟开人间通天路。惟愿众生皆长生,穹霄万古执道主。
万顷仙波去,千湖返灵光。玄机天地生,乾坤书道章。

这或许是全网最全《大道争锋》诗集?[doge]

有关用Python摘抄《大道争锋》中的诗句的更多相关文章

  1. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  2. ruby - 其他文件中的 Rake 任务 - 2

    我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时

  3. ruby-on-rails - Ruby net/ldap 模块中的内存泄漏 - 2

    作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代

  4. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  5. ruby-on-rails - Rails 3 中的多个路由文件 - 2

    Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题

  6. ruby-on-rails - Rails - 一个 View 中的多个模型 - 2

    我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何

  7. ruby-on-rails - Rails 3.2.1 中 ActionMailer 中的未定义方法 'default_content_type=' - 2

    我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer

  8. ruby-on-rails - Rails 应用程序中的 Rails : How are you using application_controller. rb 是新手吗? - 2

    刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr

  9. ruby-on-rails - form_for 中不在模型中的自定义字段 - 2

    我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢

  10. ruby - rspec 需要 .rspec 文件中的 spec_helper - 2

    我注意到像bundler这样的项目在每个specfile中执行requirespec_helper我还注意到rspec使用选项--require,它允许您在引导rspec时要求一个文件。您还可以将其添加到.rspec文件中,因此只要您运行不带参数的rspec就会添加它。使用上述方法有什么缺点可以解释为什么像bundler这样的项目选择在每个规范文件中都需要spec_helper吗? 最佳答案 我不在Bundler上工作,所以我不能直接谈论他们的做法。并非所有项目都checkin.rspec文件。原因是这个文件,通常按照当前的惯例,只

随机推荐