前几天,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行代码写个"狗屁不通"文章生成器功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!