OTAC — Offense Text Auto Classifier

OTAC is a free tool from the Bureau of Justice Statistics that turns free-text offense descriptions into standardized offense categories, making criminal justice data easier to compare across jurisdictions.

Windows Setup Mac Setup

Select your operating system for step-by-step setup instructions, including Docker installation and the OTAC download.

What Is OTAC?

Criminal justice agencies record offenses in many ways. The same conduct might appear in one county's records as "kidnapping or forc. confine" and in another's as "KIDNAP - 1ST DEG (FELONY)". That inconsistency makes it hard to compare data across agencies, track cases as they move through the system, or produce reliable national statistics.

OTAC, the Offense Text Auto Classifier, addresses this problem. It reads free-text offense descriptions and matches them to standardized categories from the BJS National Corrections Reporting Program (NCRP). Those categories and their related documentation are also available in the NCRP Resource Guide and Offense Code Crosswalk. OTAC runs locally on a user's computer: agencies and researchers can classify their own data without uploading it anywhere. Your data are never sent to the internet nor stored by OTAC.

Why OTAC Matters

Practical benefits for agencies, researchers, and policymakers:

Compare across jurisdictions

Agencies may describe the same offense differently. OTAC helps map those records to one standardized category.

Speed up research

Manual coding of large offense datasets takes time. OTAC narrows the review work and helps teams move faster.

Reduce clerical errors

Hand-coded offense data can vary across analysts. OTAC applies the same classification logic each time.

Link people across the justice system

Consistent offense coding supports tracking through arrest, courts, corrections, and reentry.

Using OTAC Responsibly

OTAC is most accurate on well-defined offenses with distinctive vocabulary and less reliable for ambiguous or overlapping categories. We recommend using OTAC as a semi-supervised tool: let it produce a short list of likely categories for each offense, then have a reviewer confirm the correct one. This is faster than coding from scratch and more reliable than fully automated classification.

Current scope: The current version supports felony-level offenses only.

Why Use OTAC?

Criminal justice datasets often contain free-text offense descriptions that differ across jurisdictions even when they refer to similar conduct. For comparison across states, agencies, or systems, those descriptions often need to be grouped into standardized categories. OTAC helps make that work faster, more consistent, and easier to review.

OTAC is a support tool. It is intended to assist, not replace, human decisionmaking. Users should review model outputs before relying on them, especially for lower-confidence predictions. Each analysis team should determine what level of confidence requires manual review before using OTAC results.

How OTAC Supports Criminal Justice Research

OTAC is designed to support a structured review process for offense coding. It helps teams move from inconsistent free-text descriptions to more comparable NCRP category labels while keeping a human reviewer in the loop.

Using OTAC

Once running, OTAC opens in your browser at http://localhost:8501.

OTAC Single Coder — type one offense and see predictions instantly
Single Coder Type one offense string and see ranked category predictions immediately.
OTAC Bulk Coder — upload a CSV or Excel file to classify many offenses at once
Bulk Coder Upload a CSV or Excel file to classify hundreds or thousands of offenses at once.
Bulk output example showing predicted NCRP category labels and confidence scores in a table
Bulk Output
Review predicted category labels and confidence scores in a tabular output.

How OTAC Works

OTAC works by standardizing the free-text offense descriptions used by law enforcement, prosecutors, court clerks, and other justice agencies into a common set of NCRP offense categories. It uses a natural language processing model to predict likely categories from the wording in each description. The methodology underlying OTAC is described in a peer-reviewed publication in the American Journal of Criminal Justice. See publication ↓

OTAC is designed to take offense descriptions that are written differently across jurisdictions and map them into one common NCRP category label that can be reviewed and used more consistently.

Diagram showing different county offense descriptions flowing through OTAC into one standardized kidnapping category label

OTAC Training

OTAC uses a transformer-based natural language processing model, which evaluates the frequency and relationships of words in a text string and applies those relationships to classification. When the model finds word combinations that are frequently associated with a classification, it will suggest that classification more often. The OTAC model was trained using classifications from the NCRP Offense Code Crosswalk and additional county court data with classifications validated by criminal justice experts.

Training data

The model learns from offense descriptions that have already been matched to the correct NCRP category.

Example
Input text: "unlawful restraint of person"
Classification: "Kidnapping"
Tokenization

The model breaks the input text into individual tokens, or words the computer can analyze.

Example tokens
"unlawful" "restraint" "person"
Understanding word relationships

The model evaluates how the words relate to one another and which combinations are associated with the known category.

Questions from which the model learns
How does "unlawful" relate to "restraint"?
Do "unlawful" and "restraint" relate to "person"?
Train with many examples

This process is repeated across many labeled examples so the model can recognize similar patterns in new text.

Examples
"forcibly confine person against will" -> Kidnapping
"unlawful detention" -> Kidnapping
"break in and steal merchandise" -> Burglary
Create predictive patterns for classification

With enough examples, the model learns recurring word patterns that signal a likely offense category.

Patterns that may predict "Kidnapping"
"unlawful" + "restraint" + "person"
"forcible" + "confine" + "person"

How Well Does OTAC Work?

OTAC’s accuracy depends on the offense. Straightforward categories classify more cleanly, while ambiguous ones need human review. In validation work using plain-text offenses from two county court datasets, OTAC included the correct offense category in its top-five predictions roughly 90% of the time.

about 90%

of the time, OTAC's top-five predictions include the correct offense category.

Tested on two county court datasets the model had never seen.

Best single prediction was correct
County A
66%
County B
72%
Correct answer was among the top-five predictions
County A
91%
County B
89%
County A County B

Validation results from two county court datasets show strong top-five prediction performance, while reinforcing the need for human review.

Documentation

The User Guide covers installation, setup, usage, troubleshooting, and command-line reference for both Windows and Mac. A copy is included in the OTAC download for offline reference.

What Is In The Download?

After extracting OTAC_Desktop.zip, you will have a folder containing:

FileWhat it does
docker-compose.ymlDocker configuration — tells Docker how to run OTAC
Dockerfile.microsoftDocker build instructions — used automatically on first run
requirements-docker.txtPython package list — used automatically during build
otac-0.1.0-py3-none-any.whlThe OTAC application package (approximately 80 MB)
otac_sample.csv100 sample offense strings — use this to test first
OTAC_USER_GUIDE.htmlUser guide — installation, usage, troubleshooting, and command-line reference. Open in any browser.

What You Need

RequirementDetails
ComputerWindows 10 or later, or Mac (2016 or later)
Disk spaceAt least 6 GB of free disk space
RAMAt least 8 GB (16 GB recommended)
InternetRequired once during first-time setup only
Time20–30 minutes the first time; under 30 seconds after that
Security and data privacy:

Get Started

Select your operating system for complete step-by-step setup instructions, including Docker installation, terminal navigation, and how to start and stop OTAC:

Windows Setup Mac Setup

Troubleshooting

ProblemSolution
"Docker is not installed"Follow the Docker installation instructions in your Windows or Mac setup guide.
"Docker is not running"Open Docker Desktop and wait for the whale icon to stop animating.
Browser shows a blank page or errorOTAC takes about 60 seconds to finish loading the first time you open the browser. Wait 30–60 seconds, then press F5 (Windows) or Cmd + R (Mac) to refresh.
"Docker build failed" (first run)Check your internet connection. A corporate firewall may need IT to allow Docker Hub access.
Page loads but looks brokenTry a different browser (Chrome, Edge, or Firefox).
Need more helpSee the Complete User Guide — Command-Line Reference for detailed command-line instructions and error messages.

Frequently Asked Questions

Is my data sent to the internet?

No. OTAC runs entirely on your local computer. Your offense data never leaves your machine.

Do I need internet to use OTAC?

Only during the very first setup (to build the Docker image). After that, OTAC works completely offline.

How long does classification take?

File sizeApproximate time
100 rows10–30 seconds
1,000 rows1–3 minutes
10,000 rows10–20 minutes

What does OTAC return?

OTAC returns ranked predictions for standardized NCRP offense categories, along with confidence scores to help reviewers prioritize manual checks. The output is a set of NCRP category labels, including labels such as FORGERY/FRAUD, INVASION OF PRIVACY, WEAPON OFFENSE, and many others. Related NCRP documentation is available in the NCRP Resource Guide and Offense Code Crosswalk.

What is the best format for my CSV?

The simplest format is a single-column CSV with just the offense text descriptions — one row per offense. With only one column, OTAC automatically selects it and you can go straight to clicking Compute Predictions.

If your existing data file has multiple columns, that works, too. After uploading, OTAC displays a dropdown listing all text columns — select the one containing the offense descriptions, then click Compute Predictions. Both .csv and .xlsx files are accepted.

Can I run OTAC on multiple computers?

Yes. Copy the OTAC_Desktop folder to each computer, install Docker Desktop on each, and each will build the image on its first run (10–20 minutes).

Does OTAC require a GPU?

No. OTAC runs on standard CPUs — no graphics card required.

Will OTAC start automatically when I turn on my computer?

No. You must open a terminal, navigate to the OTAC_Desktop folder, and run docker compose up --build each time you want to use OTAC. Docker Desktop itself starts automatically at login, but OTAC does not run until you start it.

Why did the predictions remove columns from my data that was submitted with multiple columns?

The output CSV file will only report the deduplicated offense strings, predicted offense categories, and confidence scores. Predictions will need to be merged back into your full data using the offense strings as a linking key.

Research Publication

DeMichele, M., Silver, I. A., Preiss, A. J., & Baumgartner, P. (2026). Modernizing criminal justice data: Developing a semi-supervised tool to code multi-jurisdictional data. American Journal of Criminal Justice.