Files
JspaceAI/corpus/generate_xiaoban_logs.py

234 lines
20 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# -*- coding: utf-8 -*-
"""小班成长日志批量生成器。
依据《3-6岁儿童学习与发展指南》与小班健康课程全年分周主题(教材/幼儿园/小班/健康/小班健康.md)。
一天一个文件,落在 教材/幼儿园/小班/成长日志/,保留已有手工样本。
"""
import os
from datetime import date, timedelta
import random
BASE = os.path.dirname(os.path.abspath(__file__))
OUT = os.path.join(BASE, "教材", "幼儿园", "小班", "成长日志")
os.makedirs(OUT, exist_ok=True)
random.seed(20240902)
# ---------- 幼儿名册22人含已写样本小宇/朵朵/浩浩/欣欣)----------
CHILDREN = [
("小宇", "", "3岁2个月"), ("朵朵", "", "3岁4个月"), ("浩浩", "", "3岁1个月"),
("欣欣", "", "3岁3个月"), ("阳阳", "", "3岁5个月"), ("妞妞", "", "3岁2个月"),
("牛牛", "", "3岁3个月"), ("贝贝", "", "3岁1个月"), ("明明", "", "3岁4个月"),
("乐乐", "", "3岁2个月"), ("笑笑", "", "3岁3个月"), ("果果", "", "3岁5个月"),
("轩轩", "", "3岁1个月"), ("丫丫", "", "3岁2个月"), ("洋洋", "", "3岁4个月"),
("恬恬", "", "3岁3个月"), ("晨晨", "", "3岁2个月"), ("可可", "", "3岁4个月"),
("壮壮", "", "3岁5个月"), ("囡囡", "", "3岁1个月"), ("淘淘", "", "3岁3个月"),
("安安", "", "3岁2个月"),
]
# ---------- 40周主题周一到周五取自小班健康全年分周 ----------
WEEKS = {
1: ["我会洗手——学习六步洗手法,儿歌《洗手歌》", "喝水小达人——口渴主动喝水,排队接水", "午睡乖乖——学习脱鞋、盖被、安静入睡", "我要上厕所——区分男女生厕所,便后冲水", "情绪抱抱——想妈妈时找老师抱抱,学习表达情绪"],
2: ["我会坐好——吃饭坐定,一手扶碗一手拿勺", "不挑食——认识青菜、肉、米饭,尝试都吃一点", "细嚼慢咽——一口饭一口菜,不奔跑吃饭", "饭后擦嘴——擦嘴、漱口、放碗筷", "文明进餐——不大声说话,不剩饭"],
3: ["认识红绿灯——红灯停、绿灯行、黄灯等一等", "过马路走斑马线——牵着大人手,左右看", "不在马路上跑——马路危险,不能乱跑", "认识交通标志——注意行人、禁止通行等", "我是小司机——骑小车游戏,遵守规则"],
4: ["认识五官——眼睛、鼻子、耳朵、嘴巴、眉毛", "保护眼睛——不揉眼睛,少看电视", "保护牙齿——早晚刷牙,少吃糖", "我的小手——会洗手、会收拾玩具", "我的小脚——走路稳,不摔跤"],
5: ["走走跑跑——听信号走、跑、停", "钻山洞——弯腰钻过拱门,不碰头", "跳一跳——双脚原地跳,轻轻落地", "投掷小球——向前投掷,对准目标", "爬爬乐——手脚协调爬过垫子"],
6: ["爱吃蔬菜——青菜、胡萝卜、黄瓜都要吃", "水果真好吃——苹果、香蕉、梨,每天一种", "多喝白开水——少喝饮料,多喝温水", "少吃零食——饭前不吃零食", "营养小餐盘——认识主食、菜、肉、水果"],
7: ["不跟陌生人走——陌生人给糖不能要", "记住家长电话——知道爸爸妈妈名字", "找不到大人怎么办——找警察或工作人员", "安全上下楼梯——扶栏杆,不推挤", "尖尖的东西不能碰——剪刀、铅笔尖要小心"],
8: ["平衡木——张开手臂慢慢走", "拍球游戏——学习拍球一下、两下", "绕障碍跑——绕过小桶不碰到", "合作游戏——两人拉小车", "体育小达人——展示本周学到的动作"],
9: ["自己吃饭——不用大人喂,独立进餐", "饭后漱口——漱口三遍,保护牙齿", "吃饭不说话——嘴里有饭不说话", "不剩饭——吃多少盛多少", "整理餐桌——把碗放进水池"],
10: ["勤剪指甲——指甲长了要剪", "擦鼻涕——用纸巾,擦完扔垃圾桶", "咳嗽捂住嘴——不对着人咳嗽", "勤换衣服——衣服脏了换下来", "每天洗脸——早上洗脸,保持干净"],
11: ["天冷加衣——根据天气穿脱衣服", "运动出汗——出汗后擦汗、喝水", "开窗通风——家里和教室要开窗", "生病要休息——不舒服告诉老师", "勤洗手防病菌——饭前便后、回家后都洗手"],
12: ["滑滑梯要排队——不推不挤,轮流玩", "秋千轻轻荡——抓紧绳子,不乱踢", "不爬高处——不爬窗、不爬桌子", "玩具不乱扔——收拾玩具,不绊倒", "户外安全我知道——总结安全规则"],
13: ["认识冬装——棉衣、帽子、手套、围巾", "我会穿衣——先穿袖子,再扣扣子", "穿脱外套——学会自己穿脱外套", "鞋子穿对——左右脚分清,不踩鞋跟", "整理衣物——把帽子手套放固定位置"],
14: ["晨练不怕冷——早上出来做操", "跑步热身——运动前先跑一跑", "跳绳准备——学习握绳,摇绳", "拍球游戏——巩固拍球", "冬季运动会——小组接力赛"],
15: ["多喝温水——冬天也要多喝水", "出门戴口罩——雾霾天戴口罩", "不用手揉眼睛——手上细菌多", "室内安全——远离暖气、热水袋", "健康生活我知道——总结冬季健康习惯"],
16: ["过节也要早睡——不熬夜,按时睡", "少吃糖果——保护牙齿", "安全装饰教室——不碰尖尖物品", "我会排队——表演节目排队上场", "元旦联欢——唱歌跳舞,开心过节"],
17: ["不玩火——火柴、打火机不能玩", "不碰插座——电很危险", "热水要小心——烫的东西不能碰", "不乱吃药——药品不是糖", "不给陌生人开门——在家大人才能开门"],
18: ["牵着大人的手——出门不松手", "不在马路上跑——马路上车多", "认识安全出口——商场里找绿色标志", "走丢怎么办——原地等或找工作人员", "我是安全小卫士——复习安全知识"],
19: ["春节也要按时吃饭——不暴饮暴食", "少吃糖果和零食——保护牙齿", "按时睡觉——不熬夜看烟花", "走亲访友讲礼貌——叫人、不挑食", "假期安全——过年不玩鞭炮"],
20: ["拜年礼仪——学说新年好、恭喜发财", "分享春节趣事——用三句话讲过年", "情绪安定——回到幼儿园不哭", "作息调整——早睡早起,不赖床", "春季健康——脱衣服要适当"],
21: ["小兔跳跳——学小兔双脚跳", "小鸭走路——摇摇摆摆走", "小马跑——跑得快又稳", "小乌龟爬——手脚爬地", "动物运动会——模仿动物动作比赛"],
22: ["我会拍球——学习拍一下接球", "连续拍球——尝试连续拍两下", "边走边拍——边走边拍球", "传球游戏——两人互相传球", "拍球小能手——展示"],
23: ["跳过小河——跳过地上的线", "钻过山洞——钻拱形门", "平衡走——走平衡木", "投掷沙包——向前扔沙包", "综合运动——跑、跳、钻、投"],
24: ["洗手再检查——六步洗手我会了", "饭后刷牙——学习正确刷牙", "整理小书包——把东西放好", "爱护环境——不乱扔垃圾", "卫生小标兵——总结"],
25: ["我会刷牙——上下刷、左右刷", "洗脸的步骤——先擦眼睛,再擦脸", "洗头发——洗头不哭,闭眼睛", "洗脚——睡前洗脚,身体舒服", "洗澡安全——浴室地滑要小心"],
26: ["玩具回家——玩完玩具收好", "衣服叠一叠——学习叠小衣服", "图书摆整齐——书脊朝外摆好", "鞋子摆好——鞋尖朝外放", "我会整理小柜——整理自己的柜子"],
27: ["垃圾分类——认识可回收、厨余、其他垃圾", "节约用水——洗手关小水", "节约用电——离开关灯", "爱护花草——不摘花、不踩草", "环保小卫士——总结"],
28: ["自己的事情自己做——穿衣、吃饭", "帮老师摆椅子——做班级小帮手", "帮妈妈递东西——做家里小帮手", "感谢劳动者——认识清洁工、医生、警察", "劳动节放假安全教育"],
29: ["坐汽车系安全带——坐车要坐安全座椅", "走人行道——不在马路上走", "看交通标志——红灯停、绿灯行", "不在车边玩——停车场危险", "我是交通小警察——游戏"],
30: ["连续拍球——尝试拍3-5下", "单脚站立——练平衡", "跨跳——跨过小河沟", "投掷准——把沙包投进筐", "运动展示——全班展示"],
31: ["我会擦桌子——用小抹布擦桌子", "我会浇花——给植物浇水", "我会叠被子——学习叠小被子", "我会穿鞋子——分清左右", "劳动小能手——表扬"],
32: ["排练节目——排队站好", "舞台安全——上下台小心", "化妆讲卫生——不揉眼睛", "多吃蔬菜——保持体力", "六一联欢——开心表演"],
33: ["多喝水——天热多喝水", "防晒——出门戴帽子", "防蚊虫——穿长袖,喷防蚊液", "不在太阳下久玩——找阴凉处休息", "游泳安全——大人陪同才能下水"],
34: ["少吃冷饮——冷饮吃多了肚子疼", "吃干净水果——水果要洗干净", "饭菜不隔夜——夏天饭菜容易坏", "多喝水不中暑——出汗多补水", "夏季饮食安全——总结"],
35: ["早上运动——避开中午最热", "运动后休息——出汗了歇一歇", "穿透气衣服——穿棉质衣服", "午睡重要——夏天也要午睡", "健康生活过夏天——总结"],
36: ["认识端午节——吃粽子、赛龙舟", "粽子不能多吃——糯米不好消化", "河边安全——看龙舟要跟大人", "挂艾草——认识艾草菖蒲", "端午节放假安全"],
37: ["在家安全——不爬高、不玩火", "不给陌生人开门——不认识的人不开门", "出门找大人——去哪里告诉大人", "不吃陌生人东西——糖果饮料不要", "记住家庭地址——知道小区名、门牌号"],
38: ["按时起床——不睡懒觉", "按时吃饭——三餐规律", "少看电视——每天不超过20分钟", "多喝水——夏天多喝水", "帮妈妈做小事——递东西、擦桌子"],
39: ["开空调要适度——温度不要太低", "出汗换衣服——湿衣服换下来", "中午不出门——最热时在家休息", "吃西瓜适量——西瓜好吃不多吃", "夏季安全总结"],
40: ["复习洗手——六步洗手", "复习吃饭——自己吃、不挑食", "复习安全——红灯停绿灯行", "复习运动——拍球、跳一跳", "我升中班啦——庆祝"],
}
# 每周首个工作日(周一),依教学日历并避开长假
WEEK_START = [
date(2024,9,2), date(2024,9,9), date(2024,9,16), date(2024,9,23), date(2024,10,8),
date(2024,10,14), date(2024,10,21), date(2024,10,28), date(2024,11,4), date(2024,11,11),
date(2024,11,18), date(2024,11,25), date(2024,12,2), date(2024,12,9), date(2024,12,16),
date(2024,12,23), date(2025,1,6), date(2025,1,13), date(2025,1,20), date(2025,2,24),
date(2025,3,3), date(2025,3,10), date(2025,3,17), date(2025,3,24), date(2025,3,31),
date(2025,4,7), date(2025,4,14), date(2025,4,21), date(2025,4,28), date(2025,5,6),
date(2025,5,12), date(2025,5,19), date(2025,5,26), date(2025,6,2), date(2025,6,9),
date(2025,6,16), date(2025,6,23), date(2025,6,30), date(2025,7,7), date(2025,7,14),
]
WEEKDAY_CN = ["星期一","星期二","星期三","星期四","星期五"]
def holiday_set():
s = set()
for d in [(2024,9,15),(2024,9,16),(2024,9,17)]: s.add(date(*d)) # 中秋
for n in range(1,8): s.add(date(2024,10,n)) # 国庆
s.add(date(2025,1,1)) # 元旦
for n in range(20,31): s.add(date(2025,1,n)) # 寒假1月
for n in range(1,23): s.add(date(2025,2,n)) # 寒假2月
for d in [(2025,4,4),(2025,4,5),(2025,4,6)]: s.add(date(*d)) # 清明
for n in range(1,6): s.add(date(2025,5,n)) # 劳动
for d in [(2025,5,31),(2025,6,1),(2025,6,2)]: s.add(date(*d)) # 端午
return s
HOLIDAY = holiday_set()
WEATHER = {
(9,10,11): ["","多云","","小雨"], (12,1,2): ["","多云","晴冷","小雪"],
(3,4,5): ["","多云","小雨",""], (6,7): ["","多云","雷阵雨","炎热"],
}
def weather_of(m):
for ks, v in WEATHER.items():
if m in ks: return random.choice(v)
return ""
def guess_domain(t):
if any(k in t for k in ["故事","儿歌","说话","表达","礼貌用语","阅读","","叫人","拜年"]): return "语言"
if any(k in t for k in ["","","","表演","美工","音乐","手工","联欢","节目"]): return "艺术"
if any(k in t for k in ["分类","","观察","探索","动物","植物","天气","光影","科学"]): return "科学"
if any(k in t for k in ["分享","排队","合作","规则","情绪","走亲访友","交往","社会","值日","劳动(社会性)"]): return "社会"
return "健康"
# 主领域详写行为池
BEHAVIOR = {
"健康": ["能独立完成动作并露出得意笑容", "起初需要教师示范,后慢慢跟做", "动作略显笨拙但坚持完成", "主动向同伴展示自己学会的本领", "在儿歌提示下顺利做到"],
"语言": ["能清楚说出相关短句", "愿意在集体前表达", "跟着教师念儿歌声音响亮", "用单词表达需求", "能回答教师的提问"],
"社会": ["主动与同伴互动", "在教师引导下学会等待", "把玩具分给朋友", "遵守班级规则", "情绪平稳、乐于参与"],
"科学": ["好奇地伸手探索", "观察到变化并指给教师看", "尝试比较与分类", '提出"为什么"的问题', "专注观察不分散"],
"艺术": ["随节奏摆动身体", "大胆用声音/动作表现", "专注完成自己的作品", "与同伴合作表演", "用色彩表达心情"],
}
STAGE_NOTE = {
"适应期": "入园初期,以稳定情绪、建立安全感与基本生活常规为主。",
"发展期": "情绪稳定后,各项生活自理与交往能力快速发展,活动参与度明显提高。",
"巩固期": "习惯基本养成,能在真实情境中迁移运用,并开始为升中班做准备。",
}
OTHER_DOMAIN_TPL = {
"健康": ["户外活动中动作较协调,大肌肉持续发展。", "进餐、如厕等生活环节节奏顺畅。", "午休能安静入睡,精力恢复良好。"],
"语言": ["听故事时注意力集中约8分钟。", "能用简单句与教师、同伴交流。", "喜欢跟着念儿歌,语音逐渐清晰。"],
"社会": ["愿意靠近同伴,出现平行游戏。", "在提醒下使用礼貌用语。", "初步体验轮流与等待。"],
"科学": ["对新鲜事物表现出好奇。", "在操作中感知因果与变化。", "能指认熟悉物品并命名。"],
"艺术": ["听到音乐自然会随节奏动作。", "美工活动敢大胆涂画。", "表演时乐于用声音表现情绪。"],
}
def stage_of(week):
if week <= 4: return "适应期"
if week <= 20: return "发展期"
return "巩固期"
def build(week, wd, d, child, theme, stage):
theme_short = theme.split("——")[0]
domain = guess_domain(theme)
weather = weather_of(d.month)
attend = min(22, 18 + week // 4) + random.choice([0,0,1,-1])
attend = max(15, min(22, attend))
# 时间线
timeline = (
f"| 8:00-8:30 | 晨检·接待 | 保健医测体温看手口;教师门口微笑迎接,{child[0]}主动问好 |\n"
f"| 9:00-9:30 | 集体教学 | 《{theme_short}》——{theme.split('——')[-1]} |\n"
f"| 9:30-10:00 | 区域游戏 | 幼儿按兴趣进入娃娃家、建构区、美工区、图书角 |\n"
f"| 10:00-10:30 | 户外游戏 | 依据主题开展体育或情景游戏 |\n"
f"| 11:00-11:30 | 午餐 | 练习用勺独立进餐,餐后收餐具 |\n"
f"| 12:00-14:30 | 午睡 | 听《睡觉歌》安静入睡 |\n"
f"| 15:00-15:30 | 离园 | 与家长拥抱道别,说\"明天见\" |"
)
# 五大领域
paras = []
order = ["健康","语言","社会","科学","艺术"]
for dom in order:
if dom == domain:
b = random.choice(BEHAVIOR[dom])
line = "- **%s**:今日重点。%s活动中,%s%s" % (dom, theme_short, child[0], b)
else:
line = "- **%s**%s" % (dom, random.choice(OTHER_DOMAIN_TPL[dom]))
paras.append(line)
domain_block = "\n".join(paras)
# 观察笔记
b2 = random.choice(BEHAVIOR[domain])
note = ("- **对象**%s%s%s\n- **目的**:观察其在「%s」中的%s发展。\n"
"- **情景描述**%s在活动中%s,教师及时鼓励,情绪积极。\n"
"- **分析**:符合《指南》小班\"%s\"典型表现,后续保持家园一致强化。") % (
child[0], child[1], child[2], theme_short, domain, child[0], b2,
{"健康":"动作协调与自理","语言":"倾听与表达","社会":"人际交往","科学":"好奇与探究","艺术":"感受与表现"}[domain])
# 家园联系
advice = {
"健康":"在家也用同样的步骤/儿歌巩固,不包办代替。",
"语言":"每天亲子共读,鼓励孩子用完整话说出需求。",
"社会":"创造与同伴玩耍机会,练习轮流与分享。",
"科学":"带孩子观察自然与生活现象,保护好奇心。",
"艺术":"多听儿歌、鼓励大胆涂画与表演,不追求像不像。",
}[domain]
# 明日
if wd < 4:
nxt = WEEKS[week][wd+1].split("——")[0]
else:
nxt = WEEKS[week+1][0].split("——")[0] if week < 40 else "升中班准备"
md = (
"# 小班成长日志 · %d%d%d日(%s%s\n\n"
"> 本月主题衔接小班健康课程第%d周。阶段特点:%s\n"
"> 记录人:主班教师 林老师 当日出勤应到22人实到%d人。\n\n"
"---\n\n## 一、今日概览\n\n| 项目 | 内容 |\n|------|------|\n"
"| 天气 | %s |\n| 当日主题 | %s |\n| 重点领域 | %s |\n| 重点观察幼儿 | %s%s%s |\n\n"
"---\n\n## 二、一日活动流程(时间线)\n\n| 时间 | 环节 | 内容与观察 |\n|------|------|-----------|\n%s\n\n"
"---\n\n## 三、五大领域观察记录\n\n%s\n\n"
"---\n\n## 四、教师观察笔记\n\n%s\n\n"
"---\n\n## 五、教师评语\n\n本周教学围绕「%s」展开,%s多数幼儿能在教师支持下参与并完成目标,"
"个别幼儿尚需反复练习,属正常发展规律,循序渐进即可。\n\n"
"---\n\n## 六、家园联系\n\n- **今日分享给家长**%s活动照片与视频片段。\n"
"- **家庭延伸建议**%s\n\n---\n\n## 七、明日计划\n\n1. 明日主题:《%s》。\n2. 延续今日重点,在游戏中巩固。\n"
) % (d.year, d.month, d.day, WEEKDAY_CN[wd], weather, week, STAGE_NOTE[stage],
attend, weather, theme, domain, child[0], child[1], child[2],
timeline, domain_block, note, theme_short, stage, theme_short, advice, nxt)
return md
def main():
cnt = 0
skip = 0
idx = 0
for wi, ws in enumerate(WEEK_START, start=1):
for wd in range(5):
d = ws + timedelta(days=wd)
if d in HOLIDAY:
continue
fname = "%04d-%02d-%02d.md" % (d.year, d.month, d.day)
fpath = os.path.join(OUT, fname)
if os.path.exists(fpath):
skip += 1
continue
child = CHILDREN[idx % len(CHILDREN)]
idx += 1
theme = WEEKS[wi][wd]
stage = stage_of(wi)
md = build(wi, wd, d, child, theme, stage)
with open(fpath, "w", encoding="utf-8") as f:
f.write(md)
cnt += 1
print("生成 %d 篇,跳过已存在(手工样本) %d 篇。" % (cnt, skip))
if __name__ == "__main__":
main()