Rezept-Zuordnung: die Einheit verraet das falsche Produkt
"200 ml Schlagsahne" landete auf "Kraeuter Sahne Haehnchen" - beide teilen
das Wort "Sahne", der Rest ist Zufall. Die Einheit haette es verraten: Das
Haehnchen wird in Gramm gefuehrt, das Rezept sagt Milliliter. Wo sich die
Rezept-Einheit gar nicht umrechnen laesst, wird deshalb nicht mehr
zugeordnet, sondern offen gelassen - lieber "nichts Passendes gefunden"
samt Begruendung als eine falsche Behauptung.
Entscheidend ist, WARUM die Umrechnung scheitert, und nur einer der Gruende
sagt etwas ueber den Artikel:
- Bekannte Einheit falscher Art ohne Zweiteinheit -> spricht gegen den
Artikel. Milliliter an einem Gramm-Produkt ist ein anderes Produkt.
- Unbekanntes Wort oder nicht hinterlegtes Hausmass ("1 Tasse Linsen") ->
sagt gar nichts. Die Linsen koennen voellig richtig sein, es fehlt bloss
die Massangabe, und die laesst sich nachtragen.
- Gar keine Einheit ("3 Eier") -> passt immer.
Die erste Fassung hat das nicht unterschieden und damit "1 Tasse Linsen"
zu "nicht zugeordnet" gemacht, obwohl der Artikel stimmte - die beiden
bestehenden Tests haben das sofort gezeigt.
Bei mehreren Kandidaten gewinnt jetzt der mit passender Einheit, auch gegen
eine hoehere Namensaehnlichkeit.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
41d262cb2d
commit
2a56cca3c8
@@ -310,6 +310,57 @@ def test_beiwoerter_stoeren_den_echten_treffer_nicht(db):
|
||||
assert zutat.ziel_id == aepfel.id
|
||||
|
||||
|
||||
def test_falsche_einheit_spricht_gegen_den_artikel(db):
|
||||
"""„200 ml Schlagsahne" ist kein „Kräuter Sahne Hähnchen"."""
|
||||
fleisch = _kategorie(db, "Fleisch & Fisch")
|
||||
_artikel(db, "Kräuter Sahne Hähnchen", fleisch, base=BaseUnit.gram, bestand=800)
|
||||
|
||||
[zutat] = pruefe_zutaten(db, [_zutat("Schlagsahne", 200, "ml")])
|
||||
|
||||
assert zutat.status == "kein_treffer"
|
||||
assert "nicht in 'ml' geführt" in zutat.hinweis
|
||||
|
||||
|
||||
def test_passende_einheit_gewinnt_gegen_hoehere_punktzahl(db):
|
||||
molk = _kategorie(db, "Molkereiprodukte")
|
||||
fleisch = _kategorie(db, "Fleisch & Fisch")
|
||||
_artikel(db, "Sahne Hähnchen", fleisch, base=BaseUnit.gram, bestand=800)
|
||||
richtig = _artikel(db, "Schlagsahne Rahm", molk, base=BaseUnit.milliliter, bestand=500)
|
||||
|
||||
[zutat] = pruefe_zutaten(db, [_zutat("Schlagsahne", 200, "ml")])
|
||||
|
||||
assert zutat.ziel_id == richtig.id
|
||||
|
||||
|
||||
def test_fehlendes_hausmass_spricht_nicht_gegen_den_artikel(db):
|
||||
"""Nur eine BEKANNTE Einheit falscher Art ist ein Hinweis.
|
||||
|
||||
„1 Tasse Linsen" heisst nicht, dass die Linsen falsch sind – es fehlt bloss
|
||||
die Maßangabe, und die laesst sich nachtragen.
|
||||
"""
|
||||
cat = _kategorie(db, "Hülsenfrüchte")
|
||||
linsen = _artikel(db, "Berglinsen", cat, bestand=1000)
|
||||
|
||||
[zutat] = pruefe_zutaten(db, [_zutat("Berglinsen", 1, "Tasse")])
|
||||
|
||||
assert zutat.ziel_id == linsen.id
|
||||
assert zutat.status == "menge_unbekannt"
|
||||
|
||||
|
||||
def test_zweiteinheit_laesst_die_fremde_einheit_zu(db):
|
||||
cat = _kategorie(db, "Backwaren")
|
||||
broetchen = _artikel(db, "Brötchen", cat, base=BaseUnit.piece, package_size=6,
|
||||
bestand=12)
|
||||
broetchen.secondary_base = BaseUnit.gram.value
|
||||
broetchen.secondary_count = 1
|
||||
broetchen.secondary_amount = 50
|
||||
db.commit()
|
||||
|
||||
[zutat] = pruefe_zutaten(db, [_zutat("Brötchen", 100, "g")])
|
||||
|
||||
assert zutat.ziel_id == broetchen.id
|
||||
|
||||
|
||||
def test_umlaut_und_mehrzahl_finden_sich(db):
|
||||
"""Rezept schreibt „Apfel", im Katalog stehen „Äpfel"."""
|
||||
cat = _kategorie(db, "Obst & Gemüse")
|
||||
|
||||
Reference in New Issue
Block a user