前几天,有个Python 小项目在 Github 上火了,上了每日趋势榜榜首。
项目名字叫做 BullshitGenerator,狗屁不通文章生成器。项目用 Python 实现,核心代码不过 50 几行,加上数据也不到 200 行。
所以这到底是一个什么神仙项目,能在短短两周多时间就收到了 7k 多 stars?
这还得从一个知乎问题说起:
有人提问说,学生会退会申请六千字怎么写?
显然,这是一个很魔幻的要求,想必也没人真的会去看内容。于是下面就有人给做了个神器,也就是这个项目,并生成一篇 6000 字的学生会退会申请:
全文实在太长,我就不全贴进来了。(反正也不会有人去看)
后来,又有人添砖加瓦,给项目加上了在线版本(地址见文末)。于是我也去试了一发:
矮马呀,这让人头皮炸裂的 PUNCHLINE!
再来试试:
虽说的确文如其名“狗屁不通”,但却让人感觉还有点微妙的迷之内涵呢……
看到这里,可能很多人会联想到自然语言处理、深度学习等高大上的理论,觉得这是否又是某个 AI 框架的新试验?
然而有趣的点正在这里,这个用 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)
就这么长。说白了,就是找了上百条名人名言,加上一堆前垫话、后垫话、废话,随机筛选,杂糅在一起,来个大杂烩,一篇文章就出炉了。
虽然简单(且并没有什么乱用),但围观的吃瓜群众看了后还是很嗨皮的:
可见,现实生活中这种狗屁不通的文章给大家留下了多大的阴影……
如果你也想玩一玩这个狗屁不通文章生成器,可以去 Github 下载项目运行,也可以上网页版进行体验(需将地址复制到浏览器中)。
参考链接:
[知乎]学生会退会申请六千字怎么写?- KE meng 的回答
https://www.zhihu.com/question/349794499/answer/873505410
狗屁不通文章生成器
https://github.com/menzi11/BullshitGenerator
网页版
https://suulnnka.github.io/BullshitGenerator/index.html
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作 - 量子位
https://mp.weixin.qq.com/s/gp9eFeM5Q85pAazWDuG9_g
--------[无聊的彩蛋]--------
别说又臭又长的文章了,现在大家习惯了碎片化阅读,正常的文章也未必能仔细读完。我相信,项目的 7.8k stars,不少人压根没搞清这其实不是个 AI 项目,知乎的三万六千点赞里,大多数人肯定也没发现,其实作者贴的是近六万字而不是六千字(所以才会那么长)。
而读到这里的你,有没有注意到本文中有句话是故意语序颠倒的呢?