Wie unterscheidet man in einer Datenbank effizient zwischen Rezepten und Produktanzeigen für „Apfeltaschen“?

Melden

Die effiziente Unterscheidung zwischen Rezepten und Produktanzeigen für denselben Begriff (wie „Apfeltaschen“) in einer Datenbank lässt sich auf verschiedenen Ebenen lösen – von der Datenbankstruktur bis hin zur Inhaltsanalyse.

Hier sind die besten Strategien, sortiert von „Struktur“ bis „KI“:

1. Eindeutige Kategorisierung (Meta-Daten)

Der effizienteste Weg ist die Verwendung eines Type-Flags oder einer Kategorien-Tabelle. Wenn Sie die Daten importieren, sollten Sie bereits beim Scraping oder bei der Eingabe ein Label setzen.

  • Tabelle: items
  • Spalte: entry_type (z.B. ENUM: 'recipe', 'product')
  • Vorteil: Eine einfache SQL-Abfrage (WHERE entry_type = 'recipe') ist extrem schnell, besonders wenn ein Index auf der Spalte liegt.

2. Analyse der Pflichtfelder (Strukturelle Merkmale)

Rezepte und Produkte haben unterschiedliche Datensätze. Sie können die Unterscheidung anhand der Existenz bestimmter Felder festmachen:

  • Rezepte besitzen:
    • ingredients (Zutatenliste als Array oder Text)
    • instructions (Zubereitungsschritte)
    • prep_time (Vorbereitungszeit)
    • servings (Portionen)
  • Produkte besitzen:
    • price (Preis)
    • brand (Marke/Hersteller)
    • gtin / ean (Strichcode)
    • availability (Lagerbestand/Supermarkt-Standort)

Effizienz-Tipp: Nutzen Sie in SQL eine Abfrage, die prüft, ob ein Preisfeld gefüllt ist:

SELECT * FROM entries WHERE price IS NOT NULL; -- Produkt
SELECT * FROM entries WHERE instructions IS NOT NULL; -- Rezept

3. Keyword-basierte Klassifizierung (Full-Text Search)

Wenn die Daten unstrukturiert vorliegen (z.B. nur ein langer Beschreibungstext), können Sie über eine Gewichtung von Schlüsselwörtern gehen:

  • Keywords für Rezepte: Zutaten, Zubereitung, Backofen, Vorheizen, Gramm, Teelöffel, verrühren, kneten.
  • Keywords für Produkte: Angebot, Preis, MwSt, inkl., zzgl. Versand, In den Warenkorb, Hersteller, Packung.

In einer Datenbank wie PostgreSQL können Sie dies über tsvector lösen:

SELECT title FROM entries 
WHERE to_tsvector('german', description) @@ to_tsquery('german', 'Zutaten & Backofen');

4. Schema.org Tags (beim Import)

Falls Sie die Daten aus dem Web crawlen, ist die effizienteste Methode das Auslesen der Microdata oder JSON-LD.

  • Webseiten markieren Rezepte fast immer mit @type: "Recipe".
  • Produkte werden mit @type: "Product" markiert. Wenn Sie diese Information beim Speichern in einer Spalte schema_type mitführen, ist die Unterscheidung 100 % präzise.

5. URL-Struktur (Heuristik)

Oft lässt sich die Unterscheidung bereits an der Quelle feststellen:

  • chefkoch.de/rezepte/... -> Eindeutig Rezept.
  • rewe.de/produkte/... -> Eindeutig Produkt.

6. Semantische Suche / Embeddings (KI-Ansatz)

Wenn die oben genannten Methoden scheitern (z.B. weil die Daten sehr unsauber sind), nutzen Sie Vector Embeddings.

  • Sie wandeln den Text in einen Vektor (Zahlenreihe) um.
  • Rezepte landen in einem anderen Bereich des Vektorraums als Verkaufsanzeigen, da der Kontext (kochen vs. kaufen) unterschiedlich ist.
  • Dies ist rechenintensiver, aber sehr robust gegenüber Synonymen.

Zusammenfassung der Empfehlung

  1. Idealfall: Beim Speichern ein Feld item_type (Recipe vs. Product) setzen.
  2. Bestandsdaten: Prüfen auf price (Produkt) vs. instructions (Rezept).
  3. Schnelle Suche: Nutzen Sie Indizes auf den Feldern price oder ingredients_count.

Wenn Sie eine SQL-Datenbank nutzen, wäre der effizienteste Weg ein Index auf einer berechneten Spalte oder ein einfacher Filter auf das Preisfeld.

0