赣州新闻网

首页 / 科技

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

2020-03-27 · 赣州新闻网 · 科技

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

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

人工智能写文章

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

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

某论坛的问题

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


首先是环境配置:

python版本: 3.6.0

编辑b ? - X I c G ~ (器: p% C f s + W jycharm

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


第一步: 导入相关python包

# encoding:utf-8
import random
import: 4 6 8 D json


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


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


第二步:参数设置

class CONF:
path = \"dataz M Y Q % ~ 7 . L D"
读取json文件
:paramT ? T w _ J U file_name:
:return:
\"\"\"
with open(file_name,mode=\'r\',enco` N * 1 0 Cding=\"utf-8\") as file:
return json.loads(file.read())

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

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

第四步:模型类的初始化

class Model:
def __init__(self, famous, before, after, bosh, config):
self.famouY 7 Z 1 9 |s = famous # a 代表前面垫话,b代表后面垫话
self.before = before # 在名人名言前面弄点bosh
self7 U e i ..after = after # 在名人名言后面弄点bosh
self.bosh = bosh # 代表文章主要bosh来源
self.article_lengtk x x Ch = config.aa b I qrticle_length
self.repeat_rate = config.repeat_rate
self.next_bosh = self.__shuffle_for_each(self.bosh)
self.next_fad k 5 x ] Hmous = self.__shuffle_for_each(self.famous)


B l z\"\"\"模型初始化\"\"\"
@classmethod
def initialize(cls, config):
# 获取数据源t _ /
data = read_json(config.path)
famous = data # a 代表前面垫话,b代表后面垫话
before = data # 在名人名言前面弄点bosh
after = data # 在名人名言后面弄点bosh
bs V - 9osh = dao W K x | I 8ta # 代表文章主要废话来源
return cls(famous, before, after, bosh, config)

。。。

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


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


第五步:继续完善模型类N b * Z w,增加一些常用模块

class Model:

。。。

def8 H ( k / __shuffle_foz j D Y i { ; . 7r_each(self, data_list):
\"\"\" 洗牌遍历(迭代器) \K # l ;"\$ g )"\"i 3 9 5 O X K A
poo| k ~ * ? q ! $ bl = list(data_list) * self.repeat_rate
while True:
random.shuffle(pool)
for line in pool:
yield line


def __get_famous(self, ):
\"\"\" 来点名人名言 \"\"\"
t_famous = next(j y c 1 K Qself.next_famous)
t_famous = t_famous.) W 3 Q Mreplace(\"a\", rG Y R j { f Random.choice(self.before))
t_famous = t_famous.replace(\"b\", random.choice(self.after))
return t_famous


@staticmethod
defV 5 g T O 3 B O __another_section():
return \"。\\r\E o ^\n \"

比较难理解的就是: } V 2 ` 5 S洗牌遍历函数__shuffle_for$ ` u_each() ,用到了一个关键字 yield。 如果你还没x 6 1 . T有对yield有个初步分认识,那么你先把yield看做“return”,这个是直观的,它首先是个retu4 N m 2 5 - + A krn,普通的return是{ X w + c什么意思,就是在程序中返回某个值。而y8 # b uield每次返回一个值都是基3 o _ W于原来的` . h % title, content)
return article

get_articl# { # - ye() 是一个文章z | 1 b生成的函数,根据不同概率,在每次循环时,随机生成段落、或者名人名言、或者一大段话。


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

第七步:主函数调用

if __name__ == \'__main__\':
model = Model.initialize(config=CONF)
while True:
title = input(\"请( ] M ( K输入文/ b P 8 1字主题:\")
if \'退出\' == title:
break
article = mo, L P del.get_article(titlk } Z 6 ; e)
print(article)

主函数main(), 就是你E _ p y s h e ^ |整个程序运行的起点,它控O 7 B c 8制着所有步骤。虽然main函数不用写也行,但是为了规范化编程,每次程序都要写main函数。


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


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


前端页面输出:

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


后端输出:

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



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

项目工作赣州生活主题文章设置开了本地新闻