Rezept-Zuordnung: "vegan" ist eine Eigenschaft, kein Lebensmittel

Der Wortanker nahm jedes geteilte Wort ab vier Zeichen - also auch
"vegan". Damit passte jedes vegane Produkt auf jede vegane Zutat: "vegane
Butter" landete auf "veganes Muehlen Knusper Bleu", "veganer griechischer
Joghurt" auf "Vegane Muehlen Nuggets" und "veganer Lime Curd" auf "Vegane
Muehlen-Schnitzel auf Basis von Soja". Geteilt wurde dort nur die
Eigenschaft, nicht die Sache.

Beschreibende Woerter begruenden deshalb keinen Treffer mehr - vegan,
vegetarisch, bio, frisch, geschmolzen, ungesalzen, geschaelt, geschnitten,
Zimmertemperatur, oder, optional und so weiter, dazu reine Zahlen. Als
Wortanfaenge aufgefuehrt, weil Deutsch beugt ("vegan", "vegane",
"veganer", "veganes"). Sie sperren aber nicht: "vegane Butter" findet
weiterhin eine "Vegane Butter", nur eben ueber das Wort "Butter".

Wichtig war, die Liste auf BEIDEN Seiten anzuwenden. Sonst steckt "vegan"
weiter im Produktnamen und der Teilstring-Vergleich greift von dort aus.

Gegenprobe mit dem echten Katalog: Von zehn Zutaten bleiben die drei
richtigen Treffer (Mehl, Vollmilch, Aepfel), die sieben erfundenen sind
weg.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-10-02 13:22:38 +02:00
co-authored by Claude Opus 5
parent 4e34accee3
commit 41d262cb2d
2 changed files with 94 additions and 7 deletions
+54
View File
@@ -256,6 +256,60 @@ def test_kategorie_wird_zuerst_durchsucht(db):
assert zutat.status == "vorhanden"
def test_vegan_allein_begruendet_keinen_treffer(db):
"""„vegan" ist eine Eigenschaft, kein Lebensmittel.
Sonst passt jedes vegane Produkt auf jede vegane Zutat: „vegane Butter"
landete auf „veganes Mühlen Knusper Bleu", „veganer Lime Curd" auf
„Vegane Mühlen-Schnitzel".
"""
fleisch = _kategorie(db, "Fleischersatz")
_artikel(db, "veganes Mühlen Knusper Bleu", fleisch, bestand=400)
_artikel(db, "Vegane Mühlen Nuggets Klassisch", fleisch, bestand=400)
_artikel(db, "Vegane Mühlen-Schnitzel auf Basis von Soja", fleisch, bestand=400)
zutaten = [
_zutat("vegane Butter, Block, ungesalzen", 45, "g"),
_zutat("veganer griechischer Joghurt oder Skyr", 80, "g"),
_zutat("veganer Lime Curd", 120, "g"),
]
for zutat in pruefe_zutaten(db, zutaten):
assert zutat.status == "kein_treffer", zutat.text
assert zutat.ziel_name == ""
def test_vegane_zutat_findet_das_passende_vegane_produkt(db):
"""Die Eigenschaft darf nicht sperren, nur nicht allein tragen."""
molk = _kategorie(db, "Molkereiprodukte")
butter = _artikel(db, "Vegane Butter", molk, bestand=500)
_artikel(db, "Vegane Mühlen-Schnitzel", molk, bestand=400)
[zutat] = pruefe_zutaten(db, [_zutat("vegane Butter, Block, ungesalzen", 45, "g")])
assert zutat.ziel_id == butter.id
assert zutat.status == "vorhanden"
def test_zutat_aus_lauter_eigenschaften_trifft_nichts(db):
cat = _kategorie(db, "Trockenwaren")
_artikel(db, "Weissmehl", cat, bestand=1000)
[zutat] = pruefe_zutaten(db, [_zutat("frisch gemahlen, optional", 1, "g")])
assert zutat.status == "kein_treffer"
def test_beiwoerter_stoeren_den_echten_treffer_nicht(db):
cat = _kategorie(db, "Obst & Gemüse")
aepfel = _artikel(db, "Äpfel", cat, bestand=3000)
[zutat] = pruefe_zutaten(
db, [_zutat("Apfel geschält und in 3 mm dünne Scheiben geschnitten", 900, "g")]
)
assert zutat.ziel_id == aepfel.id
def test_umlaut_und_mehrzahl_finden_sich(db):
"""Rezept schreibt „Apfel", im Katalog stehen „Äpfel"."""
cat = _kategorie(db, "Obst & Gemüse")