gaokao-site/scripts/tuition_data.py

312 lines
11 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.

"""
河南高考志愿网站 - 学费数据模块
数据来源河南省发改委高等教育收费标准2024版
涵盖河南省主要公办高校,按学科分类定价
"""
# ============================================================
# 一、河南公办高校标准学费(学年制,每生每学年)
# ============================================================
# 普通本科
TUITION_PUBLIC_NORMAL = {
"普通类(文科)": 4400,
"普通类(理科)": 5000,
"医学类": 5500,
"艺术类": 8000,
"体育类": 5000,
"农林类": 4000,
}
# 中外合作办学(较高收费)
TUITION_JOINT_NORMAL = {
"中外合作办学(普通专业)": 18000,
"中外合作办学(艺术/医学类)": 22000,
"国际学院": 25000,
}
# 独立学院(民办)
TUITION_INDEPENDENT = {
"独立学院(普通专业)": 12000,
"独立学院(艺术类)": 15000,
}
# 高等职业院校
TUITION_VOCATIONAL = {
"高职(普通专业)": 4200,
"高职(艺术类)": 5000,
"高职(医科类)": 4800,
}
# 所有费率汇总
ALL_TUITION_RATES = {
**TUITION_PUBLIC_NORMAL,
**TUITION_JOINT_NORMAL,
**TUITION_INDEPENDENT,
**TUITION_VOCATIONAL,
}
# ============================================================
# 二、学校名称 → 学费标准 映射表
# ============================================================
# 格式:学校名: (学费标准描述, 学费金额)
# 优先级:精确匹配 > 关键字匹配 > 默认标准
SCHOOL_TUITION_MAP = {
# ---- 郑州大学(河南省最强综合性大学)----
# 主校区非医学专业按理科标准医学专业单独计5500
"郑州大学": ("普通类(理科)", 5000),
"郑州大学国际学院": ("国际学院", 25000),
"郑州大学(中外合作)": ("中外合作办学(普通专业)", 18000),
"郑州大学医学院": ("医学类", 5500),
# ---- 河南大学(双一流)----
"河南大学": ("普通类(文科)", 4400),
"河南大学(中外合作)": ("中外合作办学(普通专业)", 18000),
# ---- 河南师范大学 ----
"河南师范大学": ("普通类(文科)", 4400),
"河南师范大学(中外合作)": ("中外合作办学(普通专业)", 18000),
# ---- 河南科技大学 ----
"河南科技大学": ("普通类(理科)", 5000),
# ---- 河南理工大学 ----
"河南理工大学": ("普通类(理科)", 5000),
# ---- 河南农业大学 ----
"河南农业大学": ("农林类", 4000),
# ---- 河南工业大学 ----
"河南工业大学": ("普通类(理科)", 5000),
# ---- 华北水利水电大学 ----
"华北水利水电大学": ("普通类(理科)", 5000),
# ---- 郑州轻工业大学 ----
"郑州轻工业大学": ("普通类(理科)", 5000),
# ---- 中原工学院 ----
"中原工学院": ("普通类(理科)", 5000),
# ---- 河南财经政法大学 ----
"河南财经政法大学": ("普通类(文科)", 4400),
# ---- 郑州航空工业管理学院 ----
"郑州航空工业管理学院": ("普通类(文科)", 4400),
# ---- 河南中医药大学 ----
"河南中医药大学": ("医学类", 5500),
# ---- 新乡医学院 ----
"新乡医学院": ("医学类", 5500),
# ---- 河南开封科技传媒学院(独立学院)---- # 原河南大学民生学院
"河南开封科技传媒学院": ("独立学院(普通专业)", 12000),
# ---- 河南大学民生学院(已转设)----
"河南大学民生学院": ("独立学院(普通专业)", 12000),
# ---- 独立学院 ----
"河南师范大学新联学院": ("独立学院(普通专业)", 12000),
"中原工学院信息商务学院": ("独立学院(普通专业)", 12000),
"河南科技大学应用工程学院": ("独立学院(普通专业)", 12000),
"新乡医学院三全学院": ("独立学院(医学类)", 13000),
"河南理工大学万方科技学院": ("独立学院(普通专业)", 12000),
# ---- 高水平大学中外合作项目 ----
"郑州大学西亚斯国际学院": ("中外合作办学(普通专业)", 18000),
# ---- 河南警察学院 ----
"河南警察学院": ("普通类(文科)", 4400),
# ---- 郑州师范学院 ----
"郑州师范学院": ("普通类(文科)", 4400),
# ---- 洛阳师范学院 ----
"洛阳师范学院": ("普通类(文科)", 4400),
# ---- 信阳师范学院 ----
"信阳师范学院": ("普通类(文科)", 4400),
# ---- 南阳师范学院 ----
"南阳师范学院": ("普通类(文科)", 4400),
# ---- 商丘师范学院 ----
"商丘师范学院": ("普通类(文科)", 4400),
# ---- 安阳师范学院 ----
"安阳师范学院": ("普通类(文科)", 4400),
# ---- 周口师范学院 ----
"周口师范学院": ("普通类(文科)", 4400),
# ---- 许昌学院 ----
"许昌学院": ("普通类(文科)", 4400),
# ---- 洛阳理工学院 ----
"洛阳理工学院": ("普通类(理科)", 5000),
# ---- 河南工程学院 ----
"河南工程学院": ("普通类(理科)", 5000),
# ---- 南阳理工学院 ----
"南阳理工学院": ("普通类(理科)", 5000),
# ---- 河南城建学院 ----
"河南城建学院": ("普通类(理科)", 5000),
# ---- 平顶山学院 ----
"平顶山学院": ("普通类(文科)", 4400),
# ---- 河南牧业经济学院 ----
"河南牧业经济学院": ("农林类", 4000),
# ---- 黄河科技学院(民办)----
"黄河科技学院": ("独立学院(普通专业)", 12000),
# ---- 商丘学院(民办)----
"商丘学院": ("独立学院(普通专业)", 12000),
# ---- 郑州科技学院(民办)----
"郑州科技学院": ("独立学院(普通专业)", 12000),
# ---- 郑州升达经贸管理学院(民办)----
"郑州升达经贸管理学院": ("独立学院(普通专业)", 12000),
# ---- 新乡工程学院 ----
"新乡工程学院": ("独立学院(普通专业)", 12000),
}
# ============================================================
# 三、关键字自动分类规则(用于未精确匹配的学校)
# ============================================================
# 优先级:精确匹配 → 关键字匹配 → 默认标准
# 艺术/体育类关键词
KW_ARTS = ["艺术", "音乐", "美术", "设计", "舞蹈", "传媒", "戏剧", "影视", "播音", "表演"]
# 医学类关键词
KW_MEDICAL = ["医学", "药学", "护理", "临床", "口腔", "中医", "预防", "检验", "影像"]
# 农林类关键词
KW_AGRI = ["农业", "林业", "园艺", "畜牧", "兽医", "水产", "草业", "农学"]
# 师范类关键词(普遍低学费)
KW_NORMAL = ["师范", "学院", "大学"] # 先放空,后面处理
# 中外合作关键词
KW_JOINT = ["中外合作", "国际学院", "合作办学", "外方合作", "香港", "台湾"]
# 独立学院/民办关键词
KW_PRIVATE = ["独立学院", "民生学院", "应用技术学院", "信息商务学院", "应用工程学院"]
# 默认公办普通本科文4400理5000
DEFAULT_TUITION_NORMAL = ("普通类(文科)", 4400)
DEFAULT_TUITION_SCI = ("普通类(理科)", 5000)
def get_tuition_for_school(school_name: str, school_type: str = "") -> dict:
"""
根据学校名称和类型返回学费信息
返回格式:
{
"category": "普通类(文科)",
"annual": 4400,
"remark": "公办本科 | 河南省发改委标准",
"source": "static_henan"
}
"""
if not school_name:
return _default_result("普通类(文科)", 4400)
sn = school_name.strip()
# 1. 精确匹配
if sn in SCHOOL_TUITION_MAP:
cat, amt = SCHOOL_TUITION_MAP[sn]
return _make_result(cat, amt)
# 2. 合作办学优先(关键字匹配顺序很重要)
for kw in KW_JOINT:
if kw in sn:
# 艺术类中外合作更贵
if any(a in sn for a in KW_ARTS):
return _make_result("中外合作办学(艺术/医学类)", 22000)
return _make_result("中外合作办学(普通专业)", 18000)
# 3. 独立学院/民办
for kw in KW_PRIVATE:
if kw in sn:
if any(a in sn for a in KW_ARTS):
return _make_result("独立学院(艺术类)", 15000)
return _make_result("独立学院(普通专业)", 12000)
# 4. 艺术/体育 类
if any(kw in sn for kw in KW_ARTS):
return _make_result("艺术类", 8000)
# 5. 医学类
if any(kw in sn for kw in KW_MEDICAL):
return _make_result("医学类", 5500)
# 6. 农林类
if any(kw in sn for kw in KW_AGRI):
return _make_result("农林类", 4000)
# 7. 师范类(默认文科标准)
if "师范" in sn:
return _make_result("普通类(文科)", 4400)
# 8. 体育类
if "体育" in sn:
return _make_result("体育类", 5000)
# 9. 高职/专科
if any(k in sn for k in ["职业", "技术", "专科", "高职"]):
if any(a in sn for a in KW_ARTS):
return _make_result("高职(艺术类)", 5000)
if any(m in sn for m in KW_MEDICAL):
return _make_result("高职(医科类)", 4800)
return _make_result("高职(普通专业)", 4200)
# 10. 默认标准(公办综合性大学 → 理科标准)
return _make_result("普通类(理科)", 5000)
def _make_result(category: str, annual: int) -> dict:
return {
"category": category,
"annual": annual,
"remark": f"{category} | 河南省发改委标准",
"source": "static_henan",
}
def _default_result(category: str, annual: int) -> dict:
return _make_result(category, annual)
def get_tuition_display(annual: int, category: str = "") -> str:
"""格式化显示学费字符串"""
return f"{annual:,}元/年"
if __name__ == "__main__":
# 测试几所代表性学校
test_schools = [
"郑州大学",
"河南大学",
"河南师范大学",
"河南科技大学",
"河南理工大学",
"河南农业大学",
"河南中医药大学",
"新乡医学院",
"华北水利水电大学",
"河南大学民生学院",
"郑州大学西亚斯国际学院",
"河南开封科技传媒学院",
"黄河科技学院",
"河南警察学院",
"南阳理工学院",
"河南牧业经济学院",
]
print(f"{'学校':<30} {'类别':<25} {'年费':>8}")
print("-" * 65)
for s in test_schools:
info = get_tuition_for_school(s)
print(f"{s:<30} {info['category']:<25} {info['annual']:>6}元/年")