记狗屁不通文章生成器代码分析

记狗屁不通文章生成器代码分析

前言

偶然的机会看到了一个根据输入主题生成文章的脚本,读起来感觉好像还马马虎虎,顿时来了兴致,想要分析一波,看了一下作者的介绍,并没有运用什么高大上的语言处理算法,所以我猜应该就是字符串拼凑了。不过到底如何工作的我们还需要分析一下源代码,来看一下效果如何。
在这里插入图片描述

目录结构

BullshitGenerator-master
data.json存储词句
index.html主程序
index.js具体实现过程
readJSON.js读取data.json
readJSON.pypython实现
自动狗屁不通文章生成器.pypython实现主程序

具体分析

两种语言流程基本一致,这里我只分析python脚本。先看下主程序,

if __name__ == "__main__":
 xx = input("请输入文章主题:")
 for x in xx:
     tmp = str()
     while ( len(tmp) < 6000 ) :
         分支 = random.randint(0,100)
         if 分支 < 5:
             tmp += 另起一段()
         elif 分支 < 20 :
             tmp += 来点名人名言()
         else:
             tmp += next(下一句废话)
     tmp = tmp.replace("x",xx)
     print(tmp)

具体流程如下:

Created with Raphaël 2.2.0开始输入文章主题循环次数<=输入字数创建字符串str长度<6000创建分支分支<20分支<5另起段落输出结束来点名人名言加句废话yesnoyesnoyesnoyesno

流程如上图所示,很清晰的可以看出这并不是一个复杂的流程,现在我们看一下是如何实现这些句子的。当分支小于5的时候


def 另起一段():
    xx = ". "
    xx += "\r\n"
    xx += "    "
    return xx

当分支<20&&>5的时候,从名人名言列表中取一句随机排列取第一句然后在前面垫一句话与后面垫一句话。

def 洗牌遍历(列表):
   global 重复度
   池 = list(列表) * 重复度
   while True:
       random.shuffle()
       for 元素 in:
           yield 元素
下一句名人名言 = 洗牌遍历(名人名言)
def 来点名人名言():
   global 下一句名人名言
   xx = next(下一句名人名言)
   xx = xx.replace(  "a",random.choice(前面垫话) )
   xx = xx.replace(  "b",random.choice(后面垫话) )
   return xx

分支大于20的时候从废话里面取数据加在tmp上,最后循环当tmp字数>6000的时候停止。
整体分析下来,yield使用的挺巧妙的,简单的说其实也就是定义一个数据库,对里面的词进行拼接,所以里面的句子基本上都是通用的,这样才能有一点点的可读性。不过这种方法用来写那些毫无价值的古风诗还是可以的,毕竟大部分都是无厘头的拼接而已。

附上作者链接地址,有兴趣的可以自行下载:https://github.com/menzi11/BullshitGenerator

发布了5 篇原创文章 · 获赞 1 · 访问量 1622
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 1024 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览