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

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

python RTL自动生成_最近很火的文章自动生成器,python源码公开了(内附python代码)_第1张图片

人工智能写文章

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

python RTL自动生成_最近很火的文章自动生成器,python源码公开了(内附python代码)_第2张图片

某论坛的问题

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

首先是环境配置:

python版本: 3.6.0

编辑器: pycharm

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

第一步: 导入相关python包

# encoding:utf-8import randomimport json

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

f9a91e50ff4d6b38660f74639c850dda.png

第二步:参数设置

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

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

python RTL自动生成_最近很火的文章自动生成器,python源码公开了(内附python代码)_第3张图片

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

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

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

python RTL自动生成_最近很火的文章自动生成器,python源码公开了(内附python代码)_第4张图片

第四步:模型类的初始化

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

python RTL自动生成_最近很火的文章自动生成器,python源码公开了(内附python代码)_第5张图片

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

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

python RTL自动生成_最近很火的文章自动生成器,python源码公开了(内附python代码)_第6张图片

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

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

python RTL自动生成_最近很火的文章自动生成器,python源码公开了(内附python代码)_第7张图片

第七步:主函数调用

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 RTL自动生成_最近很火的文章自动生成器,python源码公开了(内附python代码)_第8张图片

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


前端页面输出:

python RTL自动生成_最近很火的文章自动生成器,python源码公开了(内附python代码)_第9张图片

后端输出:

python RTL自动生成_最近很火的文章自动生成器,python源码公开了(内附python代码)_第10张图片

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

你可能感兴趣的:(python,RTL自动生成,python,yield理解)