学了python,但是又不知道可以用来干嘛。开发一个计算器?太low了。开发一个网站?感觉网站涉及太多知识点,一个人搞不定。不用慌,本文介绍一个最近很火的一个文章自动生成器,它是用python写的,能够在一秒内生成一篇6000字的文章,而且看起来有模有样的。

人工智能写文章

故事要从一个论坛说起,起初,该论坛上有这样一个问题“学生会退会申请六千字怎么写?”。然后,就被我们讨厌形式主义的热心网友看见了。再然后,就有了这个“狗屁不通文章生成器”

某论坛的问题

鉴于头条上有很多python初学者,我把代码整理一下,写成类的形式,方便大家学习。好了,废话不多说,那就让我们开始吧。

首先是环境配置:

python版本: 3.6.0

编辑器: pycharm

ps: 每一步都有代码和排版截图,方便学习

第一步: 导入相关python包

# encoding:utf-8import randomimport json

random包是用来生成随机数,主要是为了生成文章时,随机从指定数据源获取句子进行组装。json包是一种文本序列化,是人类可读的,方便你对其进行修改(记事本打开,可以看到里面所有内容,而且都认识。)

第二步:参数设置

class CONF:    path = "data.json"      # 数据路径    article_length = 6000   # 文章字数    repeat_rate = 2         # 句子重复度

这里是个人编程的习惯,我习惯把一些配置,例如:文件路径、配置参数统一放在一个类中。当然,实际项目开发的时候,是用config 文件存放,不会直接写在代码里,这里为了演示方便,就写在一起,也方便运行。

第三步:一个简单的文件读取工具函数

def read_json(file_name):    """    读取json文件    :param file_name:     :return:     """    with open(file_name,mode='r',encoding="utf-8") as file:        return json.loads(file.read())

文件读取在实际工作中经常会用到,所以建议写一个工具类,累积起来,每次使用的时候直接调用,就不用重复写了。

第四步:模型类的初始化

class Model:    def __init__(self, famous, before, after, bosh, config):        self.famous = famous        # a 代表前面垫话,b代表后面垫话        self.before = before        # 在名人名言前面弄点bosh        self.after = after          # 在名人名言后面弄点bosh        self.bosh = bosh             # 代表文章主要bosh来源        self.article_length = config.article_length        self.repeat_rate = config.repeat_rate        self.next_bosh = self.__shuffle_for_each(self.bosh)        self.next_famous = self.__shuffle_for_each(self.famous)    """模型初始化"""    @classmethod    def initialize(cls, config):        # 获取数据源        data = read_json(config.path)        famous = data["famous"]     # a 代表前面垫话,b代表后面垫话        before = data["before"]     # 在名人名言前面弄点bosh        after = data['after']       # 在名人名言后面弄点bosh        bosh = data['bosh']         # 代表文章主要废话来源        return cls(famous, before, after, bosh, config)        。。。    

initialize() 函数和 __init__() 函数 是对象初始化和实例化,其中包括基本参数的赋值、模型的导入、模型的训练、模型的保存、最后返回用户一个对象。这里作为一个类的基本操作,是属于一个通用模板,在大多数项目中,都可以这么去写。

第五步:继续完善模型类,增加一些常用模块

class Model:        。。。        def __shuffle_for_each(self, data_list):    """ 洗牌遍历(迭代器) """    pool = list(data_list) * self.repeat_rate    while True:        random.shuffle(pool)        for line in pool:            yield line    def __get_famous(self, ):        """ 来点名人名言 """        t_famous = next(self.next_famous)        t_famous = t_famous.replace("a", random.choice(self.before))        t_famous = t_famous.replace("b", random.choice(self.after))        return t_famous    @staticmethod    def __another_section():        return "。    "

比较难理解的就是洗牌遍历函数__shuffle_for_each() ,用到了一个关键字 yield。 如果你还没有对yield有个初步分认识,那么你先把yield看做“return”,这个是直观的,它首先是个return,普通的return是什么意思,就是在程序中返回某个值。而yield每次返回一个值都是基于原来的状态下进行的,可以简单理解为一个迭代器。

第六步:给模型类添加一个最重要的函数 -- 生成文章的主流程

def get_article(self, title):    """    生成一篇文章    :param title:     :return:     """    section_flag = False    content = str()    while len(content) < self.article_length:        flag = random.randint(0, 100)        if flag < 5 and section_flag:            content += self.__another_section()  # 5% 的概率 另起一个段落            section_flag = False        elif flag < 20:            content += self.__get_famous()  # 15%的概率 生成一个名人名言            section_flag = True        else:            content += next(self.next_bosh)  # 80%的概率 生成废话            section_flag = True    content = "    " + content.replace("x", title)    article = "《%s》%s" % (title, content)    return article

get_article() 是一个文章生成的函数,根据不同概率,在每次循环时,随机生成段落、或者名人名言、或者一大段话。

第七步:主函数调用

if __name__ == '__main__':    model = Model.initialize(config=CONF)    while True:        title = input("请输入文字主题:")        if '退出' == title:            break        article = model.get_article(title)        print(article)

主函数main(), 就是你整个程序运行的起点,它控制着所有步骤。虽然main函数不用写也行,但是为了规范化编程,每次程序都要写main函数。

好了,让我们把代码跑起来。输入一个主题:“好好学习”,不到一秒就生成一篇文章啦。


前端页面输出:

后端输出:


如果有疑问想获取源码(其实代码都在上面),可以后台私信我,回复:python文章生成。 我把源码发你。最后,感谢大家的阅读,祝大家工作生活愉快!

mybatis代码自动生成器_最近很火的文章自动生成器,python源码公开了(内附python代码)相关推荐

  1. python小说自动生成器_最近很火的文章自动生成器,python源码公开了(内附python代码)...

    学了python,但是又不知道可以用来干嘛.开发一个计算器?太low了.开发一个网站?感觉网站涉及太多知识点,一个人搞不定.不用慌,本文介绍一个最近很火的一个文章自动生成器,它是用python写的,能 ...

  2. 表白代码抖音很火的卡通H5动态表白源码HTML+CSS,七夕情人节代码,520代码

    作品介绍 查看更多关于 抖音 的文章 很火的卡通H5动态表白源码,搭起来发给你心爱的人向她表白吧 纯html的源码,上传就可以打开使用啦! 用代码编辑器或记事本打开可修改你要表白的内容.名字等 效果图 ...

  3. 抖音很火的设备性能在线测试HTML源码

    正文: 抖音很火的设备性能在线测试HTML源码,电脑和手机CPU性能测试,滑动放大3D模型看看你的手机能不能跑满帧~ 程序: wwhgr.lanzoue.com/irITj0aq6t9g 图片:

  4. 基于DEAP的脑电情绪识别论文源码改进版本(附论文代码,lstm和rnn)

    论文及改进版源码链接: (论文加源码)基于DEAP的脑电情绪识别论文源码改进版本(附论文代码,lstm和rnn) https://download.csdn.net/download/qq_45874 ...

  5. python微信好友分析源代码_搞事情了 | 教你用Python分析微信好友信息(内附完整代码)...

    本文经授权转载至公众号 Python 知识圈 未经授权 严禁二次转载 阅读文本大概需要 5 分钟 技术群里一位读者微信私聊我,问我能不能统计下微信好友信息并以文件形式保存.其实,以前也写过类似的文章, ...

  6. 18、最近很火的线上脱单盲盒项目(内附功能搭建源ma)

    本次分享为线上脱单盲盒搭建源码,免费领取已放文章结尾处 其实和线下那种一元放微信,一元拿微信一样,线上只是流量大一点. 然后9.9元成为红娘为亮点,吸引别人来进行宣传推广. 很多人就是看到了这么火,那 ...

  7. 搞事情了 | 教你用Python分析微信好友信息(内附完整代码)

    戳上方蓝字 "程序猿杂货铺" 关注我 并 置顶星标! 你的关注意义重大! 本文经授权转载至公众号 Python 知识圈 未经授权 严禁二次转载 阅读文本大概需要 5 分钟 技术群里 ...

  8. 最近很火的夏日便捷小空调源码(小程序版)

    介绍: 最近是不是被小空调洗脑了? 优势: 随时随地打开空调 低功耗(使用HTML CSS 而非 Canvas 绘制) 静音 操作简单 安装便捷 劣势: 没有风 刚开机时比较吵 不懂请留言 此版本为小 ...

  9. 很火的华为太空表网站源码

    1.上传网站文件到网站目录即可 2.背景歌曲需放本地,没有音乐的话在body添加 <audio autoplay="" loop="ture"> & ...

最新文章

  1. “勒索病毒”为什么盯上了比特币?
  2. 计算机英语翻译的典故,中国成语典故英语翻译大全
  3. Runtime底层原理--动态方法解析总结
  4. 快速列出所有字段_快速掌握目标课题的研究现状 | 应用实例
  5. php 国密 签名,关于php国密SM3签名算法
  6. Rsync未授权访问漏洞记录(影响范围:全版本,端口:873)
  7. android 文件删除命令大全,Android中删除sdcard里文件的命令
  8. HTTP 传输内容的压缩
  9. 学习日志——2019/08/18
  10. JDK环境变量设置以及检验是否配置成功
  11. keil 安装 for NRF52832
  12. 计算机二级c语言考试内容有哪些,计算机二级C语言考试内容大纲
  13. autoCAD 2008 Win7 64位, win8 64位 安装 燕秀工具箱 yanxiu.cui 文件下载
  14. 贝塞尔曲线及实践案例
  15. Python网络爬虫与信息提取——网络爬虫Scrapy框架
  16. 他曾被视为马斯克第二,现在是等着坐牢的骗子
  17. Python 给视频添加水印
  18. UOS 在桌面创建网页快捷方式
  19. 【贪心】AcWing 803. 区间选点
  20. Dmaven.multiModuleProjectDirectory system propery is not set. Check $M2_HOME environment variable a

热门文章

  1. LeetCode 1233. 删除子文件夹
  2. LeetCode 892. 三维形体的表面积(数学)
  3. 服务器系统网卡驱动装不上,网卡驱动装不上去怎么办?
  4. python冒泡算法_python_冒泡算法
  5. hystrix 页面_微服务 | 使用Hystrix实现Spring Cloud的熔断机制
  6. 史上最强Dubbo面试28题答案详解:核心功能+服务治理+架构设计等
  7. 刚参加完阿里Java P6面试归来,6点面试经验总结!(含必考题答案)
  8. 论文浅尝 | AutoETER: 用于知识图谱嵌入的自动实体类型表示
  9. 百度开源 FAQ 问答系统(AnyQ)安装---Linux(无docker)+小白编译AnyQ-dockerlinux[CentOs]
  10. (设计模式)简单工厂模式之通过配置文件动态创建实现类