exam.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. <?php
  2. return [
  3. /*
  4. |--------------------------------------------------------------------------
  5. | PDF 题目ID显示配置
  6. |--------------------------------------------------------------------------
  7. |
  8. | 控制生成PDF时是否在题干末尾显示题目ID,格式为 (Q000123)
  9. | 用于快速定位题目进行问题分析
  10. |
  11. */
  12. 'show_question_id_in_pdf' => env('EXAM_PDF_SHOW_QUESTION_ID', false),
  13. /*
  14. |--------------------------------------------------------------------------
  15. | PDF 是否显示题目难度
  16. |--------------------------------------------------------------------------
  17. |
  18. | 控制生成PDF时是否在题号后显示难度,便于校验题目排序逻辑。
  19. |
  20. */
  21. 'show_question_difficulty_in_pdf' => env('EXAM_PDF_SHOW_QUESTION_DIFFICULTY', false),
  22. /*
  23. |--------------------------------------------------------------------------
  24. | 判卷PDF是否显示题目
  25. |--------------------------------------------------------------------------
  26. |
  27. | 控制判卷PDF中是否保留题干与选项。关闭后仅保留题号、正确答案和解题思路,
  28. | 适合学案较长时直接生成答案版。
  29. |
  30. */
  31. 'pdf_grading_show_stem' => env('EXAM_PDF_GRADING_SHOW_STEM', true),
  32. /*
  33. |--------------------------------------------------------------------------
  34. | 判卷PDF追加扫描答题卡页
  35. |--------------------------------------------------------------------------
  36. |
  37. | 控制是否在判卷PDF末尾追加一页用于扫描识别的答题卡。
  38. |
  39. */
  40. 'pdf_grading_append_scan_sheet' => env('EXAM_PDF_GRADING_APPEND_SCAN_SHEET', false),
  41. /*
  42. |--------------------------------------------------------------------------
  43. | 判卷卡识别模板参数(供 Python/OpenCV 使用)
  44. |--------------------------------------------------------------------------
  45. |
  46. | Laravel 侧仅负责输出几何模板参数,不负责识别逻辑。
  47. | 使用 artisan 命令 `exam:generate-judge-card-template` 生成 JSON 文件。
  48. |
  49. */
  50. 'judge_card_template' => [
  51. 'page' => [
  52. 'width' => 2480,
  53. 'height' => 3508,
  54. 'dpi' => 300,
  55. // 与 @page 一致的页边距(单位:px@300DPI)
  56. 'margin_top' => 260, // 2.2cm
  57. 'margin_right' => 236, // 2.0cm
  58. 'margin_bottom' => 272, // 2.3cm
  59. 'margin_left' => 236, // 2.0cm
  60. ],
  61. 'box' => [
  62. 'width' => 66,
  63. 'height' => 66,
  64. ],
  65. 'layout' => [
  66. // 第1题第1个方框左上角(300DPI像素坐标)
  67. 'start_x' => 286,
  68. 'start_y' => 650,
  69. // 相邻题目的纵向步进、同题多框横向步进(300DPI像素)
  70. 'row_height' => 126,
  71. 'col_spacing' => 90,
  72. // 判题卡视觉排版参数(同样基于300DPI像素,供页面渲染与JSON对齐)
  73. 'header_top_offset' => -30,
  74. 'row_left_x' => 8,
  75. 'row_width' => 2464,
  76. 'row_padding_top' => 10,
  77. 'row_padding_bottom' => 10,
  78. 'label_x' => 24,
  79. 'label_width' => 210,
  80. 'label_to_box_gap' => 20,
  81. ],
  82. 'mark_rules' => [
  83. 'correct' => ['/', '\\'],
  84. 'wrong' => ['X'],
  85. 'blank_is_wrong' => true,
  86. ],
  87. ],
  88. /*
  89. |--------------------------------------------------------------------------
  90. | 学情报告 V3 话术配置
  91. |--------------------------------------------------------------------------
  92. |
  93. | difficulty_explain_messages: 难度说明话术池
  94. | 第一层 key: 难度状态(匹配/偏难/偏易/暂无)
  95. | 第二层 key: 得分率档位(high/mid/low/unknown)
  96. |
  97. */
  98. 'analysis_report_v3' => [
  99. 'first_exam_messages_by_bucket' => [
  100. // 分档:A(90-100), B(75-89), C(60-74), D(40-59), E(0-39)
  101. 'A' => [
  102. '这次开局很稳,说明你的基础和状态都在线。',
  103. '第一次就拿到高分,后续保持节奏会更强。',
  104. '你的学习方法是有效的,继续按这个路径推进。',
  105. '这是一个很好的起点,接下来可以适度挑战难题。',
  106. '成绩很亮眼,说明你已经具备较强的掌握能力。',
  107. '你的投入有明显回报,继续保持就会持续领先。',
  108. '开局高分值得肯定,下一步重点是稳定输出。',
  109. '这次表现优秀,后续可以往“又快又准”再升级。',
  110. '你已经在高水平区间,继续打磨细节会更出色。',
  111. '这是非常有竞争力的起步,继续冲就对了。',
  112. ],
  113. 'B' => [
  114. '这个分数是很不错的起点,方向完全正确。',
  115. '你已经进入良好区间,再补几处薄弱点就能上台阶。',
  116. '开局表现可圈可点,继续练会更稳定。',
  117. '说明你有扎实基础,后续提升空间也很清晰。',
  118. '这次成绩不错,下一步就是把失分点逐个清掉。',
  119. '起步良好,继续保持专注,进步会很快。',
  120. '你已经具备不错的能力,差的是一点点细节打磨。',
  121. '这个起点很健康,后续很有机会冲到更高档。',
  122. '成绩说明你在正轨上,继续按计划推进就行。',
  123. '这次发挥稳定,接下来把短板补齐会很明显。',
  124. ],
  125. 'C' => [
  126. '这是正常且可提升的起点,先稳住基础最关键。',
  127. '你已经有一定掌握度,接下来重点是补薄弱模块。',
  128. '这个分数段提升通常很快,方向对了就会涨。',
  129. '开局在中位区间,不焦虑,持续练习就会突破。',
  130. '先把常错题型吃透,你的分数会明显上来。',
  131. '这次结果能帮我们精准定位问题,价值很大。',
  132. '起点清晰、空间也清晰,后续提升可期待。',
  133. '你的基础在,下一步要把稳定性做出来。',
  134. '这个阶段最怕放弃,最值得坚持。',
  135. '继续按节奏推进,很快就能看到上升曲线。',
  136. ],
  137. 'D' => [
  138. '第一次这个分数不代表上限,只代表当前起点。',
  139. '现在最重要的是先建立信心,再逐步提分。',
  140. '这次结果很有价值,能帮你更精准地补基础。',
  141. '先把核心概念补牢,分数会先稳再升。',
  142. '这个阶段提升潜力很大,方法对了进步会很快。',
  143. '不用和别人比,先和昨天的自己比就很好。',
  144. '先做对“会做的题”,再攻“有难度的题”。',
  145. '你现在需要的是节奏和耐心,不是否定自己。',
  146. '起步偏低很常见,持续练习就会逐渐反转。',
  147. '只要不放弃,这个分段通常最容易拉开增幅。',
  148. ],
  149. 'E' => [
  150. '第一次分数偏低很正常,先把学习路径走顺。',
  151. '这不是结论,只是起点,我们从基础一点点重建。',
  152. '先把会做题做稳,信心会先回来。',
  153. '现在最关键的是“稳基础、慢提速”。',
  154. '低分并不定义能力,持续训练才会定义结果。',
  155. '先把核心知识补齐,后续提升会很明显。',
  156. '今天看到的是起点,不是终点。',
  157. '你需要的是清晰步骤,不是压力。',
  158. '每次进步一点点,累计起来会很惊人。',
  159. '从现在开始,踏实走每一步,结果一定会变。',
  160. ],
  161. ],
  162. 'difficulty_explain_messages' => [
  163. '匹配' => [
  164. 'high' => [
  165. '本次题目难度与目标基本一致,且得分表现优秀,说明当前掌握质量与稳定性都较好。',
  166. '本卷难度与学案目标贴合,你在该难度下保持了高得分,当前阶段学习效果较扎实。',
  167. '难度匹配且得分率高,结果可信度高,可作为当前能力水平的有效反映。',
  168. ],
  169. 'mid' => [
  170. '本次题目难度与目标一致,当前得分处于可提升区间,建议围绕失分点做定向巩固。',
  171. '难度匹配,成绩能够真实反映现阶段水平;下一步重点是把薄弱题型转为稳定得分。',
  172. '在目标难度下表现中位,说明基础已建立,建议通过专题训练提升稳定性。',
  173. ],
  174. 'low' => [
  175. '本次题目难度与目标一致,当前得分偏低主要反映掌握度不足,建议先补核心基础再提速。',
  176. '难度与目标基本匹配,分数偏低具有诊断价值,优先处理高频错因会更有效。',
  177. '在匹配难度下得分偏低,建议先稳基础模块,再逐步扩大题型覆盖面。',
  178. ],
  179. 'unknown' => [
  180. '本次题目整体难度与学案目标基本一致,结果可直接反映当前掌握水平。',
  181. ],
  182. ],
  183. '偏难' => [
  184. 'high' => [
  185. '本次题目整体偏难,但你仍保持了高得分,说明在高压难度下也具备较强解题稳定性。',
  186. '虽然本卷难度高于目标区间,你依然取得了优秀得分,体现出明显的能力上限优势。',
  187. '题目偏难且得分率仍高,当前阶段可适度增加高阶题比例,持续验证上限。',
  188. ],
  189. 'mid' => [
  190. '本次题目偏难,当前得分处于中位区间属正常表现,建议先巩固中档再逐步冲高档。',
  191. '在高于目标的难度下取得当前成绩,说明基础可用;下一步可聚焦中高难过渡题。',
  192. '题目整体偏难,分数受客观难度影响,建议优先补齐同模块关键中档题。',
  193. ],
  194. 'low' => [
  195. '本次题目整体偏难,低得分中包含客观难度因素,建议先回到目标难度做稳态提升。',
  196. '由于题目难度超出目标区间,当前分数偏低可理解,建议先补齐基础与中档能力。',
  197. '本卷偏难且得分偏低,建议先通过同模块中档题建立稳定正确率,再冲高难。',
  198. ],
  199. 'unknown' => [
  200. '本次题目整体偏难,错误率偏高有客观因素,建议先补齐同模块中档题再冲高档。',
  201. ],
  202. ],
  203. '偏易' => [
  204. 'high' => [
  205. '本次题目整体偏易且得分较高,说明基础掌握较稳,建议补充更高一档难度验证上限。',
  206. '在低于目标难度的试卷上保持高得分,建议增加中高难题比例做进一步校准。',
  207. '题目偏易时获得高分符合预期,下一步可通过更高难度题检验真实上限。',
  208. ],
  209. 'mid' => [
  210. '本次题目偏易但得分仍有提升空间,建议先排查基础失分点并提高稳定正确率。',
  211. '在偏易试卷下表现中位,说明基础环节仍有波动,建议先做易中题稳定训练。',
  212. '难度低于目标但得分未显著拉开,建议优先修复粗心与步骤性失分。',
  213. ],
  214. 'low' => [
  215. '本次题目整体偏易,得分偏低提示基础环节存在短板,建议先做基础题稳固训练。',
  216. '在偏易难度下分数仍偏低,建议优先回补核心概念与高频基础题型。',
  217. '题目偏易但得分不理想,需先解决基础正确率问题,再考虑提升难度。',
  218. ],
  219. 'unknown' => [
  220. '本次题目整体偏易,若得分高不代表上限已到,建议补充更高一档难度验证稳定性。',
  221. ],
  222. ],
  223. '暂无' => [
  224. 'unknown' => [
  225. '暂无足够数据评估难度匹配。',
  226. ],
  227. ],
  228. ],
  229. ],
  230. ];