Load text
Paste one item per line, or drop CSV/JSONL and pick the column. Existing labels in a label column are kept.
Annotation
Paste lines, or load a CSV or JSONL and choose the text column. Each row is shown one at a time with your labels on number keys, and the result exports as CSV or JSONL with a label column, ready for scikit-learn, a Hugging Face sequence-classification run, or an LLM few-shot set.
Loading the tool…
Paste one item per line, or drop CSV/JSONL and pick the column. Existing labels in a label column are kept.
Number keys assign, Space skips, Backspace goes back. Search and filter to jump to unlabelled or a particular label.
CSV with text and label, or JSONL with {"text": ..., "label": ...}. Label ids are also written as a label map JSON.
Write a one-line definition per label in the sidebar; it stays on screen and is exported with the label map, which is what a second annotator needs.
The counter per label shows class balance as you work; the Dataset Statistics tool draws it after export.
Rows are shown in full with wrapping; there is no length limit beyond memory.
Yes, toggle multi-label; the export uses a semicolon-separated string in CSV and a list in JSONL.
Pick two columns and both are shown; the label applies to the row.
No. Everything runs in the page; nothing is uploaded.