Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

recipes-parser

Charlie8527062UNLICENSED1.3.9TypeScript support: included

A library to parse recipes (string text entry) and exctract aliments, units and weights

parser, recipes, ingredients, food, nutrition, health, cooking

readme

recipes-parser

coverage coverage coverage coverage

Parse recipes instructions (string text entry) and extract ingredients, units and quantity.

Features

  • Based on NLP (natural language processing) and pegsjs library
  • Available in English and French, but has support for custom languages

Install

npm install recipes-parser --save

Usage

import fs from "fs";
import * as path from "path";
import RecipesParser from "recipes-parser";

import units from "recipes-parser/lib/nlp/en/units.json";
import globalUnit from "recipes-parser/lib/nlp/en/global_unit.json";
const rules = fs.readFileSync(
  path.join(__dirname, `node_modules/recipes-parser/nlp/en/rules.pegjs`),
  {
    encoding: "utf8",
  }
);

const parser = new RecipesParser(rules, units, globalUnit);

const results = parser.getIngredientsFromText(
  ["3 cl. fresh raspberries"],
  true
);

getIngredientsFromText(instructions: string[], returnUnitKey?: boolean): object: IRecipeResult[]

instructions

The list of instructions. Supports NLP queries.

returnUnitKey

If true return the matched key, if false return the matched text.

IRecipeResult {
  result?: { // the result when matched OK
    instruction: string; // the instruction parsed
    unit: string; // the unit matched
    amount: number; ; // the quantity calculated
    ingredient: string; // the quantity matched
  };
  unknown: {  // the result matched OK
    instruction?: string;   // the instructon parsed
    reasons?: UNKNOWN_REASONS[]; // the array of reasons why matched is OK
  };
}

enum UNKNOWN_REASONS {
  PARSING = "mismatch during parsing",
  PARSING_AMOUNT = "unknown amount",
  PARSING_UNIT = "unknown unit",
  NO_ENTRY = "unavailable ingredient"
}

Examples

Simple number detection: 1 kilogram of chicken

{
  "result": {
    "ingredient": "chicken",
    "unit": "kg",
    "amount": 1
  }
}

Fraction number detection: 1/2 kilogram of chicken

{
  "result": {
    "ingredient": "chicken",
    "unit": "kg",
    "amount": 0.5
  }
}

Approximation number detection: 2-3 teaspoons of sugar

{
  "result": {
    "ingredient": "sugar",
    "unit": "teaspoon",
    "amount": 2.5
  }
}

Word number detection: Seven teaspoons of sugar

{
  "result": {
    "ingredient": "sugar",
    "unit": "teaspoon",
    "amount": 7
  }
}

Word and fraction number detection: 5 1/2 liter of milk

{
  "result": {
    "ingredient": "milk",
    "unit": "liter",
    "amount": 2.5
  }
}

Word and number detection: 5 quarter of orange

{
  "result": {
    "ingredient": "orange",
    "unit": "undefined",
    "amount": 1.25
  }
}

Abbreviation units detection: 5 tbsp of milk

{
  "result": {
    "ingredient": "orange",
    "unit": "tablespoon",
    "amount": 1.25
  }
}

License

MIT

changelog

v1.0.0

  • Release

v1.3.6

  • Add new support keys for units detection

v1.3.7

  • Change return key unit to EN for all language (EN, FR)

  • Add Support of word and fraction number detection (5 1/2 liter of milk)

  • Add Support word and number detection detection (5 quarter of oragne)

v1.3.8

  • Add support for 'c. à s.' and 'c. à s.' notation (teaspoon and tablespoon)

v1.3.9

  • Add Multilangage support with conf file