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

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

9452d193f8f00f07052621a40927909d.png

人工智能写文章

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

027e49f45d28b8d45b4ab54824d352e5.png

某论坛的问题

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

首先是环境配置:

python版本: 3.6.0

编辑器: pycharm

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

第一步: 导入相关python包

# encoding:utf-8import randomimport json

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

1cf40ea75f776049a4c200160fc2e3b5.png

第二步:参数设置

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

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

67c3ca3600dcbbbe01250f6dd0e15b04.png

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

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())

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

783ec38e45c3b43945b5169299d67b61.png

第四步:模型类的初始化

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

8f8ef2401450bea214c3ff8fb329471d.png

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

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每次返回一个值都是基于原来的状态下进行的,可以简单理解为一个迭代器。

60ccedc68d5a83b214b59e11f0a40776.png

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

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

b8cfcaa49f531e0368c066973696a9e2.png

第七步:主函数调用

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函数。

42d1857bf54011b06005ca6e1911de34.png

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


前端页面输出:

0a8524c86b2b6b6eb4ba25612f12b0d1.png

后端输出:

750de280daaee76787ff8207027921b4.png

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/486403.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NB-IoT与eMTC差异全解析

来源&#xff1a;北京物联网智能技术应用协会NB-IoT和eMTC同属于蜂窝物联网&#xff0c;也同时具备了蜂窝物联网的“3C”特征&#xff1a;•Coverage 增强覆盖•Consumption 低功耗•Cost 低成本为了满足“3C”目标&#xff0c;NB-IoT和eMTC的实现方式也有不同之处&#xff0c;…

设计模式--外观模式

实验12&#xff1a;外观模式 本次实验属于模仿型实验&#xff0c;通过本次实验学生将掌握以下内容&#xff1a; 1、理解外观模式的动机&#xff0c;掌握该模式的结构&#xff1b; 2、能够利用外观模式解决实际问题。 [实验任务]&#xff1a;计算机开启 在计算机主机(Main…

德国颁发抄袭大奖,中国包揽前10名拿了大满贯!

来源&#xff1a;钱塘大数据 昨天看到一则来自欧洲的新闻&#xff0c;实在是震惊&#xff01;德国设立了一个奖项&#xff0c;中国包揽了前10名&#xff0c;但我们却高兴不起来&#xff0c;还很难为情。因为这个奖&#xff0c;是为了反对山寨而设立的剽窃奖。获得这样的奖&…

11大领域148个热点和新兴前沿发布!有你的化学与材料研究方向吗?

来源&#xff1a;科学网 作者&#xff1a;郑金武11月13日&#xff0c;中国科学院科技战略咨询研究院、中国科学院文献情报中心与科睿唯安联合向全球发布了《2020研究前沿》报告。报告基于2014年-2019年的论文数据&#xff0c;遴选展示了在农业科学、植物学和动物学&#xff0c…

List注意啊

java.unit工具类&#xff0c;例如&#xff1a;Map、List等 java.awt图形绘制类&#xff0c;例如&#xff1a;list组件可以为用户提供了一个可滚动的文件列表选项&#xff0c;可设置list使其为用户提供单项或多项选择 我在第一次使用List的时候&#xff0c;包导入了第二个&#…

git idea 图形化_Git大全,你所需要的Git资料都在这里

不管怎样&#xff0c;Git已经成为事实上的版本管理工具的王者&#xff0c;之前的CVS被SVN吃掉了&#xff0c;现如今SVN的大好河山也被Git蚕食了大半&#xff0c;作为开发者的你&#xff0c;如果还不能够熟练的使用Git来管理你的代码&#xff0c;后果将会很严重&#xff0c;何况…

是否同一棵二叉搜索树

给定一个插入序列就可以唯一确定一棵二叉搜索树。然而&#xff0c;一棵给定的二叉搜索树却可以由多种不同的插入序列得到。例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树&#xff0c;都得到一样的结果。于是对于输入的各种插入序列&#xff0c;你需要判断它们…

修改软件许可证使用时间_阮一峰:为什么开源数据库改变许可证?

CockroachDB 是一个开源的分布式数据库&#xff0c;最近改变了代码授权&#xff0c;放弃了 Apache 许可证。许多开源数据库这一两年都改变了授权&#xff0c;比如 Confluent、Elastic 、MongoDB、Redis Labs、TimescaleDB。本文分析这种现象。一、CockroachDB 的许可证变更Cock…

线程 sleep 取消_C/C++ 多线程机制

一、C/C多线程操作说明C/C多线程基本操作如下&#xff1a; 1. 线程的建立结束 2. 线程的互斥和同步 3. 使用信号量控制线程 4. 线程的基本属性配置 在C/C代码编写时&#xff0c;使用多线程机制&#xff0c;首先需要做的事情就是声明引用&#xff0c;具体如下&#xff1a;#inclu…

事务java_Java事务之一——Java事务的基本问题

Java中的事务处理有多简单&#xff1f;在使用EJB时&#xff0c;事务在我们几乎察觉不到的情况下发挥着作用&#xff1b;而在使用Spring时&#xff0c;也只需要配置一个TransactionManager&#xff0c;然后在需要事务的方法上加上Transactional注解就行了。Java的事务处理之所以…

seo模拟点击软件_浅谈百度SEO快排是什么、原理、如何判断及应对

前言&#xff1a;以前我说过不准备写这个快排&#xff0c;一是我自己的网站没有操作过所谓的快排 &#xff0c;二是我并不能像网上很多写的揭秘百度快排(说实话&#xff0c;你都能揭秘的方法了&#xff0c;还真的很有用吗?真正懂的人都在低调赚money)。我只是站在一个小白角度…

100多年了,左右大脑的不对称性依然备受关注

来源&#xff1a;brainnews1&#xff0c;不对称的视角下的大脑偏侧化关于大脑不对称性的比较研究最早可以追溯到19世纪&#xff0c;但由于早期认为偏侧化为人类所独有&#xff0c;因此该领域的研究一度消失。这一领域在20世纪70年代重新出现&#xff0c;使我们了解到脑和行为的…

经由因果分析,反驳AI监控学生上课,及辨别健康类谣言

来源&#xff1a;混沌巡洋舰想象这样一个场景&#xff0c;你和你心爱的女孩一起自习&#xff0c;你的理科好&#xff0c;于是你看着她听数学的网课时&#xff0c;有时露出困惑的表情&#xff0c;还有时会走神。然后等她听完&#xff0c;你再把你觉得她没有听懂的部分&#xff0…

java controller json_springMVC的controller层接收前端json数据

1.前端的操作&#xff1a;对象接收json数据方式&#xff1a;将所需要传的数据转化为json数据&#xff0c;并将这些数据以post方式传到后台的controller层&#xff0c;然后controller层接收json数据&#xff0c;并且是以对象的形式进行接收。这里面是springmvc自动控制将这些数据…

里程碑!SpaceX 载人首飞发射成功,马斯克填补美国载人飞行近十年空白

来源&#xff1a;雷锋网作者 | 付静1 代表着首次&#xff0c;标志着政府与企业持续合作前往国际空间站的开始。终于&#xff0c;美国太空探索技术公司&#xff08;SpaceX&#xff09;的首次正式载人飞行任务拉开大幕&#xff01;美东时间 2020 年 11 月 15 日 19 时 27 分&…

取文字_把这4个字母输入word,会得到一段神秘文字,承载着一段历史

在英文的输入状态下&#xff0c;把“ rand()”输入word后&#xff0c;按下回车键&#xff0c;就会突然跳出一页文字把“ rand()”输入excel后&#xff0c;按下回车键&#xff0c;则会得到这样的结果&#xff0c;0.134582最后再把“ rand()”输入PPT&#xff0c;按下回车键&…

一文看懂数字孪生,工信部权威白皮书

来源&#xff1a;智东西11月11日消息&#xff0c;《由商务部、科技部、工信部、国家发改委、农业农村部、国家知识产权局、中国科学院、中国工程院等部委和深圳市人民政府共同举办的中国国际高新技术成果交易会正式开幕。作为大会主会场的重要组成部分&#xff0c;由工信部下属…

linux -- control service and daemon process

linux -- control service and daemon process 一、几个重要概念的讲解 1、systemd 系统启动和服务器进程由 systemd 系统和服务管理器进行管理 此程序提供一种方式&#xff0c;可以在启动时和运行中的系统上激活系统资源、服务器守护进程和其他进程 2、守护进程 守护进程是在执…

基于人工智能智商研究的智能定律初探

什么是智能和意识一直是智能科学领域最基础也是最具有争议的问题&#xff0c;2014年以来&#xff0c;我们在对人机通用智能发展水平的进行研究时提出了标准智能模型&#xff0c;统一描述人和智能机器的特征。在这个研究的基础上&#xff0c;2020年5月我们在《Annals of Data》发…

Postman----Presets(预先设置)的使用

使用场景&#xff1a; 当我们在进行接口测试post请求时&#xff0c;headers是必填项&#xff0c;我们将一个A接口的headers编写后测试完成&#xff0c;再次进行B接口的测试&#xff0c;需重新编写headers&#xff0c;为了简单操作&#xff0c;我们就用到了Presets。 Presets 作…