天天看點

python RTL自動生成_最近很火的文章自動生成器,python源碼公開了(内附python代碼)第一步: 導入相關python包第二步:參數設定第三步:一個簡單的檔案讀取工具函數第四步:模型類的初始化第五步:繼續完善模型類,增加一些常用子產品第六步:給模型類添加一個最重要的函數 -- 生成文章的主流程第七步:主函數調用

學了python,但是又不知道可以用來幹嘛。開發一個電腦?太low了。開發一個網站?感覺網站涉及太多知識點,一個人搞不定。不用慌,本文介紹一個最近很火的一個文章自動生成器,它是用python寫的,能夠在一秒内生成一篇6000字的文章,而且看起來有模有樣的。

python RTL自動生成_最近很火的文章自動生成器,python源碼公開了(内附python代碼)第一步: 導入相關python包第二步:參數設定第三步:一個簡單的檔案讀取工具函數第四步:模型類的初始化第五步:繼續完善模型類,增加一些常用子產品第六步:給模型類添加一個最重要的函數 -- 生成文章的主流程第七步:主函數調用

人工智能寫文章

故事要從一個論壇說起,起初,該論壇上有這樣一個問題“學生會退會申請六千字怎麼寫?”。然後,就被我們讨厭形式主義的熱心網友看見了。再然後,就有了這個“狗屁不通文章生成器”

python RTL自動生成_最近很火的文章自動生成器,python源碼公開了(内附python代碼)第一步: 導入相關python包第二步:參數設定第三步:一個簡單的檔案讀取工具函數第四步:模型類的初始化第五步:繼續完善模型類,增加一些常用子產品第六步:給模型類添加一個最重要的函數 -- 生成文章的主流程第七步:主函數調用

某論壇的問題

鑒于頭條上有很多python初學者,我把代碼整理一下,寫成類的形式,友善大家學習。好了,廢話不多說,那就讓我們開始吧。

首先是環境配置:

python版本: 3.6.0

編輯器: pycharm

ps: 每一步都有代碼和排版截圖,友善學習

第一步: 導入相關python包

# encoding:utf-8import randomimport json
           

random包是用來生成随機數,主要是為了生成文章時,随機從指定資料源擷取句子進行組裝。json包是一種文本序列化,是人類可讀的,友善你對其進行修改(記事本打開,可以看到裡面所有内容,而且都認識。)

python RTL自動生成_最近很火的文章自動生成器,python源碼公開了(内附python代碼)第一步: 導入相關python包第二步:參數設定第三步:一個簡單的檔案讀取工具函數第四步:模型類的初始化第五步:繼續完善模型類,增加一些常用子產品第六步:給模型類添加一個最重要的函數 -- 生成文章的主流程第七步:主函數調用

第二步:參數設定

class CONF:    path = "data.json"      # 資料路徑    article_length = 6000   # 文章字數    repeat_rate = 2         # 句子重複度
           

這裡是個人程式設計的習慣,我習慣把一些配置,例如:檔案路徑、配置參數統一放在一個類中。當然,實際項目開發的時候,是用config 檔案存放,不會直接寫在代碼裡,這裡為了示範友善,就寫在一起,也友善運作。

python RTL自動生成_最近很火的文章自動生成器,python源碼公開了(内附python代碼)第一步: 導入相關python包第二步:參數設定第三步:一個簡單的檔案讀取工具函數第四步:模型類的初始化第五步:繼續完善模型類,增加一些常用子產品第六步:給模型類添加一個最重要的函數 -- 生成文章的主流程第七步:主函數調用

第三步:一個簡單的檔案讀取工具函數

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代碼)第一步: 導入相關python包第二步:參數設定第三步:一個簡單的檔案讀取工具函數第四步:模型類的初始化第五步:繼續完善模型類,增加一些常用子產品第六步:給模型類添加一個最重要的函數 -- 生成文章的主流程第七步:主函數調用

第四步:模型類的初始化

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代碼)第一步: 導入相關python包第二步:參數設定第三步:一個簡單的檔案讀取工具函數第四步:模型類的初始化第五步:繼續完善模型類,增加一些常用子產品第六步:給模型類添加一個最重要的函數 -- 生成文章的主流程第七步:主函數調用

第五步:繼續完善模型類,增加一些常用子產品

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代碼)第一步: 導入相關python包第二步:參數設定第三步:一個簡單的檔案讀取工具函數第四步:模型類的初始化第五步:繼續完善模型類,增加一些常用子產品第六步:給模型類添加一個最重要的函數 -- 生成文章的主流程第七步:主函數調用

第六步:給模型類添加一個最重要的函數 -- 生成文章的主流程

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代碼)第一步: 導入相關python包第二步:參數設定第三步:一個簡單的檔案讀取工具函數第四步:模型類的初始化第五步:繼續完善模型類,增加一些常用子產品第六步:給模型類添加一個最重要的函數 -- 生成文章的主流程第七步:主函數調用

第七步:主函數調用

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代碼)第一步: 導入相關python包第二步:參數設定第三步:一個簡單的檔案讀取工具函數第四步:模型類的初始化第五步:繼續完善模型類,增加一些常用子產品第六步:給模型類添加一個最重要的函數 -- 生成文章的主流程第七步:主函數調用

好了,讓我們把代碼跑起來。輸入一個主題:“好好學習”,不到一秒就生成一篇文章啦。

前端頁面輸出:

python RTL自動生成_最近很火的文章自動生成器,python源碼公開了(内附python代碼)第一步: 導入相關python包第二步:參數設定第三步:一個簡單的檔案讀取工具函數第四步:模型類的初始化第五步:繼續完善模型類,增加一些常用子產品第六步:給模型類添加一個最重要的函數 -- 生成文章的主流程第七步:主函數調用

後端輸出:

python RTL自動生成_最近很火的文章自動生成器,python源碼公開了(内附python代碼)第一步: 導入相關python包第二步:參數設定第三步:一個簡單的檔案讀取工具函數第四步:模型類的初始化第五步:繼續完善模型類,增加一些常用子產品第六步:給模型類添加一個最重要的函數 -- 生成文章的主流程第七步:主函數調用

如果有疑問想擷取源碼(其實代碼都在上面),可以背景私信我,回複:python文章生成。 我把源碼發你。最後,感謝大家的閱讀,祝大家工作生活愉快!