MCPcopy Create free account
hub / github.com/InternScience/SciReason / normalize_final_answer

Function normalize_final_answer

opencompass/datasets/math.py:68–128  ·  view source on GitHub ↗

Normalize a final answer to a quantitative reasoning question.

(final_answer: str)

Source from the content-addressed store, hash-verified

66
67
68def normalize_final_answer(final_answer: str) -> str:
69 """Normalize a final answer to a quantitative reasoning question."""
70 # final_answer = final_answer.split('=')[-1]
71 SUBSTITUTIONS = [('an ', ''), ('a ', ''), ('.$', '$'), ('\\$', ''),
72 (r'\ ', ''), (' ', ''), ('mbox', 'text'),
73 (',\\text{and}', ','), ('\\text{and}', ','),
74 ('\\text{m}', '\\text{}'), ('\\le', '<')]
75 REMOVED_EXPRESSIONS = [
76 'square', 'ways', 'integers', 'dollars', 'mph', 'inches', 'ft',
77 'hours', 'km', 'units', '\\ldots', 'sue', 'points', 'feet', 'minutes',
78 'digits', 'cents', 'degrees', 'cm', 'gm', 'pounds', 'meters', 'meals',
79 'edges', 'students', 'childrentickets', 'multiples', '\\text{s}',
80 '\\text{.}', '\\text{\ns}', '\\text{}^2', '\\text{}^3', '\\text{\n}',
81 '\\text{}', r'\mathrm{th}', r'^\circ', r'^{\circ}', r'\;', r',\!',
82 '{,}', '"', '\\dots', '\n', '\r', '\f'
83 ]
84 for before, after in SUBSTITUTIONS:
85 final_answer = final_answer.replace(before, after)
86 for expr in REMOVED_EXPRESSIONS:
87 final_answer = final_answer.replace(expr, '')
88
89 # Extract answer that is in LaTeX math, is bold,
90 # is surrounded by a box, etc.
91 final_answer = re.sub(r'(\\text\{)\((.*?)\)(\})', '\\2', final_answer)
92 final_answer = re.sub(r'(\\text\{)(.*?)(\})', '\\2', final_answer)
93 final_answer = re.sub(r'(\\textbf\{)(.*?)(\})', '\\2', final_answer)
94 final_answer = re.sub(r'(\\overline\{)(.*?)(\})', '\\2', final_answer)
95 final_answer = re.sub(r'(\\boxed\{)(.*)(\})', '\\2', final_answer)
96 assert '\n' not in final_answer
97 assert '\r' not in final_answer
98 assert '\f' not in final_answer
99 if len(re.findall(r'finalansweris(.*)', final_answer)) > 0:
100 final_answer = re.findall(r'finalansweris(.*)', final_answer)[-1]
101
102 if len(re.findall(r'answer?is:?(.*)', final_answer)) > 0:
103 final_answer = re.findall(r'answer?is:?(.*)', final_answer)[-1]
104
105 if len(re.findall(r'oxed\{(.*?)\}', final_answer)) > 0:
106 final_answer = re.findall(r'oxed\{(.*?)\}', final_answer)[-1]
107
108 if len(re.findall(r'\$(.*?)\$', final_answer)) > 0:
109 final_answer = re.findall(r'\$(.*?)\$', final_answer)[-1]
110 final_answer = final_answer.strip()
111 if 'rac' in final_answer and '\\frac' not in final_answer:
112 final_answer = final_answer.replace('rac', '\\frac')
113
114 # Normalize shorthand TeX:
115 # \fracab -> \frac{a}{b}
116 # \frac{abc}{bef} -> \frac{abc}{bef}
117 # \fracabc -> \frac{a}{b}c
118 # \sqrta -> \sqrt{a}
119 # \sqrtab -> sqrt{a}b
120 final_answer = re.sub(r'(frac)([^{])(.)', 'frac{\\2}{\\3}', final_answer)
121 final_answer = re.sub(r'(sqrt)([^{])', 'sqrt{\\2}', final_answer)
122 final_answer = final_answer.replace('$', '')
123
124 # Normalize 100,000 -> 100000
125 if final_answer.replace(',', '').isdigit():

Callers 3

math_postprocessFunction · 0.85
math_postprocess_v2Function · 0.85
is_equivMethod · 0.85

Calls 1

replaceMethod · 0.80

Tested by

no test coverage detected