Begin

因为疫情不开学了,在家上体育课。老师非要写几十篇体育笔记。所以有了这个程序。

使用Python-Docx处理Word文件。参照狗屁不通文章生成器的套路生成锻炼的感想。

其他的都是固定的写法。

一开始试着用了GPT2 Chinese训练好的现成模型,结果发现输入体育相关的关键词返回的是这样的段落

这是用言情小说训练出来的模型??

运行结果

代码

使用到的JSON数据文件

{
"famous":[
"爱迪生a,天才是百分之一的勤奋加百分之九十九的汗水。b",
"毛泽东a,身体是革命的本钱。b",
"伏尔泰a,生命在于运动。b",
"查尔斯·史a,一个人几乎可以在任何他怀有无限热忱的事情上成功。b",
"培根说过,深窥自己的心,而后发觉一切的奇迹在你自己。b",
"歌德曾经a,流水在碰到底处时才会释放活力。b",
"戴尔·卡耐基a,多数人都拥有自己不了解的能力和机会,都有可能做到未曾梦想的事情。b",
"白哲特a,坚强的信念能赢得强者的心,并使他们变得更坚强。b",
"伏尔泰a,不经巨大的困难,不会有伟大的事业。b",
"富勒曾经a,苦难磨炼一些人,也毁灭另一些人。b",
"文森特·皮尔a,改变你的想法,你就改变了自己的世界。b",
"拿破仑·希尔a,不要等待,时机永远不会恰到好处。b",
"塞涅卡a,生命如同寓言,其价值不在与长短,而在与内容。b",
"奥普拉·温弗瑞a,你相信什么,你就成为什么样的人。b",
"吕凯特a,生命不可能有两次,但许多人连一次也不善于度过。b",
"莎士比亚a,人的一生是短的,但如果卑劣地过这一生,就太长了。b",
"笛卡儿a,我的努力求学没有得到别的好处,只不过是愈来愈发觉自己的无知。b",
"左拉a,生活的道路一旦选定,就要勇敢地走到底,决不回头。b",
"米歇潘a,生命是一条艰险的峡谷,只有勇敢的人才能通过。b",
"吉姆·罗恩a,要么你主宰生活,要么你被生活主宰。b",
"日本谚语a,不幸可能成为通向幸福的桥梁。b",
"海贝尔a,人生就是学校。在那里,与其说好的教师是幸福,不如说好的教师是不幸。b",
"杰纳勒尔·乔治·S·巴顿a,接受挑战,就可以享受胜利的喜悦。b",
"德谟克利特a,节制使快乐增加并使享受加强。b",
"裴斯泰洛齐a,今天应做的事没有做,明天再早也是耽误了。b",
"歌德a,决定一个人的一生,以及整个命运的,只是一瞬之间。b",
"卡耐基a,一个不注意小事情的人,永远不会成就大事业。b",
"卢梭a,浪费时间是一桩大罪过。b",
"康德a,既然我已经踏上这条道路,那么,任何东西都不应妨碍我沿着这条路走下去。b",
"克劳斯·莫瑟爵士a,教育需要花费钱,而无知也是一样。b",
"伏尔泰a,坚持意志伟大的事业需要始终不渝的精神。b",
"亚伯拉罕·林肯a,你活了多少岁不算什么,重要的是你是如何度过这些岁月的。b",
"韩非a,内外相应,言行相称。b",
"富兰克林a,你热爱生命吗?那么别浪费时间,因为时间是组成生命的材料。b",
"马尔顿a,坚强的信心,能使平凡的人做出惊人的事业。b",
"笛卡儿a,读一切好书,就是和许多高尚的人谈话。b",
"塞涅卡a,真正的人生,只有在经过艰难卓绝的斗争之后才能实现。b",
"易卜生a,伟大的事业,需要决心,能力,组织和责任感。b",
"歌德a,没有人事先了解自己到底有多大的力量,直到他试过以后才知道。b",
"达尔文a,敢于浪费哪怕一个钟头时间的人,说明他还不懂得珍惜生命的全部价值。b",
"佚名a,感激每一个新的挑战,因为它会锻造你的意志和品格。b",
"奥斯特洛夫斯基a,共同的事业,共同的斗争,可以使人们产生忍受一切的力量。 b",
"苏轼a,古之立大事者,不惟有超世之才,亦必有坚忍不拔之志。b",
"王阳明a,故立志者,为学之心也;为学者,立志之事也。b",
"歌德a,读一本好书,就如同和一个高尚的人在交谈。b",
"乌申斯基a,学习是劳动,是充满思想的劳动。b",
"别林斯基a,好的书籍是最贵重的珍宝。b",
"富兰克林a,读书是易事,思索是难事,但两者缺一,便全无用处。b",
"鲁巴金a,读书是在别人思想的帮助下,建立起自己的思想。b",
"培根a,合理安排时间,就等于节约时间。b",
"屠格涅夫a,你想成为幸福的人吗?但愿你首先学会吃得起苦。b",
"莎士比亚a,抛弃时间的人,时间也抛弃他。b",
"叔本华a,普通人只想到如何度过时间,有才能的人设法利用时间。b",
"博a,一次失败,只是证明我们成功的决心还够坚强。 维b",
"拉罗什夫科a,取得成就时坚持不懈,要比遭到失败时顽强不屈更重要。b",
"莎士比亚a,人的一生是短的,但如果卑劣地过这一生,就太长了。b",
"俾斯麦a,失败是坚忍的最后考验。b",
"池田大作a,不要回避苦恼和困难,挺起身来向它挑战,进而克服它。b",
"莎士比亚a,那脑袋里的智慧,就像打火石里的火花一样,不去打它是不肯出来的。b",
"希腊a,最困难的事情就是认识自己。b",
"黑塞a,有勇气承担命运这才是英雄好汉。b",
"非洲a,最灵繁的人也看不见自己的背脊。b",
"培根a,阅读使人充实,会谈使人敏捷,写作使人精确。b",
"斯宾诺莎a,最大的骄傲于最大的自卑都表示心灵的最软弱无力。b",
"西班牙a,自知之明是最难得的知识。b",
"塞内加a,勇气通往天堂,怯懦通往地狱。b",
"邓拓a,越是没有本领的就越加自命不凡。b",
"爱尔兰a,越是无能的人,越喜欢挑剔别人的错儿。b",
"歌德a,意志坚强的人能把世界放在手中像泥块一样任意揉捏。b",
"迈克尔·F·斯特利a,最具挑战性的挑战莫过于提升自我。b",
"爱迪生a,失败也是我需要的,它和成功对我一样有价值。b",
"罗素·贝克a,一个人即使已登上顶峰,也仍要自强不息。b",
"马云a,最大的挑战和突破在于用人,而用人最大的突破在于信任人。b",
"培根a,要知道对好事的称颂过于夸大,也会招来人们的反感轻蔑和嫉妒。b",
"莫扎特a,谁和我一样用功,谁就会和我一样成功。b",
"马克思a,一切节省,归根到底都归结为时间的节省。b",
"莎士比亚a,意志命运往往背道而驰,决心到最后会全部推倒。b",
"卡莱尔a,过去一切时代的精华尽在书中。b",
"培根a,深窥自己的心,而后发觉一切的奇迹在你自己。b",
"罗曼·罗兰a,只有把抱怨环境的心情,化为上进的力量,才是成功的保证。b",
"孔子a,知之者不如好之者,好之者不如乐之者。b",
"达·芬奇a,大胆和坚定的决心能够抵得上武器的精良。b",
"叔本华a,意志是一个强壮的盲人,倚靠在明眼的跛子肩上。b",
"黑格尔a,只有永远躺在泥坑里的人,才不会再掉进坑里。b",
"普列姆昌德a,希望的灯一旦熄灭,生活刹那间变成了一片黑暗。b",
"维龙a,要成功不需要什么特别的才能,只要把你能做的小事做得好就行了。b",
"郭沫若a,形成天才的决定因素应该是勤奋。b",
"洛克a,学到很多东西的诀窍,就是一下子不要学很多。b",
"拉罗什福科a,我们唯一不会改正的缺点是软弱。b",
"亚伯拉罕·林肯a,我这个人走得很慢,但是我从不后退。b",
"美华纳a,勿问成功的秘诀为何,且尽全力做你应该做的事吧。b",
"俾斯麦a,对于不屈不挠的人来说,没有失败这回事。b",
"阿卜·日·法拉兹a,学问是异常珍贵的东西,从任何源泉吸收都不可耻。b",
"白哲特a,坚强的信念能赢得强者的心,并使他们变得更坚强。 b",
"查尔斯·史考伯a,一个人几乎可以在任何他怀有无限热忱的事情上成功。 b",
"贝多芬a,卓越的人一大优点是:在不利与艰难的遭遇里百折不饶。b",
"莎士比亚a,本来无望的事,大胆尝试,往往能成功。b",
"卡耐基a,我们若已接受最坏的,就再没有什么损失。b",
"德国a,只有在人群中间,才能认识自己。b",
"史美尔斯a,书籍把我们引入最美好的社会,使我们认识各个时代的伟大智者。b",
"冯学峰a,当一个人用工作去迎接光明,光明很快就会来照耀着他。b",
"吉格·金克拉a,如果你能做梦,你就能实现它。b"
],
"bosh":[
"对于我们来说进行x体育锻炼非常重要,",
"多做x有助与我们提高身体素质,",
"做x将帮助我们更有效率的进行学习,",
"做x能够有效的改变人的情绪状态,",
"做x,能够有效的改变人的情绪状态。",
"多做x能够确定好自己的自我概念,以及对自己身体的客观评价。",
"进行x有利于人们培养坚强的品质。",
"做x能够有效的消除眼部疲劳。",
"x可以舒展身心,有助安眠及消除读书带来的压力",
"x可以陶冶情操,保持健康的心态,充分发挥个体的积极性、创造性和主动性,从而提高自信心和价值观,使个性在融洽的氛围中获得健康、和谐的发展。",
"做完这些运动,我出了一身汗。",
"好累啊。",
"今天跟着老师发的教程做了很多组x。",
"跟着教程做了x。",
"只有积极锻炼才能保持良好状态。",
"昨天做了x之后,我很快就睡着了,运动果然可以改善睡眠~",
"x利于减肥。运动时,会燃烧热量。",
"我完成了今天的任务。",
"我今天太累了,没有进行很久的体育锻炼。",
"做x可以改善",
"今天不是很累,",
"没有出很多汗,",
"加油呀~",
"每天都要加油!",
"做x虽然很累,但是很开心~",
"x可以调节人体紧张情绪。",
"我们要克服身体的惰性,",
"做了几组x感觉人生升华了~哈哈。",
"每天都要坚持做x,",
"今天和同学一起交流了做x的经验。"
],
"after":[
"看了这句话,让我坚定了坚持做x的决心。",
"这句话让我更加重视体育锻炼,",
"让我有了坚持的勇气。",
"我也想和他们一样优秀。",
"这句话勉励我继续做完今天的体育锻炼。",
"这句话让我有了锻炼的决心。",
"这句话让我放下手中的手机去做x 。",
"我们要向他们学习。",
"这句话让我放下游戏去做x 。",
"启示我们应该科学合理积极地进行体育锻炼,塑造出一个更强壮、更健康、更美好的自己!"
],
"before":[
"曾经说过",
"在不经意间这样说过",
"说过一句著名的话",
"曾经提到过",
"说过一句富有哲理的话",
"经常讲",
"曾教育我们",
"经常教育年轻人"
]
}

'''
@Description: 生成体育日记
@Author: moluuser
@Date: 2020-05-22 21:23:35
@LastEditTime: 2020-05-23 16:48:54
'''
# -*- coding: UTF-8 -*-
# 感谢 https://github.com/menzi11/BullshitGenerator

import re
import shutil
import os
import random
import json
import datetime
from docx import Document
from docx.shared import Inches
from docx.shared import Pt
from docx.oxml.ns import qn
from docx.enum.text import WD_ALIGN_PARAGRAPH


# 男生任务
male_d1 = ["左右开合跳", "俯卧撑", "仰卧举腿", "深蹲"]
male_d3 = ["扶墙高抬腿跑", "身体反弓前后摆腿", "平板支撑", "空中脚踏车", "原地前后动态弓步"]
male_d5 = ["左右开合跳", "原地快速高抬腿跑", "底姿俯卧撑", "仰卧臀桥", "波比跳"]
# 女生任务
girl_d1 = ["左右开合跳", "跪姿俯卧撑", "仰卧举腿", "深蹲"]
girl_d3 = ["扶墙高抬腿跑", "身体反弓前后摆腿", "平板支撑", "空中脚踏车", "原地前后动态弓步"]
girl_d5 = ["左右开合跳", "原地快速高抬腿跑", "高姿俯卧撑", "仰卧臀桥", "波比跳"]

'''
@description: 初始化程序
@param {type} 
@return: 
'''


class programLoad():
    def load():
        beginDate = input("请输入起始日期例如2020-01-01:")
        endDate = input("请输入结束日期例如2020-01-01:")
        sex = int(input("请输入性别(男生输入1,女生输入0):"))
        uname = input("输入姓名:")
        uno = input("输入学号:")
        uteacher = input("输入任课教师:")
        # 简单检测用户输入
        # 确保end大于begin,程序不做检测
        while sex not in (0, 1) or re.match("\d{4}-\d{2}-\d{2}", beginDate) == None or re.match("\d{4}-\d{2}-\d{2}", endDate) == None:
            print("输入信息错误,请核对!")
            beginDate = input("请输入起始日期例如2020-01-01: ")
            endDate = input("请输入结束日期例如2020-01-01: ")
            sex = int(input("请输入性别(男生输入1,女生输入0): "))

    def readJSON(fileName=""):
        if fileName != '':
            strList = fileName.split(".")
            if strList[len(strList)-1].lower() == "json":
                with open(fileName, mode='r', encoding="utf-8") as file:
                    return json.loads(file.read())


# 导入语料
data = programLoad.readJSON("data.json")
sayings = data["famous"]
beforSay = data["before"]
afterSay = data['after']
bosh = data['bosh']

'''
@description: 生产doc内容
@param {type} 
@return: 
'''


class diaryFactory():
    def getFinish(num):
        tmp = str()
        if num == 1:
            for i in male_d1:
                tmp += diaryFactory.buildExec(i) + "    "
        elif num == 3:
            for i in male_d3:
                tmp += diaryFactory.buildExec(i) + "    "
        elif num == 5:
            for i in male_d5:
                tmp += diaryFactory.buildExec(i) + "    "
        return "我完成了:"+tmp

    # 返回固定文章头

    def buildTitle(uname, uno, uteacher, cdate):
        return "姓名:" + uname + "  " + "学号:" + uno + "\r" + "任课教师:" + uteacher + "  " + "上课时间:" + cdate

    # 返回练习任务
    # 男1女0
    # flag非0则返回feeling
    def buildBody(sex, week, flag=0):
        # 对List进行混洗
        if flag == 0:
            if sex == 1:
                if week == 1:
                    random.shuffle(male_d1)
                    return male_d1
                elif week == 3:
                    random.shuffle(male_d3)
                    return male_d3
                elif week == 5:
                    random.shuffle(male_d5)
                    return male_d5
            elif sex == 0:
                # 女生
                if week == 1:
                    random.shuffle(girl_d1)
                    return girl_d1
                elif week == 3:
                    random.shuffle(girl_d3)
                    return girl_d3
                elif week == 5:
                    random.shuffle(girl_d5)
                    return girl_d5
            else:
                print("buildBody ERROR!")
                return
        else:
            # 获取feeling
            if sex == 1:
                if week == 1:
                    return feelFactory.build().replace("x", str(random.sample(male_d1, 1)), 2).replace("x", str(random.sample(male_d1, 1)), 2).replace("x", str(random.sample(male_d1, 1)), 2).replace("x", str(random.sample(male_d1, 1)), 2).replace("x", str(random.sample(male_d1, 1))).replace("['", "").replace("']", "")
                if week == 3:
                    return feelFactory.build().replace("x", str(random.sample(male_d3, 1)), 2).replace("x", str(random.sample(male_d3, 1)), 2).replace("x", str(random.sample(male_d3, 1)), 2).replace("x", str(random.sample(male_d3, 1)), 2).replace("x", str(random.sample(male_d3, 1))).replace("['", "").replace("']", "")
                if week == 5:
                    return feelFactory.build().replace("x", str(random.sample(male_d5, 1)), 2).replace("x", str(random.sample(male_d5, 1)), 2).replace("x", str(random.sample(male_d5, 1)), 2).replace("x", str(random.sample(male_d5, 1)), 2).replace("x", str(random.sample(male_d5, 1))).replace("['", "").replace("']", "")
            elif sex == 0:
                # 女生
                if week == 1:
                    return feelFactory.build().replace("x", str(random.sample(girl_d1, 1)), 2).replace("x", str(random.sample(girl_d1, 1)), 2).replace("x", str(random.sample(girl_d1, 1)), 2).replace("x", str(random.sample(girl_d1, 1)), 2).replace("x", str(random.sample(girl_d1, 1))).replace("['", "").replace("']", "")
                if week == 3:
                    return feelFactory.build().replace("x", str(random.sample(girl_d3, 1)), 2).replace("x", str(random.sample(girl_d3, 1)), 2).replace("x", str(random.sample(girl_d3, 1)), 2).replace("x", str(random.sample(girl_d3, 1)), 2).replace("x", str(random.sample(girl_d3, 1))).replace("['", "").replace("']", "")
                if week == 5:
                    return feelFactory.build().replace("x", str(random.sample(girl_d5, 1)), 2).replace("x", str(random.sample(girl_d5, 1)), 2).replace("x", str(random.sample(girl_d5, 1)), 2).replace("x", str(random.sample(girl_d5, 1)), 2).replace("x", str(random.sample(girl_d5, 1))).replace("['", "").replace("']", "")
            else:
                print("buildBody ERROR!")
                return

    # 我完成了n次
    # 降低复杂度,不对运动项目进行处理
    # 平板支撑单位为秒
    def buildExec(obj):
        unit = ["个", "次"]
        if random.randint(1, 2) > 1:
            return obj + str(random.randint(25, 40)) + ("秒" if obj == "平板支撑" else (str(random.sample(unit, 1))[2:3]))
        else:
            return obj + str(random.randint(25, 30)) + ("秒" if obj == "平板支撑" else (str(random.sample(unit, 1))[2:3])) + str(random.randint(1, 3)) + "组"


'''
@description: 生产feeling,使用diaryFactory调用
@param {type} 
@return: 
'''


class feelFactory():
    def build():
        feeling = str()
        while len(feeling) < 200:
            ra = random.randint(0, 100)
            if ra < 20:
                feeling += feelFactory.getSaying()
            else:
                feeling += next(feelFactory.shuffle(bosh))
        return feeling

    def shuffle(lis):
        lisPool = list(lis) * 2
        while True:
            random.shuffle(lisPool)
            for i in lisPool:
                yield i

    def getSaying():
        tmp = next(feelFactory.shuffle(sayings))
        tmp = tmp.replace("a", random.choice(beforSay))
        tmp = tmp.replace("b", random.choice(afterSay))
        return tmp


'''
@description: 生产doc
@param {type} 
@return: 
'''


class docFactory():
    def createDoc(cdate, sex, uname, uno, uteacher):
        dno = datetime.datetime.strptime(
            cdate, "%Y-%m-%d").weekday() + 1
        weekno = str()
        if dno == 1:
            weekno = "星期一"
        elif dno == 3:
            weekno = "星期三"
        elif dno == 5:
            weekno = "星期五"
        document = Document()
        document.styles['Normal'].font.name = u'微软雅黑'
        document.styles['Normal']._element.rPr.rFonts.set(
            qn('w:eastAsia'), u'微软雅黑')
        p = document.add_paragraph()
        p.alignment = WD_ALIGN_PARAGRAPH.CENTER  # 居中
        run = p.add_run("体育练习日记")
        run.font.size = Pt(22)

        pp = document.add_paragraph()
        run = pp.add_run(diaryFactory.buildTitle(
            uname, uno, uteacher, cdate) + "  " + weekno+"\r")
        pp.alignment = WD_ALIGN_PARAGRAPH.CENTER  # 居中

        ppp = document.add_paragraph()
        run = ppp.add_run("练习内容:" + str(diaryFactory.buildBody(sex, dno)
                                        ).replace("[", "").replace("]", "").replace("'", ""))

        pppp = document.add_paragraph()
        run = pppp.add_run(diaryFactory.getFinish(dno))

        ppppp = document.add_paragraph()
        run = ppppp.add_run("我的感受:" + diaryFactory.buildBody(sex, dno, 1))

        document.save(cdate + "练习日记.doc")
        shutil.move(cdate + "练习日记.doc", "./diary")

    def exportAll(beginDate, endDate, lis):
        begin = datetime.datetime.strptime(beginDate, "%Y-%m-%d")
        end = datetime.datetime.strptime(endDate, "%Y-%m-%d")
        for i in range((end - begin).days+1):
            day = (str(begin + datetime.timedelta(days=i)))[0:10]
            if (datetime.datetime.strptime(day, "%Y-%m-%d").weekday() + 1) in [1, 3, 5]:
                docFactory.createDoc(day, lis[0], lis[1], lis[2], lis[3])
                # print(day + "  " + str(datetime.datetime.strptime(day, "%Y-%m-%d").weekday() + 1))


if __name__ == "__main__":
    # programload.Load()
    folder = os.path.exists("./diary")
    if not folder:
        os.makedirs("./diary")
    lis = (1, "姓名", "学号", "任课老师")
    docFactory.exportAll("2020-03-01", "2020-06-01", lis)

参考链接:




扫一扫在手机打开当前页