Dokumentation → Thematische Taxonomie
Dokumentation

Thematische Taxonomie

Drei Ebenen: Schlagwort, Thema, Oberkategorie.

Wozu das gut ist, steht auf der Produktseite: Thematische Taxonomie

GET /taxonomy/by-parent/{parent_id}

Stocks By Parent

Alle Aktien unter einem Parent bzw. Grandparent.

group=listing (Default) ist der bisherige Peer-Vergleich: rohe Zeilen aus kw_taxonomy_stock. Bestehende Konsumenten bleiben unberuehrt.

group=company liefert dieselbe Struktur wie /tickers/by-keyword -- Unternehmen statt Notierungen, mit primary, listings, tickers, isins und market_cap. Damit fuehrt ein Klick auf ein Thema in der Trefferliste zu genau derselben Ergebnisdarstellung wie die Themensuche, ohne dass das Frontend einen zweiten Renderer braucht.

NameTypBedeutung
parent_idstring, im Pfad
Pflicht
levelstring, in der Abfrage
optional · Vorgabe parent
groupstring, in der Abfrage
optional · Vorgabe listing
listing = rohe Tag-Zeilen (Default, unveraendert); company = Trefferliste wie /tickers/by-keyword
activeboolean, in der Abfrage
optional
nur aktive/inaktive Titel (nur bei group=company)
sortstring, in der Abfrage
optional · Vorgabe relevance
relevance = staerkste Themenzuordnung zuerst; market_cap = groesste Marktkapitalisierung zuerst
limitinteger, in der Abfrage
optional · Vorgabe 200
offsetinteger, in der Abfrage
optional · Vorgabe 0

Beispiel

curl "$API/taxonomy/by-parent/482" \
  -H "X-API-Key: $KEY"
GET /taxonomy/grandparents

List Grandparents

Grobe Ebene (~300 Kategorien). Labels aus der kuratierten Registry (kw_taxonomy_grandparents), falls vorhanden; sonst Fallback-Aggregation.

NameTypBedeutung
tag_typestring, in der Abfrage
optional
statusstring, in der Abfrage
optional
draft|approved|frozen
limitinteger, in der Abfrage
optional · Vorgabe 500

Beispiel

curl "$API/taxonomy/grandparents" \
  -H "X-API-Key: $KEY"
POST /taxonomy/grandparents/bulk

Grandparent Bulk

Massenaktionen wie review_taxonomy.py gp-bulk, nur aus der Oberfläche: kohärente Gruppen freigeben bzw. freigegebene einfrieren.

Keine Parameter.

Anfragekörper GrandparentBulk

NameTypBedeutung
actionstring
Pflicht
Action
tag_typestring
optional
Tag Type
reviewerstring
optional
Reviewer
dry_runboolean
optional · Vorgabe True
Dry Run

Beispiel

curl -X POST "$API/taxonomy/grandparents/bulk" \
  -H "X-API-Key: $KEY" \
  -H "Content-Type: application/json" \
  -d '{ … }'
POST /taxonomy/grandparents/move-parents

Move Parents

Parents unter einen anderen Grandparent hängen — das Werkzeug gegen die Ward-Artefakte (einzelne Ausreißer in einer sonst sauberen Gruppe).

Zusammenführen zweier Grandparents ist derselbe Vorgang mit allen Parents der Quelle. Schreibt in drei Collections, weil grandparent_id in kw_taxonomy_map und kw_taxonomy_stock denormalisiert liegt — würde nur die Registry geändert, liefen Peer-Abfragen auf by-parent?level=grandparent weiter auf den alten Wert.

Keine Parameter.

Anfragekörper MoveParents

NameTypBedeutung
parent_idsarray
Pflicht
Parent Ids
target_grandparent_idstring
Pflicht
Target Grandparent Id
reviewerstring
optional
Reviewer
dry_runboolean
optional · Vorgabe True
Dry Run

Beispiel

curl -X POST "$API/taxonomy/grandparents/move-parents" \
  -H "X-API-Key: $KEY" \
  -H "Content-Type: application/json" \
  -d '{ … }'
GET /taxonomy/grandparents/{grandparent_id}

Grandparent Detail

Ein Grandparent mit seinen feinen Parents (aus der Registry).

NameTypBedeutung
grandparent_idstring, im Pfad
Pflicht

Beispiel

curl "$API/taxonomy/grandparents/SAP" \
  -H "X-API-Key: $KEY"
PATCH /taxonomy/grandparents/{grandparent_id}

Patch Grandparent

Label (6 Sprachen), Status und Notiz eines Grandparents ändern.

Die Registry ist die maßgebliche Label-Quelle — die großen Collections joinen per grandparent_id, ein Label-Fix wirkt also sofort überall.

NameTypBedeutung
grandparent_idstring, im Pfad
Pflicht

Anfragekörper GrandparentPatch

NameTypBedeutung
labelsobject
optional
Labels
statusstring
optional
Status
coherentboolean
optional
Coherent
notestring
optional
Note
reviewerstring
optional
Reviewer

Beispiel

curl -X PATCH "$API/taxonomy/grandparents/SAP" \
  -H "X-API-Key: $KEY" \
  -H "Content-Type: application/json" \
  -d '{ … }'
GET /taxonomy/keyword/{keyword_id}

Keyword Mapping

Gegenrichtung zu /parents/{parent_id}/keywords: von EINEM Keyword nach oben auf Parent und Grandparent schließen.

keyword_id ist dieselbe ID wie in /tickers/keywords bzw. in keywords_multilingual.keyword_id — jedes Keyword hat genau ein Mapping. status beachten: needs_review heißt maschinell geclustert und nicht bestätigt; candidates zeigt die Alternativen mit Score.

Beispiel: /taxonomy/keyword/cybersecurityindustry:cybersecurity.

NameTypBedeutung
keyword_idstring, im Pfad
Pflicht

Beispiel

curl "$API/taxonomy/keyword/12345" \
  -H "X-API-Key: $KEY"
GET /taxonomy/keywords/resolve

Resolve Keywords

Batch-Variante: viele Keywords in EINEM Call auf ihre Parents auflösen — damit ein Client die Keyword-Liste einer Aktie nicht Keyword für Keyword abfragen muss. Nicht gemappte IDs fehlen in der Antwort (kein 404).

NameTypBedeutung
idsstring, in der Abfrage
Pflicht
Komma-getrennte keyword_ids, max. 500

Beispiel

curl "$API/taxonomy/keywords/resolve?ids=SAP" \
  -H "X-API-Key: $KEY"
GET /taxonomy/parents

List Parents

Feine Ebene (~7.000 Parents).

NameTypBedeutung
tag_typestring, in der Abfrage
optional
grandparent_idstring, in der Abfrage
optional
searchstring, in der Abfrage
optional
Filtert label_en/label_de
limitinteger, in der Abfrage
optional · Vorgabe 200

Beispiel

curl "$API/taxonomy/parents" \
  -H "X-API-Key: $KEY"
GET /taxonomy/parents/{parent_id}/keywords

Parent Keywords

Alle Detail-Keywords, die auf diesen Parent gemappt sind.

NameTypBedeutung
parent_idstring, im Pfad
Pflicht
limitinteger, in der Abfrage
optional · Vorgabe 500

Beispiel

curl "$API/taxonomy/parents/482/keywords" \
  -H "X-API-Key: $KEY"
POST /taxonomy/review/bulk

Review Bulk

Viele Fälle auf einmal entscheiden (nur approve/reject — ein Sammel-Reassign auf EINEN Parent wäre fast immer falsch).

Läuft per Default als dry_run und meldet nur, wie viele betroffen wären. Erst dry_run=false schreibt. Der Vorzustand landet vollständig im Log, die Aktion ist über batch_id als Ganzes zurücknehmbar.

Keine Parameter.

Anfragekörper BulkReview

NameTypBedeutung
verdictstring
optional · Vorgabe approve
Verdict
tag_typestring
optional
Tag Type
ranksstring
optional
Ranks
min_countinteger
optional · Vorgabe 0
Min Count
self_namedboolean
optional
Self Named
llm_agreesboolean
optional
nur Fälle, in denen der LLM-Vorschlag die Pipeline bestätigt
min_llm_confidencenumber
optional · Vorgabe 0.0
Min Llm Confidence
keyword_idsarray
optional
Keyword Ids
reviewerstring
optional
Reviewer
limitinteger
optional · Vorgabe 5000
Limit
dry_runboolean
optional · Vorgabe True
Dry Run

Beispiel

curl -X POST "$API/taxonomy/review/bulk" \
  -H "X-API-Key: $KEY" \
  -H "Content-Type: application/json" \
  -d '{ … }'
GET /taxonomy/review/log

Review Log

Was wurde zuletzt entschieden (neueste zuerst).

NameTypBedeutung
scopestring, in der Abfrage
optional
batch_idstring, in der Abfrage
optional
limitinteger, in der Abfrage
optional · Vorgabe 50

Beispiel

curl "$API/taxonomy/review/log" \
  -H "X-API-Key: $KEY"
GET /taxonomy/review/progress

Review Progress

Kopfzeile der Oberfläche: was ist offen, was ist geschafft.

Getrennt nach den beiden Ebenen, weil sie unterschiedlich groß sind und unterschiedlich viel bewirken.

Keine Parameter.

Beispiel

curl "$API/taxonomy/review/progress" \
  -H "X-API-Key: $KEY"
GET /taxonomy/review/queue

Review Queue

Offene Keyword-Fälle, wichtigste zuerst (Rang, dann Aktien-Anzahl).

Anders als eine reine Score-Sortierung stellt das die Fälle nach vorn, bei denen eine Fehlentscheidung tatsächlich etwas verschiebt. ranks=all liefert weiterhin die vollständige Menge.

NameTypBedeutung
tag_typestring, in der Abfrage
optional
ranksstring, in der Abfrage
optional · Vorgabe 0
review_rank-Filter, komma-separiert. 0=echte Entscheidung … 3=nicht vergleichsrelevant. 'all' = ohne Filter
min_countinteger, in der Abfrage
optional · Vorgabe 0
nur Keywords ab N Aktien
self_namedboolean, in der Abfrage
optional
nur/keine Namensgeber-Fälle
has_llmboolean, in der Abfrage
optional
nur Fälle mit LLM-Vorschlag
llm_disagreesboolean, in der Abfrage
optional
nur wo LLM != Pipeline-Top-1
searchstring, in der Abfrage
optional
Volltext auf Label/ID
skipinteger, in der Abfrage
optional · Vorgabe 0
limitinteger, in der Abfrage
optional · Vorgabe 50
min_scorenumber, in der Abfrage
optional · Vorgabe 0.0

Beispiel

curl "$API/taxonomy/review/queue" \
  -H "X-API-Key: $KEY"
POST /taxonomy/review/undo

Review Undo

Eine Entscheidung oder eine ganze Massen-Aktion zurücknehmen.

Spielt den im Log festgehaltenen Vorzustand zurück. Felder, die es vorher nicht gab (reviewed_at beim ersten Review), werden entfernt statt auf null gesetzt — sonst würde {"$exists": true} weiter greifen.

Keine Parameter.

Anfragekörper UndoRequest

NameTypBedeutung
entry_idstring
optional
Entry Id
batch_idstring
optional
Batch Id

Beispiel

curl -X POST "$API/taxonomy/review/undo" \
  -H "X-API-Key: $KEY" \
  -H "Content-Type: application/json" \
  -d '{ … }'
POST /taxonomy/review/{keyword_id}

Review Decision

Entscheidung für ein Keyword. approve = Zuordnung bestätigen, reject = als falsch markieren, reassign = auf einen anderen Parent umhängen.

NameTypBedeutung
keyword_idstring, im Pfad
Pflicht

Anfragekörper ReviewDecision

NameTypBedeutung
verdictstring
Pflicht
Verdict
parent_idstring
optional
Parent Id
reviewerstring
optional
Reviewer
notestring
optional
Note

Beispiel

curl -X POST "$API/taxonomy/review/12345" \
  -H "X-API-Key: $KEY" \
  -H "Content-Type: application/json" \
  -d '{ … }'
GET /taxonomy/stats

Taxonomy Stats

Übersicht: Anzahl Ebenen und Coverage.

Die Zahlen stammen aus dem Offline-Lauf (keyword_taxonomy/run_all.py) und enthalten die Keywords von Ticker-Kollisionen mit. Rund 3,3 % der keyword_ids (3.744 von 113.842) existieren ausschliesslich, weil sie aus einer Kollisionszeile extrahiert wurden — sie beschreiben eine andere Firma als der Ticker. Ebenso count_sum in kw_taxonomy_parents und n_keywords in kw_taxonomy_grandparents. Bereinigt werden diese Zaehler erst beim naechsten Pipeline-Lauf, wenn step00_export die Zeilen mit enrichment_suspect ueberspringt.

Keine Parameter.

Beispiel

curl "$API/taxonomy/stats" \
  -H "X-API-Key: $KEY"
GET /taxonomy/stock/{stock_id}

Stock Tags

Parent-/Grandparent-Tags einer Aktie (dedupliziert).

NameTypBedeutung
stock_idstring, im Pfad
Pflicht
compare_onlyboolean, in der Abfrage
optional · Vorgabe False
Nur vergleichsrelevante Arten

Beispiel

curl "$API/taxonomy/stock/SAP" \
  -H "X-API-Key: $KEY"
{
  "isin": "DE0007164600",
  "grandparents": ["Unternehmenssoftware", "Cloud-Infrastruktur"],
  "parents": ["ERP", "Datenbanken", "Business Intelligence"],
  "keywords": 47
}