Analyzing Math Items#

No assessment items ship with mathipy. Save each item image as <item_id>.png in one folder, with an items.csv holding item_id,grade,year,difficulty,content,image_file.

Setup#

pip install mathipy[all]
export MATHIPY_DATA_DIR=/path/to/items
import csv
from mathipy.data import get_sample_csv, get_sample_image

with open(get_sample_csv()) as f:
    items = list(csv.DictReader(f))

Text features#

from mathipy import CognitiveLoadEstimator, MathContentAnalyzer, ReadabilityAnalyzer

text = "A garden is 8 feet long and 5 feet wide. What is its area in square feet?"

readability = ReadabilityAnalyzer().analyze(text)
math_content = MathContentAnalyzer().analyze(text)
load = CognitiveLoadEstimator().estimate(text)

MultimodalOCR reads item text from an image and requires a Gemini or OpenAI API key:

from mathipy import MultimodalOCR

text = MultimodalOCR(provider="gemini").extract(str(get_sample_image(items[0]["item_id"])))["full_text"]

Visual features#

from mathipy import VisualFeatureExtractor

features = VisualFeatureExtractor().extract(str(get_sample_image(items[0]["item_id"])))

Representation type#

Requires a Gemini or OpenAI API key.

from mathipy import VisualModelClassifier, flags_by_representation

result = VisualModelClassifier(provider="gemini").classify(
    str(get_sample_image(items[0]["item_id"])), position="stem")
print(result["visual_type"], result["function"])
print(flags_by_representation(result))

Labels vary between runs; compare a hand-coded sample before relying on them.