6.4 KiB
Stammdaten aufräumen
Führt doppelte Zutaten, Einheiten und Schlagworte zusammen und findet Karteileichen.
Bitte einmal lesen, bevor du es benutzt
Tandoors merge hängt alle Verweise der Quelle auf das Ziel um und löscht
die Quelle. Das ist nicht umkehrbar. Im Tandoor-Quelltext steht dazu:
# TODO these checks could be improved to merge existing properties and
# conversion in a smart way. For now it will just loose them to prevent
# duplicates
if isinstance(source, Food):
source.properties.all().delete()
Die Nährwerte des Quelleintrags gehen also verloren. Dieses Werkzeug rettet
sie deshalb vorher: Werte, die nur die Quelle hat, werden zuerst ans Ziel
geschrieben. Abschaltbar über das Häkchen bzw. --ohne-rettung.
Was vorgeschlagen wird — und was nicht
Sichere Dubletten (vorausgewählt) bei praktisch sicheren Fällen:
- gleicher Name (
Zwiebel/zwiebel,Olivenöl/Olivenoel) - Singular/Plural (
Zwiebel/Zwiebeln,Tomate/Tomaten)
Ähnlich — anhakbar, aber nie vorausgewählt und mit Pflicht zur Richtungswahl:
- echte Wort-Teilmengen (
Mehl/Mehl Type 550,Olivenöl/Olivenöl nativ extra) — jedes Wort der kürzeren Seite kommt als ganzes Wort in der längeren vor
Der Unterschied ist Absicht. Rote Zwiebel sieht Zwiebel sehr ähnlich, ist
aber etwas anderes — deshalb entscheidet hier der Mensch, ob und in welche
Richtung zusammengeführt wird, statt dass etwas vorausgewählt ist.
Bekannte Lücke: unregelmäßige Plurale mit Umlaut (Ei / Eier,
Apfel / Äpfel) erkennt die Heuristik nicht. Die tauchen in keiner der
beiden Listen auf.
Löschen wird grundsätzlich nicht vorausgewählt — manches hebt man absichtlich auf.
Welcher Eintrag bleibt
Ziel ist der Eintrag, der am meisten zu verlieren hätte, in dieser Reihenfolge: die meisten Rezepte → die meisten Nährwerte → gepflegter Plural → Supermarkt-Kategorie → kürzerer Name.
Ablauf
- Prüfen — schreibt eine Plandatei. Verändert nichts.
- Plan durchsehen, Häkchen setzen.
- Trockenübung — zeigt Zeile für Zeile, was passieren würde.
- Ausführen — erst dann wird es ernst. Vor jedem Schritt wird der Zustand der betroffenen Einträge gesichert.
Zusammengeführt wird vor dem Löschen: eine Zusammenführung kann einen Eintrag erst unbenutzt machen.
Ohne Suite
export TANDOOR_URL=https://kitchen.example.de
export TANDOOR_TOKEN=...
python3 plugins/tandoor-cleanup/tool/cleanup.py pruefen
python3 plugins/tandoor-cleanup/tool/cleanup.py pruefen --arten food
python3 plugins/tandoor-cleanup/tool/cleanup.py ausfuehren \
--plan data/tandoor-cleanup/plaene/<datei>.json # Trockenübung
python3 plugins/tandoor-cleanup/tool/cleanup.py ausfuehren \
--plan data/tandoor-cleanup/plaene/<datei>.json --apply # ernst
Dateien
data/tandoor-cleanup/plaene/<zeit>.json Plan
data/tandoor-cleanup/laeufe/<zeit>/ Sicherungen + ausgeführter Plan
Bessere Ähnlich-Erkennung (Wort-Teilmenge statt Zeichenkette)
Früher galt schon eine bloße Zeichenketten-Enthaltung als „Teilwort“. Das
erzeugte Fehlpaare wie Mango ~ Mangold, Buchweizen ~ Buchweizenmehl
oder getrocknete Tomate ~ getrocknete Tomaten in Öl. Jetzt zählt nur eine
echte Wort-Teilmenge: jedes Wort der kürzeren Seite muss als ganzes Wort
in der längeren vorkommen. Dadurch verschwinden diese Fehlpaare, während echte
Untertypen (Mehl / Mehl Type 550) erhalten bleiben.
Plurale pflegen (Zutaten und Einheiten)
Eigener Abschnitt „Plurale“ je Art — für Zutaten und Einheiten. Er zeigt alle Einträge mit ihrem aktuellen Plural in einem editierbaren Feld; fehlende stehen oben und sind hervorgehoben. Ein Filterfeld macht große Listen bedienbar. Bearbeiten hakt die Zeile automatisch an. Geschrieben wird nur, was sich gegenüber dem Ist-Stand geändert hat — Unverändertes wird übersprungen. Setzen und Ändern sind nicht destruktiv und voll rückspielbar.
KI-Vorauswahl für ähnliche Paare (ChatGPT)
Das Finden der Paare bleibt die Heuristik. Ist beim Prüfen „Ähnliche Paare per
KI vorfiltern“ aktiv (Vorgabe an, sobald ein OPENAI_API_KEY hinterlegt ist),
ordnet ChatGPT jedes gefundene Paar in drei Töpfe:
- gleich – zweifelsfrei dasselbe (Schreibvarianten, fehlendes Leerzeichen, Groß/Klein, Singular/Plural). Wird angehakt und die Richtung vorgewählt (der allgemeinere bzw. korrekt geschriebene Name bleibt).
- unklar – könnte dasselbe sein. Wird angezeigt, aber nicht vorgewählt — du entscheidest.
- verschieden – zweifelsfrei verschiedene Sorten/Produkte (Weizenmehl 550 vs. 1050, Frischkäse vs. körniger Frischkäse). Standardmäßig ausgeblendet.
Ein Filter über der Liste schaltet zwischen „Nur KI-Treffer“ (gleich + unklar) und „Alle“ (auch die verschiedenen) um.
So sind die eindeutigen Fälle mit einem Blick abgehakt, die strittigen bleiben
sichtbar, und der Lärm ist weg. Nichts wird ausgeführt — du prüfst und startest
selbst; Zusammenführen bleibt gesichert und rückspielbar. Kommandozeile:
pruefen --ki-filter. Fällt die KI aus, bleiben alle Paare unverändert stehen.
Plurale per KI (ChatGPT)
Getrennt davon schlägt ChatGPT auf Wunsch die Plurale von Zutaten und
Einheiten vor — auch die Umlaut-Fälle (Apfel → Äpfel), die die Heuristik
nicht kann (vorbelegen --plan <datei>, Knopf „Plurale vorschlagen“).
Standardmäßig nur dort, wo noch kein Plural gepflegt ist; --alle-plurale nimmt
auch bestehende. Einträge, die durch eine angehakte Zusammenführung ohnehin
verschwinden, werden übersprungen. Auch das ist nur ein Vorschlag und voll
rückspielbar. Verbindung prüfen: probe bzw. „OpenAI testen“.
Hinweis: Einheiten-Plurale und Tandoor-Serverfehler
Manche Tandoor-Versionen stürzen beim Ändern einer Einheit über einen schlichten Teil-PATCH mit „HTTP 500“ ab (Zutaten sind nicht betroffen). Das Werkzeug setzt Einheiten-Plurale deshalb robust: zuerst per vollständigem PUT (anderer Code-Pfad, alle vorhandenen Felder bleiben erhalten), danach mit mitgesendetem Namen, zuletzt der schlichte Weg. Lehnt der Server alle Wege ab, werden die restlichen Einheiten-Plurale übersprungen (mit klarer Meldung) statt sie einzeln durchzuprobieren — dann bitte in der Tandoor-Oberfläche setzen. Zutaten-Plurale laufen davon unberührt weiter.