前几天,GitHub 有个开源项目特别火,只要输入标题就可以生成一篇长长的文章。
背后实现代码一定很复杂吧,里面一定有很多高深莫测的机器学习等复杂算法
不过,当我看了源代码之后
这程序不到50行
尽管我有多年的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("我爱Python") print(content)
输出
一般来说, 问题的关键究竟为何"htmlcode">
content = generator("我爱Python", length=1000) print(content)输出
要想清楚, 我爱Python, 到底是一种怎么样的存在. 我们都知道, 只要有意义, 那么就必须慎重考虑.了解清楚我爱Python到底是一种怎么样的存在, 是解决一切问题的关键.
从这个角度来看, 一般来说, 带着这些问题, 我们来审视一下我爱Python. 我们不得不面对一个非常尴尬的事实, 那就是, 吉姆·罗恩在不经意间这样说过, 要么你主宰生活,要么你被生活主宰。这句话把我们带到了一个新的维度去思考这个问题: 我爱Python, 到底应该如何实现. 每个人都不得不面对这些问题. 在面对这种问题时, 问题的关键究竟为何"text-align: center">当然,你也可以引入更多NLP等技术进来,不过这对我来说
原项目地址:https://github.com/menzi11/BullshitGenerator
重构后的代码地址:
https://github.com/lzjun567/BullshitGenerator
总结
以上所述是小编给大家介绍的so easy!10行代码写个"狗屁不通"文章生成器功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
文章生成器,生成器
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。