Parse recipes instructions (string text entry) and extract ingredients, units and quantity.
- Based on NLP (natural language processing) and pegsjs library
- Available in English and French, but has support for custom languages
npm install recipes-parser --save
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
);
The list of instructions. Supports NLP queries.
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"
}
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
}
}
MIT