LLM-powered semantic taxonomy generator for raw categorical data
Project description
OpenTaxonomy
LLM-powered semantic taxonomy generator for raw categorical data.
What it does
OpenTaxonomy takes a column of messy raw values (bank transactions, product names, survey responses — anything) and generates a structured semantic taxonomy from it using Claude as the reasoning engine.
Output for each value:
{column}_normalized— cleaned entity name (e.g."REWE SAGT DANKE 46654184/..."→"REWE")canonical_id— taxonomy path (e.g.ft.expenditure.variable.groceries)
The taxonomy itself is a set of YAML files — a seed.yaml capturing the domain structure, one node.yaml per tree node (each an ontological contract with inclusion/exclusion criteria and a decision record), and a placement_map.yaml that is the source of truth for all mappings.
Architecture
The core is the Prima Seed — a universal questioning protocol that generates domain-specific taxonomic trees from any categorical data:
- Q0 Identify the Form: what unifies all values?
- Q0b Establish context: what operational realm governs classification?
- Q1 Primary differentiation: the most essential splitting criterion
- Q2 Recursive differentiation: applied per branch at each level
- Q3 Dialectical check: values that resist placement expose flawed criteria
Installation
pip install opentaxonomy
Requires Python 3.11+ and an Anthropic API key.
Usage
export ANTHROPIC_API_KEY=sk-ant-...
# Generate a new taxonomy from raw data
opentaxonomy create -i transactions.csv -c description -o ./taxonomy
# Place new/unseen values into an existing taxonomy
opentaxonomy run -i new_data.csv -c description -s ./taxonomy
Supported input formats
| Format | Example |
|---|---|
| CSV / TSV | data.csv, data.tsv |
| JSON | data.json |
| Excel | data.xlsx |
| Parquet | data.parquet |
| Database | postgresql://user:pass@host/db + --db-table |
Options
opentaxonomy create
-i, --input Input file or database connection string [required]
-c, --column Column containing raw values to classify [required]
-o, --output-dir Where to write taxonomy files [default: ./taxonomy]
--domain-hint Optional hint to guide the LLM (e.g. "German grocery products")
--model Claude model [default: claude-sonnet-4-6]
--api-key Anthropic API key (or set ANTHROPIC_API_KEY)
opentaxonomy run
-i, --input Input file or database connection string [required]
-c, --column Column containing raw values to classify [required]
-s, --seed-dir Directory with seed.yaml and placement_map.yaml [default: ./taxonomy]
--model Claude model [default: claude-sonnet-4-6]
--api-key Anthropic API key (or set ANTHROPIC_API_KEY)
Output structure
taxonomy/
├── seed.yaml # Domain seed: context, levels, edge cases
├── placement_map.yaml # Raw values → canonical IDs (source of truth)
└── nodes/
├── root.yaml # Root node
├── expenditure.yaml # Internal node with decision record
├── groceries.yaml # Leaf node with inclusion/exclusion criteria
└── ...
Each node file is an ontological contract:
node: Groceries
canonical_id: ft.expenditure.variable.groceries
question: Is this a purchase of food or household staples from a supermarket or grocery store?
criteria:
includes:
- Supermarket purchases (REWE, LIDL, EDEKA, etc.)
- Organic/bio market purchases
excludes:
- Restaurant meals
- Drugstore purchases unless food items
edge_cases:
- term: REWE TO GO
resolution: Included — still a grocery/convenience purchase
decided: true
parent: Variable Necessities
children: []
version: 1.0.0
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file opentaxonomy-0.1.6.tar.gz.
File metadata
- Download URL: opentaxonomy-0.1.6.tar.gz
- Upload date:
- Size: 38.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8c8f2820805e9a8b870e3834ebef6b72e4007fe636b63986ec1285912fbb0068
|
|
| MD5 |
5936c2a2cc5c3f2bfb60385f774f5a6f
|
|
| BLAKE2b-256 |
3fa4da80c44b3d8432a0b2f40dd7ec722db558406acd034ecfac8410fecdeac1
|
File details
Details for the file opentaxonomy-0.1.6-py3-none-any.whl.
File metadata
- Download URL: opentaxonomy-0.1.6-py3-none-any.whl
- Upload date:
- Size: 28.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8263c55ee6d16417c680bc8e6fa14ff08fbf6fc23b19d7e2ea84c1fde2019a9f
|
|
| MD5 |
09e1da980fe41f3ceed20a6605a07d65
|
|
| BLAKE2b-256 |
5ce9c7e62585766c3707b089f7a2892bd4d64a3a89620c5aa26731b39ce11e1b
|