Import TheMealDB : les synonymes d'ingrédients ("vanilla pod" vs "vanilla bean") ne sont pas reconnus #4

Closed
opened 2026-08-27 12:49:04 +02:00 by kyuno · 1 comment
Owner

Contexte

Lors de l'import d'une recette TheMealDB, certains ingrédients pourtant présents dans le catalogue ne sont pas reconnus automatiquement et finissent dans la section "Ingrédients à compléter", alors qu'un synonyme anglais courant suffirait à les faire correspondre.

Exemple observé sur la recette "Flan" (externalId 53322) : l'ingrédient source "1 vanilla pod" n'est pas reconnu, alors que le catalogue contient bien "Vanille (gousse)" (clé vanillaBean, libellé anglais de matching "Vanilla bean" dans packages/shared/src/data/catalog-labels-en.ts).

Cause

matchIngredientName (apps/api/src/lib/ingredient-matcher.ts) exige que les tokens du libellé catalogue ("vanilla", "bean") apparaissent tels quels et contigus dans le texte source. TheMealDB utilise couramment "Vanilla Pod" plutôt que "Vanilla Bean" — "pod" ≠ "bean", donc aucune correspondance, malgré un ingrédient équivalent existant.

Impact

Faible — l'utilisateur peut toujours choisir manuellement l'ingrédient correct dans "Ingrédients à compléter". C'est un défaut d'ergonomie/complétude des synonymes plutôt qu'un blocage (contrairement à #53).

Piste de correction

INGREDIENT_LABELS_EN n'accepte qu'un seul libellé anglais par ingrédient aujourd'hui — passer à une liste de synonymes par ingrédient (comme UNIT_LABELS_EN le fait déjà pour les unités) permettrait d'ajouter des variantes fréquentes chez les sources anglophones (ex. ["Vanilla bean", "Vanilla pod"]) sans devoir changer l'algorithme de matching lui-même.

🤖 Filed by Claude Code

## Contexte Lors de l'import d'une recette TheMealDB, certains ingrédients pourtant présents dans le catalogue ne sont pas reconnus automatiquement et finissent dans la section "Ingrédients à compléter", alors qu'un synonyme anglais courant suffirait à les faire correspondre. Exemple observé sur la recette "Flan" (`externalId` `53322`) : l'ingrédient source `"1 vanilla pod"` n'est pas reconnu, alors que le catalogue contient bien "Vanille (gousse)" (clé `vanillaBean`, libellé anglais de matching `"Vanilla bean"` dans `packages/shared/src/data/catalog-labels-en.ts`). ## Cause `matchIngredientName` (`apps/api/src/lib/ingredient-matcher.ts`) exige que les tokens du libellé catalogue (`"vanilla"`, `"bean"`) apparaissent **tels quels** et **contigus** dans le texte source. TheMealDB utilise couramment `"Vanilla Pod"` plutôt que `"Vanilla Bean"` — `"pod"` ≠ `"bean"`, donc aucune correspondance, malgré un ingrédient équivalent existant. ## Impact Faible — l'utilisateur peut toujours choisir manuellement l'ingrédient correct dans "Ingrédients à compléter". C'est un défaut d'ergonomie/complétude des synonymes plutôt qu'un blocage (contrairement à #53). ## Piste de correction `INGREDIENT_LABELS_EN` n'accepte qu'un seul libellé anglais par ingrédient aujourd'hui — passer à une liste de synonymes par ingrédient (comme `UNIT_LABELS_EN` le fait déjà pour les unités) permettrait d'ajouter des variantes fréquentes chez les sources anglophones (ex. `["Vanilla bean", "Vanilla pod"]`) sans devoir changer l'algorithme de matching lui-même. 🤖 Filed by [Claude Code](https://claude.com/claude-code)
kyuno added the
bug
label 2026-08-27 17:37:41 +02:00
kyuno changed title from mport TheMealDB : les synonymes d'ingrédients ("vanilla pod" vs "vanilla bean") ne sont pas reconnus to Import TheMealDB : les synonymes d'ingrédients ("vanilla pod" vs "vanilla bean") ne sont pas reconnus 2026-09-05 14:32:26 +02:00
kyuno added the
planned
label 2026-09-05 15:48:15 +02:00
kyuno added the
Low
label 2026-09-05 18:52:14 +02:00
Author
Owner

Déjà corrigé sur main — ce ticket est un doublon de #54, livré par la PR #59 (commit 5d63ff9, "Ajout de INGREDIENT_LABEL_SYNONYMS_EN pour reconnaître des formulations alternatives fréquentes chez les sources anglophones ("vanilla pod" en plus de "vanilla bean")").

État actuel du code :

  • packages/shared/src/data/catalog-labels-en.ts — INGREDIENT_LABEL_SYNONYMS_EN = { vanillaBean: ["Vanilla pod"], ... } (+ équivalent _FR : vanillaBean: ["Gousse de vanille"]).
  • apps/api/src/lib/recipe-matching/ingredient-matcher.ts — loadIngredientCatalog ajoute une entrée IngredientMatchEntry par synonyme, partageant le même ingredientId ; matchIngredientName n'a rien à savoir des synonymes, il voit juste plus de libellés candidats.
  • Tests : apps/api/test/recipe-matching/ingredient-matcher.test.ts couvre matchIngredientName("1 vanilla pod", …) === 8 et le chargement des synonymes par loadIngredientCatalog.

Fermé comme corrigé. Rouvrir si un cas de synonyme non couvert refait surface — il suffira alors d'ajouter une entrée dans INGREDIENT_LABEL_SYNONYMS_EN, sans toucher à l'algorithme.

Traité pendant la passe autonome sur les tickets planned — aucune nouvelle PR nécessaire.

Déjà corrigé sur `main` — ce ticket est un doublon de #54, livré par la PR #59 (commit `5d63ff9`, *"Ajout de INGREDIENT_LABEL_SYNONYMS_EN pour reconnaître des formulations alternatives fréquentes chez les sources anglophones (\"vanilla pod\" en plus de \"vanilla bean\")"*). État actuel du code : - `packages/shared/src/data/catalog-labels-en.ts` — `INGREDIENT_LABEL_SYNONYMS_EN = { vanillaBean: ["Vanilla pod"], ... }` (+ équivalent `_FR` : `vanillaBean: ["Gousse de vanille"]`). - `apps/api/src/lib/recipe-matching/ingredient-matcher.ts` — `loadIngredientCatalog` ajoute une entrée `IngredientMatchEntry` par synonyme, partageant le même `ingredientId` ; `matchIngredientName` n'a rien à savoir des synonymes, il voit juste plus de libellés candidats. - Tests : `apps/api/test/recipe-matching/ingredient-matcher.test.ts` couvre `matchIngredientName("1 vanilla pod", …) === 8` et le chargement des synonymes par `loadIngredientCatalog`. Fermé comme corrigé. Rouvrir si un cas de synonyme non couvert refait surface — il suffira alors d'ajouter une entrée dans `INGREDIENT_LABEL_SYNONYMS_EN`, sans toucher à l'algorithme. _Traité pendant la passe autonome sur les tickets `planned` — aucune nouvelle PR nécessaire._
kyuno closed this issue 2026-09-05 22:58:54 +02:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: kyuno/batchCooking#4
No description provided.