前几天,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来行代码