| """ |
| Education-grounded regex patterns for planning / monitoring. |
| |
| Based on: |
| - Schraw & Moshman (1995): metacognitive regulation = planning + monitoring + evaluation |
| - Artzt & Armour-Thomas (1992): orientation / organization / execution / verification |
| - Nelson & Narens (1990): meta-level monitoring of object-level cognition |
| - Schraw (1998): planning = strategy selection; monitoring = real-time regulation |
| |
| Key design principle: |
| Triggers must be METACOGNITIVE discourse ("I will use X approach"), |
| not COGNITIVE execution ("let x = 5"). The former is planning, the latter is representation. |
| """ |
|
|
|
|
| |
| |
| |
| MONITORING_PATTERNS = { |
|
|
| |
| "error_detection": [ |
| r"(?i)\bwait[,.]?\s", |
| r"(?i)\bactually[,.]?\s", |
| r"(?i)\bno[,.]?\s+(wait|that'?s|hold|i\s+think)", |
| r"(?i)\bhmm[,.]?\s", |
| r"(?i)\bhold\s+on[,.]?\s", |
| r"(?i)\bi\s+(made|have)\s+a?\s*(mistake|error|typo|miscalculation)", |
| r"(?i)\bthat'?s?\s+(not\s+right|wrong|incorrect|off)\b", |
| r"(?i)\bi\s+(mis-?(calculated|counted|read|understood|interpreted|applied))", |
| r"(?i)\bsomething'?s?\s+(off|wrong|not\s+right)\b", |
| ], |
|
|
| |
| "comprehension_monitoring": [ |
| r"(?i)\blet\s+me\s+(check|verify|confirm|double[- ]?check|validate|make\s+sure)\b", |
| r"(?i)\blet\s+me\s+re-?read\s+the\s+problem\b", |
| r"(?i)\bto\s+(verify|confirm|double-?check)\s+(this|that|my|the)\b", |
| r"(?i)\bdoes\s+(this|that)\s+(make\s+sense|seem\s+right|look\s+correct)\?", |
| r"(?i)\blet\s+me\s+make\s+sure\s+(this|that|i)\b", |
| r"(?i)\bsanity\s+check\b", |
| r"(?i)\bi\s+should\s+(check|verify|confirm)\s+(whether|that|if)\b", |
| r"(?i)\bam\s+i\s+(doing\s+this\s+right|on\s+the\s+right\s+track|missing\s+something)\b", |
| ], |
|
|
| |
| "progress_monitoring": [ |
| r"(?i)\bso\s+far\s+(so\s+good|i\s+have|this\s+(seems|looks|is))\b", |
| r"(?i)\bi'?ve\s+found\s+(that|the)\b", |
| r"(?i)\bnow\s+i\s+(know|have|need|can)\b", |
| r"(?i)\bthis\s+means\s+(that\s+)?i\s+(need|can|should|must)\b", |
| r"(?i)\bso\s+the\s+(answer|result|value)\s+(should|must|will)\s+be\b", |
| r"(?i)\bthat\s+doesn'?t\s+(work|seem\s+right|make\s+sense)\b", |
| r"(?i)\bthis\s+(approach|method|strategy|path)\s+(isn'?t|doesn'?t|won'?t)\s+work\b", |
| r"(?i)\bi'?m\s+(stuck|not\s+sure|not\s+getting\s+anywhere|going\s+in\s+circles)\b", |
| ], |
|
|
| |
| "strategy_reeval": [ |
| r"(?i)\blet\s+me\s+(reconsider|rethink|redo|re-?examine|go\s+back|start\s+over)\b", |
| r"(?i)\blet\s+me\s+try\s+(a\s+)?different\b", |
| r"(?i)\b(try|use|take)\s+(a\s+)?(different|another|alternative)\s+(approach|method|way|angle)\b", |
| r"(?i)\banother\s+(way|approach|method)\s+(to|would\s+be|is)\b", |
| r"(?i)\bi\s+should\s+(go\s+back|reconsider|try\s+again|start\s+over)\b", |
| r"(?i)\balternatively[,.]\s", |
| r"(?i)\binstead[,.]\s+(let\s+me|i\s+will|i\s+can|i\s+should)\b", |
| ], |
|
|
| |
| "result_verification": [ |
| r"(?i)\bsubstitut(e|ing)\s+(back|into|this)\b", |
| r"(?i)\bplug(ging)?\s+(this|back|in|into)\b", |
| r"(?i)\bcheck(ing)?\s+by\s+(substitut|plug|replac)\w+\b", |
| r"(?i)\blet\s+me\s+check\s+(my|the)\s+(answer|result|work|computation|calculation)\b", |
| r"(?i)\b(the|my)\s+answer\s+(should|must)\s+(satisfy|give|yield)\b", |
| ], |
| } |
|
|
|
|
| |
| |
| |
| PLANNING_PATTERNS = { |
|
|
| |
| "problem_orientation": [ |
| r"(?i)\bthis\s+is\s+a\s+(type\s+of\s+)?(problem\s+about|question\s+about)\b", |
| r"(?i)\bthe\s+problem\s+(is\s+asking|wants|requires)\s+(us|me|to)\b", |
| r"(?i)\bwe\s+need\s+to\s+find\b", |
| r"(?i)\bthe\s+(goal|objective|target)\s+is\s+to\b", |
| r"(?i)\bwhat\s+(we\s+|i\s+)?need\s+(here|is)\s+(is|a|to)\b", |
| r"(?i)\bthis\s+looks\s+like\s+a\s+\w+\s+problem\b", |
| r"(?i)\bi\s+(recognize|see|notice)\s+this\s+(is|as)\s+a?\s*\w+\b", |
| ], |
|
|
| |
| "strategy_declaration": [ |
| r"(?i)\bmy\s+(plan|approach|strategy|idea)\s+is\s+(to\s+)?\b", |
| r"(?i)\bi\s+(will|am\s+going\s+to|plan\s+to|want\s+to)\s+(use|apply|try)\b", |
| r"(?i)\bthe\s+(best|easiest|most\s+efficient)\s+(way|approach|strategy)\s+(here\s+)?is\s+to\b", |
| r"(?i)\blet\s+me\s+(use|apply|employ|try)\s+(the\s+)?\w+\s+(method|theorem|formula|approach|technique)\b", |
| r"(?i)\bi'?ll\s+(approach|tackle|solve|handle)\s+this\s+(by|using|with|via)\b", |
| r"(?i)\busing\s+(the\s+)?(substitution|elimination|induction|contradiction|cases|graphing|factoring)\b", |
| r"(?i)\bby\s+(induction|contradiction|cases|exhaustion|pigeonhole|construction)\b", |
| r"(?i)\bproof\s+by\s+(induction|contradiction|cases|exhaustion|contrapositive)\b", |
| r"(?i)\bwithout\s+loss\s+of\s+generality\b", |
| r"(?i)\bwlog\b", |
| r"(?i)\bworking?\s+backward(s)?\b", |
| r"(?i)\bi'?ll\s+work\s+backward(s)?\b", |
| ], |
|
|
| |
| "subgoal_decomposition": [ |
| r"(?i)\blet\s+me\s+break\s+(this|it|the\s+problem)\s+(down|into|up)\b", |
| r"(?i)\bto\s+solve\s+this[,.]\s+(i|we)\s+(will|need\s+to|should|must)\b", |
| r"(?i)\bfirst[,.]\s+(i|we)\s+(need|should|will|must|have\s+to)\b", |
| r"(?i)\bfirst[,.]\s+(let'?s|let\s+me)\b", |
| r"(?i)\bhere'?s?\s+(my|the)\s+(plan|approach|strategy)\b", |
| r"(?i)\bi'?ll\s+(do\s+this\s+in|break\s+this\s+into)\s+\w+\s+(steps|parts|stages)\b", |
| r"(?i)\bthere\s+are\s+(two|three|four|several|a\s+few)\s+(steps|parts|things)\s+(to|we\s+need|i\s+need)\b", |
| r"(?i)\bstep\s+1\s*[:.]", |
| r"(?i)\bbefore\s+(solving|computing|doing|tackling)\s+\w+,\s*(i|we)\b", |
| ], |
|
|
| |
| "case_analysis": [ |
| r"(?i)\bcase\s+(analysis|by\s+cases)\b", |
| r"(?i)\bconsider\s+(the\s+)?(following\s+)?cases\b", |
| r"(?i)\bi'?ll\s+consider\s+(two|three|several|the\s+following)\s+cases\b", |
| r"(?i)\bthere\s+are\s+(two|three|several)\s+cases\s+to\s+consider\b", |
| r"(?i)\bdepending\s+on\s+(whether|the\s+value)\b", |
| r"(?i)\bwe\s+(distinguish|split\s+into|divide\s+into)\s+(two|three|the\s+following)\s+cases\b", |
| ], |
|
|
| |
| "key_insight": [ |
| r"(?i)\bthe\s+key\s+(insight|observation|idea|point|step)\s+(is|here\s+is)\b", |
| r"(?i)\bthe\s+(trick|crucial\s+point|important\s+thing)\s+(is|here\s+is)\b", |
| r"(?i)\bnotice\s+that\b", |
| r"(?i)\bthe\s+key\s+(constraint|condition)\s+(is|here\s+is)\b", |
| r"(?i)\bi\s+(observe|notice|realize|see)\s+that\b", |
| r"(?i)\bthe\s+main\s+(challenge|difficulty)\s+is\b", |
| ], |
| } |
|
|
|
|
| def flatten_patterns(d): |
| """Flatten dict-of-lists into single list of regex strings.""" |
| return [p for ps in d.values() for p in ps] |
|
|
|
|
| def all_patterns(which="both"): |
| """Return list of (dim, subtype, regex) tuples.""" |
| out = [] |
| if which in ("both", "monitoring"): |
| for sub, ps in MONITORING_PATTERNS.items(): |
| for p in ps: |
| out.append(("monitoring", sub, p)) |
| if which in ("both", "planning"): |
| for sub, ps in PLANNING_PATTERNS.items(): |
| for p in ps: |
| out.append(("planning", sub, p)) |
| return out |
|
|