输入主题就能生成万字文章?解密狗屁不通文章生成器!

输入主题就能生成万字文章?解密狗屁不通文章生成器!

首页休闲益智话题生成器更新时间:2024-10-26
写在前面

前段时间,github上出现了一个很火的项目——BullshitGenerator,中文名是狗屁不通文章生成器,到现在已经有13.4k个star,用户任意输入一个主题词,就能生成一篇6000字符的文章,而且看起来还颇有文采。当笔者点进这个项目时,发现项目作者用的方法出奇的简单,利用几十行python代码就能达到如此神奇的效果,想到这里大家一定跃跃欲试了。今天我们就来解密下这个狗屁不通文章生成器背后的原理,并告诉大家如何自定义自己的文章生成器。

项目描述

解密BullshitGenerator

点进项目主页发现有10个文件,但是大家其实只需要看2个文件就可以了,一个是data.json,这是语料库,也是文章废话的来源;另一个是自动狗屁不通文章生成器.py,这是主文件,运行这个文件就能生成文章。我们先来看下这两个文件的内容。

项目主页

首先,单击data.json,发现里面的内容长下面这样:

{ "title":"学生会退会", "famous":[ "爱迪生a,天才是百分之一的勤奋加百分之九十九的汗水。b", …… ], "bosh":["现在, 解决x的问题, 是非常非常重要的. 所以", …… ], "after":["这不禁令我深思. ", ……], "before":["曾经说过", ……] }

如果大家对python的基础知识有了解,就会发现这其实就是一个词典,里面有五个键值对,分别对应主题、名人名言、废话、名人名言前、后的废话。大家如果想自定义自己的文章生成器,只需要改变这个data.json里面的内容就好了。

然后,单击狗屁不通文章生成器.py,这是个python脚本,里面的代码长这样:

import os, re import random,readJSON data = readJSON.读JSON文件("data.json") 名人名言 = data["famous"] # a 代表前面垫话,b代表后面垫话 前面垫话 = data["before"] # 在名人名言前面弄点废话 后面垫话 = data['after'] # 在名人名言后面弄点废话 废话 = data['bosh'] # 代表文章主要废话来源 xx = "学生会退会" 重复度 = 2 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 def 另起一段(): xx = ". " xx = "\r\n" xx = " " return xx 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)

粗略的浏览一遍,发现代码的主体是三个函数,而且作者为了方便读者理解,变量名和函数名直接用的中文,相信即使不会python的用户,也能大概明白什么意思。这三个函数分别是:洗牌遍历,来点名人名言,另起一段。三个函数的功能是:

只需要随机的排列组合这三个函数,就能生成一篇文采飞扬的文章啦!作者下面给出了使用范例,可以随机生成一篇6000字的文章。大家只要修改main函数的代码就能生成自己的文章啦!例如将main函数里面的6000改为10000,就能生成一篇万字长文啦!

结果展示

作者提供了网页版供大家进行尝试,比如输入“人工智能”,生成的文章如下,看起来还不错。其实如果大家想进入深入的研究,可以利用自然语言处理,强化学习等方法来增强语言的逻辑性,那样生成的文章就更像真的啦。

输入人工智能

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved