knowledge_catalog.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. """
  2. Default junior-high math knowledge catalog(与 frontend/src/data/knowledgeCatalog.ts 保持一致,用于一键同步到 Neo4j)。
  3. 结构: { 年级: { 类别: [ { code, name }, ... ] } }
  4. """
  5. from __future__ import annotations
  6. from typing import TypedDict
  7. class TopicItem(TypedDict):
  8. code: str
  9. name: str
  10. DEFAULT_KNOWLEDGE_CATALOG: dict[str, dict[str, list[TopicItem]]] = {
  11. "七年级": {
  12. "代数与方程": [
  13. {"code": "J7-EQ-001", "name": "一元一次方程"},
  14. {"code": "J7-EQ-002", "name": "二元一次方程组"},
  15. ],
  16. "几何基础": [
  17. {"code": "J7-GEO-001", "name": "线段与角"},
  18. {"code": "J7-GEO-002", "name": "相交线与平行线"},
  19. ],
  20. },
  21. "八年级": {
  22. "代数与函数": [
  23. {"code": "J8-FUNC-001", "name": "一次函数"},
  24. {"code": "J8-ROOT-001", "name": "二次根式"},
  25. ],
  26. "几何证明": [
  27. {"code": "J8-GEO-001", "name": "全等三角形"},
  28. {"code": "J8-GEO-002", "name": "轴对称"},
  29. ],
  30. },
  31. "九年级": {
  32. "代数进阶": [
  33. {"code": "J9-EQ-001", "name": "一元二次方程"},
  34. {"code": "J9-FUNC-001", "name": "二次函数"},
  35. ],
  36. "圆与统计": [
  37. {"code": "J9-CIRCLE-001", "name": "圆的基本性质"},
  38. {"code": "J9-STAT-001", "name": "概率初步"},
  39. ],
  40. },
  41. }
  42. def iter_catalog_topics() -> list[tuple[str, str, str, str]]:
  43. """遍历目录,返回 (年级, 类别, 编码, 名称) 列表。"""
  44. out: list[tuple[str, str, str, str]] = []
  45. for grade, categories in DEFAULT_KNOWLEDGE_CATALOG.items():
  46. for category, topics in categories.items():
  47. for t in topics:
  48. out.append((grade, category, t["code"], t["name"]))
  49. return out