Never Program Mad

    recipes-parser
    TypeScript icon, indicating that this package has built-in type declarations

    1.3.9 • Public • Published

    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

    Install

    npm i recipes-parser

    DownloadsWeekly Downloads

    1

    Version

    1.3.9

    License

    UNLICENSED

    Unpacked Size

    88 kB

    Total Files

    32

    Last publish

    Collaborators

    • crabiller