最近火了的狗屁不通 Python 文章生成器
前几天,有个 Python 小项目在 Github 上火了,上了每日趋势榜榜首。
项目名字叫做 BullshitGenerator,狗屁不通文章生成器。项目用 Python 实现,核心代码不过 50 几行,加上数据也不到 200 行。
所以这到底是一个什么神仙项目,能在短短两周多时间就收到了 7k 多 stars?
只要输入标题就可以生成一篇长长的文章。心想背后实现代码一定很复杂吧,里面一定有很多高深莫测的机器学习等复杂算法吧。。。。不过,当我看了源代码之后。。。。这程序不到 50 行。。。。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
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 经验,但我竟然一时也没有看懂
当然啦,原作者也说了,这个代码也是在无聊中诞生的,平时撸码是不写中文变量名的, 中文变量名只是最开始瞎写的时候边写语料边写代码时懒得切英文输入法了。😂这代码要是被 Python 之父看见了,他一定后悔发明这门语言。
其实,生成的文章内容都来自于素材文件 data.json, 这个文件的结构是个字典结构:
{
"famous":[
"爱迪生a,天才是百分之一的勤奋加百分之九十九的汗水。b",
"查尔斯·史a,一个人几乎可以在任何他怀有无限热忱的事情上成功。b",
....
],
"bosh":[
"现在, 解决x的问题, 是非常非常重要的. 所以, ",
"我们不得不面对一个非常尴尬的事实, 那就是, ",
....
],
"after":[
"这不禁令我深思. ",
"带着这句话, 我们还要更加慎重的审视这个问题: ",
....
],
"before":[
"曾经说过",
"在不经意间这样说过",
....
]
}
famous 里面收集了很多名人语录, 里面的关键字”a”和”b” 将分别被 before 和 after 列表中的内容替换,这样处理后句子看起来具有逻辑性
bosh 里面是各种各样的的废话, 里面关键字”x”最后会用标题替换,这样会让人感觉,这篇文章还是和标题有那么一丢丢联系的。
一篇完整的文章就是靠不断随机从 famous、bosh 列表获取元素,之后拼接成一篇文章。
搞懂了原理,如果我们自己来写的话,除去代码注释,就 10 来行代码
import random
import json
data = json.load(open("data.json", encoding="utf-8"))
def generator(title, length=800):
"""
:param title: 文章标题
:param length: 生成正文的长度
:return: 返回正文内容
"""
body = ""
while len(body) < length:
num = random.randint(0, 100)
if num < 10:
body += "\r\n"
elif num < 20:
body += random.choice(data["famous"]) \
.replace('a', random.choice(data["before"])) \
.replace('b', random.choice(data['after']))
else:
body += random.choice(data["bosh"])
body = body.replace("x", title)
return body
来测试一下
from bullshit import generator
content = generator("我爱艺赛旗RPA")
print(content)
输出
现在, 解决我爱艺赛旗RPA的问题, 是非常非常重要的. 所以, 塞涅卡曾经提到过, 生命如同寓言,其价值不在与长短,而在与内容。这启发了我. 现在, 解决我爱艺赛旗RPA的问题, 是非常非常重要的. 所以, 我们都知道, 只要有意义, 那么就必须慎重考虑.问题的关键究竟为何? 要想清楚, 我爱艺赛旗RPA, 到底是一种怎么样的存在. 我爱艺赛旗RPA似乎是一种巧合,但如果我们从一个更大的角度看待问题,这似乎是一种不可避免的事实. 可是,即使是这样,我爱艺赛旗RPA的出现仍然代表了一定的意义. 生活中, 若我爱艺赛旗RPA出现了, 我们就不得不考虑它出现了的事实. 我们不得不面对一个非常尴尬的事实, 那就是, 每个人都不得不面对这些问题. 在面对这种问题时, 查尔斯·史曾经提到过,一个人几乎可以在任何他怀有无限热忱的事情上成功。这句话把我们带到了一个新的维度去思考这个问题: 米歇潘说过一句富有哲理的话, 生命是一条艰险的峡谷,只有勇敢的人才能通过。这句话看似简单,但其中的阴郁不禁让人深思. 培根在不经意间这样说过, 合理安排时间,就等于节约时间。这句话语虽然很短, 但令我浮想联翩. 迈克尔·F·斯特利在不经意间这样说过, 最具挑战性的挑战莫过于提升自我。带着这句话, 我们还要更加慎重的审视这个问题: 经过上述讨论, 要想清楚, 我爱艺赛旗RPA, 到底是一种怎么样的存在. 莎士比亚曾经说过, 人的一生是短的,但如果卑劣地过这一生,就太长了。我希望诸位也能好好地体会这句话. 问题的关键究竟为何? 一般来讲, 我们都必须务必慎重的考虑考虑. 就我个人来说, 我爱艺赛旗RPA对我的意义, 不能不说非常重大. 叔本华说过一句富有哲理的话, 意志是一个强壮的盲人,倚靠在明眼的跛子肩上。这句话看似简单,但其中的阴郁不禁让人深思. 了解清楚我爱艺赛旗RPA到底是一种怎么样的存在, 是解决一切问题的关键.带着这些问题, 我们来审视一下我爱艺赛旗RPA. 我们都知道, 只要有意义, 那么就必须慎重考虑.我爱艺赛旗RPA, 发生了会如何, 不发生又会如何. 既然如何, 我爱艺赛旗RPA, 到底应该如何实现. 爱尔兰曾经说过, 越是无能的人,越喜欢挑剔别人的错儿。这句话把我们带到了一个新的维度去思考这个问题: 既然如此, 罗素·贝克说过一句著名的话, 一个人即使已登上顶峰,也仍要自强不息。这似乎解答了我的疑惑. 这样看来, 我们不得不面对一个非常尴尬的事实, 那就是, 每个人都不得不面对这些问题. 在面对这种问题时, 这是不可避免的. 我们一般认为, 抓住了问题的关键, 其他一切则会迎刃而解.这是不可避免的. 我爱艺赛旗RPA的发生, 到底需要如何做到, 不我爱艺赛旗RPA的发生, 又会如何产生. 斯宾诺莎说过一句富有哲理的话, 最大的骄傲于最大的自卑都表示心灵的最软弱无力。这不禁令我深思. 对我个人而言,我爱艺赛旗RPA不仅仅是一个重大的事件,还可能会改变我的人生. 我们一般认为, 抓住了问题的关键, 其他一切则会迎刃而解.池田大作曾经提到过, 不要回避苦恼和困难,挺起身来向它挑战,进而克服它。这句话看似简单,但其中的阴郁不禁让人深思. 莎士比亚曾经提到过, 人的一生是短的,但如果卑劣地过这一生,就太长了。这似乎解答了我的疑惑. 可是,即使是这样,我爱艺赛旗RPA的出现仍然代表了一定的意义. 鲁巴金曾经提到过, 读书是在别人思想的帮助下,建立起自己的思想。这句话看似简单,但其中的阴郁不禁让人深思. 歌德说过一句著名的话, 决定一个人的一生,以及整个命运的,只是一瞬之间。这似乎解答了我的疑惑. 这种事实对本人来说意义重大, 相信对这个世界也是有一定意义的.我爱艺赛旗RPA, 发生了会如何, 不发生又会如何. 从这个角度来看, 而这些并不是完全重要, 更加重要的问题是, 那么, 一般来说, 那么, 我爱艺赛旗RPA因何而发生?富兰克林说过一句富有哲理的话, 读书是易事,思索是难事,但两者缺一,便全无用处。这启发了我. 总结的来说, 带着这些问题, 我们来审视一下我爱艺赛旗RPA. 别林斯基说过一句著名的话, 好的书籍是最贵重的珍宝。我希望诸位也能好好地体会这句话. 博说过一句著名的话, 一次失败,只是证明我们成功的决心还够坚强。 维我希望诸位也能好好地体会这句话. 一般来说, 我爱艺赛旗RPA的发生, 到底需要如何做到, 不我爱艺赛旗RPA的发生, 又会如何产生. 在这种困难的抉择下, 本人思来想去, 寝食难安.这样看来, 既然如何, 我爱艺赛旗RPA因何而发生?我爱艺赛旗RPA似乎是一种巧合,但如果我们从一个更大的角度看待问题,这似乎是一种不可避免的事实. 我认为, 培根曾经提到过, 阅读使人充实,会谈使人敏捷,写作使人精确。这启发了我. 了解清楚我爱艺赛旗RPA到底是一种怎么样的存在, 是解决一切问题的关键.这种事实对本人来说意义重大, 相信对这个世界也是有一定意义的.对我个人而言,我爱艺赛旗RPA不仅仅是一个重大的事件,还可能会改变我的人生. 洛克曾经提到过, 学到很多东西的诀窍,就是一下子不要学很多。这句话把我们带到了一个新的维度去思考这个问题: 我们不妨可以这样来想: 我们不妨可以这样来想: 总结的来说, 既然如此, 我认为, 所谓我爱艺赛旗RPA, 关键是我爱艺赛旗RPA需要如何写. 生活中, 若我爱艺赛旗RPA出现了, 我们就不得不考虑它出现了的事实. 我爱艺赛旗RPA, 到底应该如何实现. 本人也是经过了深思熟虑,在每个日日夜夜思考这个问题. 从这个角度来看, 一般来讲, 我们都必须务必慎重的考虑考虑. 经过上述讨论, 马云说过一句著名的话, 最大的挑战和突破在于用人,而用人最大的突破在于信任人。这不禁令我深思. 在这种困难的抉择下, 本人思来想去, 寝食难安.本人也是经过了深思熟虑,在每个日日夜夜思考这个问题. 就我个人来说, 我爱艺赛旗RPA对我的意义, 不能不说非常重大. 而这些并不是完全重要, 更加重要的问题是, 奥斯特洛夫斯基说过一句著名的话, 共同的事业,共同的斗争,可以使人们产生忍受一切的力量。 我希望诸位也能好好地体会这句话. 在这种不可避免的冲突下,我们必须解决这个问题. 在这种不可避免的冲突下,我们必须解决这个问题. 带着这些问题, 我们来审视一下我爱艺赛旗RPA. 而这些并不是完全重要, 更加重要的问题是, 我们不得不面对一个非常尴尬的事实, 那就是, 就我个人来说, 我爱艺赛旗RPA对我的意义, 不能不说非常重大. 经过上述讨论, 本人也是经过了深思熟虑,在每个日日夜夜思考这个问题. 培根曾经提到过, 要知道对好事的称颂过于夸大,也会招来人们的反感轻蔑和嫉妒。带着这句话, 我们还要更加慎重的审视这个问题: 赫尔普斯说过一句著名的话, 有时候读书是一种巧妙地避开思考的方法。这句话语虽然很短, 但令我浮想联翩. 塞涅卡曾经提到过, 真正的人生,只有在经过艰难卓绝的斗争之后才能实现。这句话语虽然很短, 但令我浮想联翩. 每个人都不得不面对这些问题. 在面对这种问题时, 要想清楚, 我爱艺赛旗RPA, 到底是一种怎么样的存在. 王阳明在不经意间这样说过, 故立志者,为学之心也;为学者,立志之事也。带着这句话, 我们还要更加慎重的审视这个问题: 我爱艺赛旗RPA, 到底应该如何实现. 了解清楚我爱艺赛旗RPA到底是一种怎么样的存在, 是解决一切问题的关键.本人也是经过了深思熟虑,在每个日日夜夜思考这个问题. 那么, 我爱艺赛旗RPA因何而发生?每个人都不得不面对这些问题. 在面对这种问题时, 既然如何, 我们不妨可以这样来想: 从这个角度来看, 问题的关键究竟为何? 拉罗什福科在不经意间这样说过, 我们唯一不会改正的缺点是软弱。带着这句话, 我们还要更加慎重的审视这个问题: 对我个人而言,我爱艺赛旗RPA不仅仅是一个重大的事件,还可能会改变我的人生. 现在, 解决我爱艺赛旗RPA的问题, 是非常非常重要的. 所以, 莎士比亚说过一句富有哲理的话, 本来无望的事,大胆尝试,往往能成功。我希望诸位也能好好地体会这句话. 在这种困难的抉择下, 本人思来想去, 寝食难安.从这个角度来看, 对我个人而言,我爱艺赛旗RPA不仅仅是一个重大的事件,还可能会改变我的人生. 而这些并不是完全重要, 更加重要的问题是, 我爱艺赛旗RPA因何而发生?经过上述讨论, 我们不得不面对一个非常尴尬的事实, 那就是, 歌德说过一句著名的话, 意志坚强的人能把世界放在手中像泥块一样任意揉捏。这不禁令我深思. 了解清楚我爱艺赛旗RPA到底是一种怎么样的存在, 是解决一切问题的关键.我们一般认为, 抓住了问题的关键, 其他一切则会迎刃而解.要想清楚, 我爱艺赛旗RPA, 到底是一种怎么样的存在. 带着这些问题, 我们来审视一下我爱艺赛旗RPA. 我认为, 我们一般认为, 抓住了问题的关键, 其他一切则会迎刃而解.我爱艺赛旗RPA, 发生了会如何, 不发生又会如何. 这种事实对本人来说意义重大, 相信对这个世界也是有一定意义的.我们不妨可以这样来想: 一般来说, 带着这些问题, 我们来审视一下我爱艺赛旗RPA. 问题的关键究竟为何? 所谓我爱艺赛旗RPA, 关键是我爱艺赛旗RPA需要如何写. 经过上述讨论, 我爱艺赛旗RPA似乎是一种巧合,但如果我们从一个更大的角度看待问题,这似乎是一种不可避免的事实. 我们不得不面对一个非常尴尬的事实, 那就是, 就我个人来说, 我爱艺赛旗RPA对我的意义, 不能不说非常重大.
是不是很简单,全文太长就不全贴啦。
好了,下次分享再见。
优秀啊
牛的
很棒
真趣
破费得儿
最先发现可以用中文做变量名的时候,还是很兴奋的 ~