diff --git a/README.md b/README.md old mode 100644 new mode 100755 index 279feb85d5efbe4d82139a4466c2a6971e954f0c..eed166b0447b21d7eed18f8883cce5e73d97b33b --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # Install dependencies -pip3 install --user rdflib-jsonld rdflib anytree +# pip3 install --user lark rdflib-jsonld rdflib anytree recipe_scrapers +# pip3 uninstall lark lark-parser +# pip3 install lark-parser owlready2 # Create grammar @@ -8,5 +10,6 @@ pip3 install --user rdflib-jsonld rdflib anytree # Parse recipes # Create ontology +python3 create_ontology.py # Show ontology on website diff --git a/bbc.json b/bbc.json new file mode 100644 index 0000000000000000000000000000000000000000..491ca452fcf07999e2a87eb130730fb0ee2f255b --- /dev/null +++ b/bbc.json @@ -0,0 +1,1503 @@ +[ + { + "@id": "http://purl.org/ontology/fo/ingredients", + "@type": [ + "http://www.w3.org/2002/07/owl#ObjectProperty" + ], + "http://www.w3.org/2000/01/rdf-schema#comment": [ + { + "@language": "en-gb", + "@value": "The ingredients property relates a recipe or recipe stage to an ingredient list." + } + ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy": [ + { + "@id": "http://purl.org/ontology/fo/" + } + ], + "http://www.w3.org/2000/01/rdf-schema#label": [ + { + "@language": "en-gb", + "@value": "ingredients" + } + ], + "http://www.w3.org/2000/01/rdf-schema#range": [ + { + "@id": "http://purl.org/ontology/fo/IngredientList" + } + ], + "http://www.w3.org/2003/06/sw-vocab-status/ns#term_status": [ + { + "@value": "testing" + } + ] + }, + { + "@id": "http://purl.org/ontology/fo/stages", + "@type": [ + "http://www.w3.org/2002/07/owl#ObjectProperty" + ], + "http://www.w3.org/2000/01/rdf-schema#comment": [ + { + "@language": "en-gb", + "@value": "The stages property relates a recipe to the sequence of stages it contains." + } + ], + "http://www.w3.org/2000/01/rdf-schema#domain": [ + { + "@id": "http://purl.org/ontology/fo/Recipe" + } + ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy": [ + { + "@id": "http://purl.org/ontology/fo/" + } + ], + "http://www.w3.org/2000/01/rdf-schema#label": [ + { + "@language": "en-gb", + "@value": "stages" + } + ], + "http://www.w3.org/2000/01/rdf-schema#range": [ + { + "@id": "http://purl.org/ontology/fo/StageSequence" + } + ], + "http://www.w3.org/2003/06/sw-vocab-status/ns#term_status": [ + { + "@value": "testing" + } + ] + }, + { + "@id": "http://purl.org/ontology/fo/Method", + "@type": [ + "http://www.w3.org/2002/07/owl#Class" + ], + "http://www.w3.org/2000/01/rdf-schema#comment": [ + { + "@language": "en-gb", + "@value": "A Method is the way in which ingredients are combined, using particular techniques, in order to produce a food. A method is part of a recipe and is also an rdf:Seq." + } + ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy": [ + { + "@id": "http://purl.org/ontology/fo/" + } + ], + "http://www.w3.org/2000/01/rdf-schema#label": [ + { + "@language": "en-gb", + "@value": "Method" + } + ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf": [ + { + "@id": "http://www.w3.org/1999/02/22-rdf-syntax-ns#Seq" + } + ], + "http://www.w3.org/2003/06/sw-vocab-status/ns#term_status": [ + { + "@value": "testing" + } + ] + }, + { + "@id": "http://purl.org/ontology/fo/serves", + "@type": [ + "http://www.w3.org/2002/07/owl#DatatypeProperty" + ], + "http://www.w3.org/2000/01/rdf-schema#comment": [ + { + "@language": "en-gb", + "@value": "The server property indicates what the recipe is intended to serve, this is often a human readable integer range such as '6-8'." + } + ], + "http://www.w3.org/2000/01/rdf-schema#domain": [ + { + "@id": "http://purl.org/ontology/fo/Recipe" + } + ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy": [ + { + "@id": "http://purl.org/ontology/fo/" + } + ], + "http://www.w3.org/2000/01/rdf-schema#label": [ + { + "@language": "en-gb", + "@value": "serves" + } + ], + "http://www.w3.org/2000/01/rdf-schema#range": [ + { + "@id": "http://www.w3.org/2001/XMLSchema#string" + } + ], + "http://www.w3.org/2003/06/sw-vocab-status/ns#term_status": [ + { + "@value": "testing" + } + ] + }, + { + "@id": "http://purl.org/ontology/fo/required_technique", + "@type": [ + "http://www.w3.org/2002/07/owl#ObjectProperty" + ], + "http://www.w3.org/2000/01/rdf-schema#comment": [ + { + "@language": "en-gb", + "@value": "The required technique property indicates that a particular technique is required in order to complete a recipe, method or step." + } + ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy": [ + { + "@id": "http://purl.org/ontology/fo/" + } + ], + "http://www.w3.org/2000/01/rdf-schema#label": [ + { + "@language": "en-gb", + "@value": "required technique" + } + ], + "http://www.w3.org/2000/01/rdf-schema#range": [ + { + "@id": "http://purl.org/ontology/fo/Technique" + } + ], + "http://www.w3.org/2003/06/sw-vocab-status/ns#term_status": [ + { + "@value": "testing" + } + ] + }, + { + "@id": "http://purl.org/ontology/fo/cuisine", + "@type": [ + "http://www.w3.org/2002/07/owl#ObjectProperty" + ], + "http://www.w3.org/2000/01/rdf-schema#comment": [ + { + "@language": "en-gb", + "@value": "The cuisine property classifies a recipe as being an example of that cuisine." + } + ], + "http://www.w3.org/2000/01/rdf-schema#domain": [ + { + "@id": "http://purl.org/ontology/fo/Recipe" + } + ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy": [ + { + "@id": "http://purl.org/ontology/fo/" + } + ], + "http://www.w3.org/2000/01/rdf-schema#label": [ + { + "@language": "en-gb", + "@value": "cuisine" + } + ], + "http://www.w3.org/2000/01/rdf-schema#range": [ + { + "@id": "http://purl.org/ontology/fo/Cuisine" + } + ], + "http://www.w3.org/2003/06/sw-vocab-status/ns#term_status": [ + { + "@value": "testing" + } + ] + }, + { + "@id": "http://purl.org/ontology/fo/at_its_best", + "@type": [ + "http://www.w3.org/2002/07/owl#ObjectProperty" + ], + "http://www.w3.org/2000/01/rdf-schema#comment": [ + { + "@language": "en-gb", + "@value": "The at its best property tells us in what season a particular food is at its best." + } + ], + "http://www.w3.org/2000/01/rdf-schema#domain": [ + { + "@id": "http://purl.org/ontology/fo/Food" + } + ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy": [ + { + "@id": "http://purl.org/ontology/fo/" + } + ], + "http://www.w3.org/2000/01/rdf-schema#label": [ + { + "@language": "en-gb", + "@value": "at its best" + } + ], + "http://www.w3.org/2000/01/rdf-schema#range": [ + { + "@id": "http://purl.org/ontology/fo/Season" + } + ], + "http://www.w3.org/2003/06/sw-vocab-status/ns#term_status": [ + { + "@value": "testing" + } + ] + }, + { + "@id": "http://purl.org/ontology/fo/shopping_category", + "@type": [ + "http://www.w3.org/2002/07/owl#ObjectProperty" + ], + "http://www.w3.org/2000/01/rdf-schema#comment": [ + { + "@language": "en-gb", + "@value": "The shopping category property relates a food to the shopping category where that food is likely to be found when shopping for it." + } + ], + "http://www.w3.org/2000/01/rdf-schema#domain": [ + { + "@id": "http://purl.org/ontology/fo/Food" + } + ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy": [ + { + "@id": "http://purl.org/ontology/fo/" + } + ], + "http://www.w3.org/2000/01/rdf-schema#label": [ + { + "@language": "en-gb", + "@value": "shopping category" + } + ], + "http://www.w3.org/2000/01/rdf-schema#range": [ + { + "@id": "http://purl.org/ontology/fo/ShoppingCategory" + } + ], + "http://www.w3.org/2003/06/sw-vocab-status/ns#term_status": [ + { + "@value": "testing" + } + ] + }, + { + "@id": "http://purl.org/ontology/fo/starter", + "@type": [ + "http://www.w3.org/2002/07/owl#ObjectProperty" + ], + "http://www.w3.org/2000/01/rdf-schema#comment": [ + { + "@language": "en-gb", + "@value": "The starter property relates a menu to a recipe that may be served as a starter." + } + ], + "http://www.w3.org/2000/01/rdf-schema#domain": [ + { + "@id": "http://purl.org/ontology/fo/Menu" + } + ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy": [ + { + "@id": "http://purl.org/ontology/fo/" + } + ], + "http://www.w3.org/2000/01/rdf-schema#label": [ + { + "@language": "en-gb", + "@value": "starter" + } + ], + "http://www.w3.org/2000/01/rdf-schema#range": [ + { + "@id": "http://purl.org/ontology/fo/Recipe" + } + ], + "http://www.w3.org/2003/06/sw-vocab-status/ns#term_status": [ + { + "@value": "testing" + } + ] + }, + { + "@id": "http://purl.org/ontology/fo/ShoppingCategory", + "@type": [ + "http://www.w3.org/2002/07/owl#Class" + ], + "http://www.w3.org/2000/01/rdf-schema#comment": [ + { + "@language": "en-gb", + "@value": "A Shopping Category is a classification given to a food to indicate where it may be found when shopping." + } + ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy": [ + { + "@id": "http://purl.org/ontology/fo/" + } + ], + "http://www.w3.org/2000/01/rdf-schema#label": [ + { + "@language": "en-gb", + "@value": "ShoppingCategory" + } + ], + "http://www.w3.org/2003/06/sw-vocab-status/ns#term_status": [ + { + "@value": "testing" + } + ] + }, + { + "@id": "http://purl.org/ontology/fo/produces", + "@type": [ + "http://www.w3.org/2002/07/owl#ObjectProperty" + ], + "http://www.w3.org/2000/01/rdf-schema#comment": [ + { + "@language": "en-gb", + "@value": "The produces property relates a recipe to the food it produces." + } + ], + "http://www.w3.org/2000/01/rdf-schema#domain": [ + { + "@id": "http://purl.org/ontology/fo/Recipe" + } + ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy": [ + { + "@id": "http://purl.org/ontology/fo/" + } + ], + "http://www.w3.org/2000/01/rdf-schema#label": [ + { + "@language": "en-gb", + "@value": "produces" + } + ], + "http://www.w3.org/2000/01/rdf-schema#range": [ + { + "@id": "http://purl.org/ontology/fo/Food" + } + ], + "http://www.w3.org/2003/06/sw-vocab-status/ns#term_status": [ + { + "@value": "testing" + } + ] + }, + { + "@id": "http://purl.org/ontology/fo/Collection", + "@type": [ + "http://www.w3.org/2002/07/owl#Class" + ], + "http://www.w3.org/2000/01/rdf-schema#comment": [ + { + "@language": "en-gb", + "@value": "A Collection is a group of recipes that are brought together because they have something in common. Some collections may result from automated queries such as all recipes that share a particular ingredient, other collections may be the result of editorial selection." + } + ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy": [ + { + "@id": "http://purl.org/ontology/fo/" + } + ], + "http://www.w3.org/2000/01/rdf-schema#label": [ + { + "@language": "en-gb", + "@value": "Collection" + } + ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf": [ + { + "@id": "http://purl.org/dc/dcmitype/Collection" + } + ], + "http://www.w3.org/2003/06/sw-vocab-status/ns#term_status": [ + { + "@value": "testing" + } + ] + }, + { + "@id": "http://purl.org/ontology/fo/#oliver", + "@type": [ + "http://xmlns.com/foaf/0.1/Person" + ], + "http://xmlns.com/foaf/0.1/name": [ + { + "@value": "Oliver Bartlett" + } + ] + }, + { + "@id": "http://purl.org/ontology/fo/dessert", + "@type": [ + "http://www.w3.org/2002/07/owl#ObjectProperty" + ], + "http://www.w3.org/2000/01/rdf-schema#comment": [ + { + "@language": "en-gb", + "@value": "The dessert property relates a menu to a recipe that may be served as a dessert." + } + ], + "http://www.w3.org/2000/01/rdf-schema#domain": [ + { + "@id": "http://purl.org/ontology/fo/Menu" + } + ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy": [ + { + "@id": "http://purl.org/ontology/fo/" + } + ], + "http://www.w3.org/2000/01/rdf-schema#label": [ + { + "@language": "en-gb", + "@value": "dessert" + } + ], + "http://www.w3.org/2000/01/rdf-schema#range": [ + { + "@id": "http://purl.org/ontology/fo/Recipe" + } + ], + "http://www.w3.org/2003/06/sw-vocab-status/ns#term_status": [ + { + "@value": "testing" + } + ] + }, + { + "@id": "http://purl.org/ontology/fo/side_dish", + "@type": [ + "http://www.w3.org/2002/07/owl#ObjectProperty" + ], + "http://www.w3.org/2000/01/rdf-schema#comment": [ + { + "@language": "en-gb", + "@value": "The side dish property relates a menu to a recipe that may be served as a side dish." + } + ], + "http://www.w3.org/2000/01/rdf-schema#domain": [ + { + "@id": "http://purl.org/ontology/fo/Menu" + } + ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy": [ + { + "@id": "http://purl.org/ontology/fo/" + } + ], + "http://www.w3.org/2000/01/rdf-schema#label": [ + { + "@language": "en-gb", + "@value": "side dish" + } + ], + "http://www.w3.org/2000/01/rdf-schema#range": [ + { + "@id": "http://purl.org/ontology/fo/Recipe" + } + ], + "http://www.w3.org/2003/06/sw-vocab-status/ns#term_status": [ + { + "@value": "testing" + } + ] + }, + { + "@id": "http://purl.org/ontology/fo/imperial_quantity", + "@type": [ + "http://www.w3.org/2002/07/owl#DatatypeProperty" + ], + "http://www.w3.org/2000/01/rdf-schema#comment": [ + { + "@language": "en-gb", + "@value": "A metric quantity provides a value and imperial unit in a human readable string for use in measuring out an ingredient." + } + ], + "http://www.w3.org/2000/01/rdf-schema#domain": [ + { + "@id": "http://purl.org/ontology/fo/Ingredient" + } + ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy": [ + { + "@id": "http://purl.org/ontology/fo/" + } + ], + "http://www.w3.org/2000/01/rdf-schema#label": [ + { + "@language": "en-gb", + "@value": "imperial quantity" + } + ], + "http://www.w3.org/2000/01/rdf-schema#range": [ + { + "@id": "http://www.w3.org/2001/XMLSchema#string" + } + ], + "http://www.w3.org/2003/06/sw-vocab-status/ns#term_status": [ + { + "@value": "testing" + } + ] + }, + { + "@id": "http://purl.org/ontology/fo/Menu", + "@type": [ + "http://www.w3.org/2002/07/owl#Class" + ], + "http://www.w3.org/2000/01/rdf-schema#comment": [ + { + "@language": "en-gb", + "@value": "A Menu is a collection of recipes, usually one or more per course, that have been selected to go well together. A Menu may also be related to a particular cuisine or occasion." + } + ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy": [ + { + "@id": "http://purl.org/ontology/fo/" + } + ], + "http://www.w3.org/2000/01/rdf-schema#label": [ + { + "@language": "en-gb", + "@value": "Menu" + } + ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf": [ + { + "@id": "http://purl.org/ontology/fo/Collection" + } + ], + "http://www.w3.org/2003/06/sw-vocab-status/ns#term_status": [ + { + "@value": "testing" + } + ] + }, + { + "@id": "http://purl.org/ontology/fo/main_course", + "@type": [ + "http://www.w3.org/2002/07/owl#ObjectProperty" + ], + "http://www.w3.org/2000/01/rdf-schema#comment": [ + { + "@language": "en-gb", + "@value": "The main course property relates a menu to a recipe that may be served as a main course." + } + ], + "http://www.w3.org/2000/01/rdf-schema#domain": [ + { + "@id": "http://purl.org/ontology/fo/Menu" + } + ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy": [ + { + "@id": "http://purl.org/ontology/fo/" + } + ], + "http://www.w3.org/2000/01/rdf-schema#label": [ + { + "@language": "en-gb", + "@value": "main course" + } + ], + "http://www.w3.org/2000/01/rdf-schema#range": [ + { + "@id": "http://purl.org/ontology/fo/Recipe" + } + ], + "http://www.w3.org/2003/06/sw-vocab-status/ns#term_status": [ + { + "@value": "testing" + } + ] + }, + { + "@id": "http://purl.org/ontology/fo/Season", + "@type": [ + "http://www.w3.org/2002/07/owl#Class" + ], + "http://www.w3.org/2000/01/rdf-schema#comment": [ + { + "@language": "en-gb", + "@value": "A Season is a period of time that recurs annually during which a food is typically available or at its best." + } + ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy": [ + { + "@id": "http://purl.org/ontology/fo/" + } + ], + "http://www.w3.org/2000/01/rdf-schema#label": [ + { + "@language": "en-gb", + "@value": "Season" + } + ], + "http://www.w3.org/2003/06/sw-vocab-status/ns#term_status": [ + { + "@value": "testing" + } + ] + }, + { + "@id": "http://purl.org/ontology/fo/Course", + "@type": [ + "http://www.w3.org/2002/07/owl#Class" + ], + "http://www.w3.org/2000/01/rdf-schema#comment": [ + { + "@language": "en-gb", + "@value": "A Course is the sequence of a dish within a meal. For example a basic dinner party may consists of Starter, Main and Dessert courses." + } + ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy": [ + { + "@id": "http://purl.org/ontology/fo/" + } + ], + "http://www.w3.org/2000/01/rdf-schema#label": [ + { + "@language": "en-gb", + "@value": "Course" + } + ], + "http://www.w3.org/2003/06/sw-vocab-status/ns#term_status": [ + { + "@value": "testing" + } + ] + }, + { + "@id": "http://purl.org/ontology/fo/Occasion", + "@type": [ + "http://www.w3.org/2002/07/owl#Class" + ], + "http://www.w3.org/2000/01/rdf-schema#comment": [ + { + "@language": "en-gb", + "@value": "An Occasion is a recognised event or type of event that a particular food may be suitable for. An exmaple of a particular occassion might be Chinese New Year, whereas a more general occassion might a birthday." + } + ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy": [ + { + "@id": "http://purl.org/ontology/fo/" + } + ], + "http://www.w3.org/2000/01/rdf-schema#label": [ + { + "@language": "en-gb", + "@value": "Occasion" + } + ], + "http://www.w3.org/2003/06/sw-vocab-status/ns#term_status": [ + { + "@value": "testing" + } + ] + }, + { + "@id": "http://purl.org/ontology/fo/Step", + "@type": [ + "http://www.w3.org/2002/07/owl#Class" + ], + "http://www.w3.org/2000/01/rdf-schema#comment": [ + { + "@language": "en-gb", + "@value": "A Step is the lowest level of instruction used in a recipe. A sequence of steps form a method." + } + ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy": [ + { + "@id": "http://purl.org/ontology/fo/" + } + ], + "http://www.w3.org/2000/01/rdf-schema#label": [ + { + "@language": "en-gb", + "@value": "Step" + } + ], + "http://www.w3.org/2003/06/sw-vocab-status/ns#term_status": [ + { + "@value": "testing" + } + ] + }, + { + "@id": "http://purl.org/ontology/fo/Diet", + "@type": [ + "http://www.w3.org/2002/07/owl#Class" + ], + "http://www.w3.org/2000/01/rdf-schema#comment": [ + { + "@language": "en-gb", + "@value": "A Diet is a way of selecting food that achieves a particular effect, such as eating in way that is pregnancy-friendly or avoiding foods that contain shellfish." + } + ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy": [ + { + "@id": "http://purl.org/ontology/fo/" + } + ], + "http://www.w3.org/2000/01/rdf-schema#label": [ + { + "@language": "en-gb", + "@value": "Diet" + } + ], + "http://www.w3.org/2003/06/sw-vocab-status/ns#term_status": [ + { + "@value": "testing" + } + ] + }, + { + "@id": "http://purl.org/ontology/fo/Ingredient", + "@type": [ + "http://www.w3.org/2002/07/owl#Class" + ], + "http://www.w3.org/2000/01/rdf-schema#comment": [ + { + "@language": "en-gb", + "@value": "An Ingredient is the combination of a quantity and a food, giving the amount of something that should be used in the recipe." + } + ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy": [ + { + "@id": "http://purl.org/ontology/fo/" + } + ], + "http://www.w3.org/2000/01/rdf-schema#label": [ + { + "@language": "en-gb", + "@value": "Ingredient" + } + ], + "http://www.w3.org/2002/07/owl#sameAs": [ + { + "@id": "http://rdf.data-vocabulary.org/#Ingredient" + } + ], + "http://www.w3.org/2003/06/sw-vocab-status/ns#term_status": [ + { + "@value": "testing" + } + ] + }, + { + "@id": "http://purl.org/ontology/fo/#rija", + "@type": [ + "http://xmlns.com/foaf/0.1/Person" + ], + "http://xmlns.com/foaf/0.1/name": [ + { + "@value": "Rija Menage" + } + ] + }, + { + "@id": "http://purl.org/ontology/fo/metric_quantity", + "@type": [ + "http://www.w3.org/2002/07/owl#DatatypeProperty" + ], + "http://www.w3.org/2000/01/rdf-schema#comment": [ + { + "@language": "en-gb", + "@value": "A metric quantity provides a value and metric unit in a human readable string for use in measuring out an ingredient." + } + ], + "http://www.w3.org/2000/01/rdf-schema#domain": [ + { + "@id": "http://purl.org/ontology/fo/Ingredient" + } + ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy": [ + { + "@id": "http://purl.org/ontology/fo/" + } + ], + "http://www.w3.org/2000/01/rdf-schema#label": [ + { + "@language": "en-gb", + "@value": "metric quantity" + } + ], + "http://www.w3.org/2000/01/rdf-schema#range": [ + { + "@id": "http://www.w3.org/2001/XMLSchema#string" + } + ], + "http://www.w3.org/2003/06/sw-vocab-status/ns#term_status": [ + { + "@value": "testing" + } + ] + }, + { + "@id": "http://purl.org/ontology/fo/#rob", + "@type": [ + "http://xmlns.com/foaf/0.1/Person" + ], + "http://xmlns.com/foaf/0.1/name": [ + { + "@value": "Rob Styles" + } + ] + }, + { + "@id": "http://purl.org/ontology/fo/#philip", + "@type": [ + "http://xmlns.com/foaf/0.1/Person" + ], + "http://xmlns.com/foaf/0.1/name": [ + { + "@value": "Philip Lamond" + } + ] + }, + { + "@id": "http://purl.org/ontology/fo/Food", + "@type": [ + "http://www.w3.org/2002/07/owl#Class" + ], + "http://www.w3.org/2000/01/rdf-schema#comment": [ + { + "@language": "en-gb", + "@value": "A Food is something that can be eaten. It may be a basic food such as salt or it may be the more complex result of another recipe, for example chicken stock. A recipe uses foods as part of ingredients and also produces foods to be eaten." + } + ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy": [ + { + "@id": "http://purl.org/ontology/fo/" + } + ], + "http://www.w3.org/2000/01/rdf-schema#label": [ + { + "@language": "en-gb", + "@value": "Food" + } + ], + "http://www.w3.org/2003/06/sw-vocab-status/ns#term_status": [ + { + "@value": "testing" + } + ] + }, + { + "@id": "http://purl.org/ontology/fo/Recipe", + "@type": [ + "http://www.w3.org/2002/07/owl#Class" + ], + "http://www.w3.org/2000/01/rdf-schema#comment": [ + { + "@language": "en-gb", + "@value": "A Recipe is a combination of ingredients and a method, created by a chef, that produces a food." + } + ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy": [ + { + "@id": "http://purl.org/ontology/fo/" + } + ], + "http://www.w3.org/2000/01/rdf-schema#label": [ + { + "@language": "en-gb", + "@value": "Recipe" + } + ], + "http://www.w3.org/2002/07/owl#sameAs": [ + { + "@id": "http://rdf.data-vocabulary.org/#Recipe" + } + ], + "http://www.w3.org/2003/06/sw-vocab-status/ns#term_status": [ + { + "@value": "testing" + } + ] + }, + { + "@id": "http://purl.org/ontology/fo/occasion", + "@type": [ + "http://www.w3.org/2002/07/owl#ObjectProperty" + ], + "http://www.w3.org/2000/01/rdf-schema#comment": [ + { + "@language": "en-gb", + "@value": "The occassion property relates a recipe to an occasion it may be appropriate for." + } + ], + "http://www.w3.org/2000/01/rdf-schema#domain": [ + { + "@id": "http://purl.org/ontology/fo/Recipe" + } + ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy": [ + { + "@id": "http://purl.org/ontology/fo/" + } + ], + "http://www.w3.org/2000/01/rdf-schema#label": [ + { + "@language": "en-gb", + "@value": "occassion" + } + ], + "http://www.w3.org/2000/01/rdf-schema#range": [ + { + "@id": "http://purl.org/ontology/fo/Occasion" + } + ], + "http://www.w3.org/2003/06/sw-vocab-status/ns#term_status": [ + { + "@value": "testing" + } + ] + }, + { + "@id": "http://purl.org/ontology/fo/", + "@type": [ + "http://www.w3.org/2002/07/owl#Ontology", + "http://www.bbc.co.uk/ontologies/provenance/Ontology" + ], + "http://purl.org/dc/elements/1.1/date": [ + { + "@value": "Date: 2014/03/18 16:30:00 " + } + ], + "http://purl.org/dc/terms/created": [ + { + "@type": "http://www.w3.org/2001/XMLSchema#date", + "@value": "2011-07-08" + } + ], + "http://purl.org/dc/terms/license": [ + { + "@id": "http://creativecommons.org/licenses/by/4.0#id" + } + ], + "http://purl.org/dc/terms/title": [ + { + "@language": "en-gb", + "@value": "Food Ontology" + } + ], + "http://www.bbc.co.uk/ontologies/provenance/canonicalLocation": [ + { + "@value": "https://repo.dev.bbc.co.uk/services/linked-data/ontologies/domain/kl/food/food-ontology-1-1.ttl" + } + ], + "http://www.bbc.co.uk/ontologies/provenance/changeReason": [ + { + "@value": "Fix a typo of occassion" + } + ], + "http://www.bbc.co.uk/ontologies/provenance/public": [ + { + "@value": true + } + ], + "http://www.bbc.co.uk/ontologies/provenance/slug": [ + { + "@value": "fo" + } + ], + "http://www.bbc.co.uk/ontologies/provenance/version": [ + { + "@value": 1.1 + } + ], + "http://www.w3.org/2000/01/rdf-schema#comment": [ + { + "@language": "en-gb", + "@value": "A simple vocabulary for describing recipes, ingredients, menus and diets." + } + ], + "http://www.w3.org/2000/01/rdf-schema#label": [ + { + "@value": "Food Ontology" + } + ], + "http://www.w3.org/2002/07/owl#imports": [ + { + "@id": "http://purl.org/dc/elements/1.1/" + }, + { + "@id": "http://www.bbc.co.uk/ontologies/provenance/" + }, + { + "@id": "http://xmlns.com/foaf/0.1/" + }, + { + "@id": "http://purl.org/dc/terms/" + }, + { + "@id": "http://www.w3.org/2003/06/sw-vocab-status/ns#" + } + ], + "http://www.w3.org/2002/07/owl#priorVersion": [ + { + "@id": "http://purl.org/ontology/fo/1.0" + } + ], + "http://www.w3.org/2002/07/owl#versionIRI": [ + { + "@id": "http://purl.org/ontology/fo/1.1" + } + ], + "http://www.w3.org/2002/07/owl#versionInfo": [ + { + "@value": "1.1" + } + ], + "http://xmlns.com/foaf/0.1/maker": [ + { + "@id": "http://purl.org/ontology/fo/#oliver" + }, + { + "@id": "http://purl.org/ontology/fo/#rija" + }, + { + "@id": "http://purl.org/ontology/fo/#andrew" + }, + { + "@id": "http://purl.org/ontology/fo/#rob" + }, + { + "@id": "http://purl.org/ontology/fo/#philip" + } + ] + }, + { + "@id": "http://purl.org/ontology/fo/food", + "@type": [ + "http://www.w3.org/2002/07/owl#ObjectProperty" + ], + "http://www.w3.org/2000/01/rdf-schema#comment": [ + { + "@language": "en-gb", + "@value": "The food property relates an ingredient to the food that is required." + } + ], + "http://www.w3.org/2000/01/rdf-schema#domain": [ + { + "@id": "http://purl.org/ontology/fo/Ingredient" + } + ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy": [ + { + "@id": "http://purl.org/ontology/fo/" + } + ], + "http://www.w3.org/2000/01/rdf-schema#label": [ + { + "@language": "en-gb", + "@value": "food" + } + ], + "http://www.w3.org/2000/01/rdf-schema#range": [ + { + "@id": "http://purl.org/ontology/fo/Food" + } + ], + "http://www.w3.org/2003/06/sw-vocab-status/ns#term_status": [ + { + "@value": "testing" + } + ] + }, + { + "@id": "http://purl.org/ontology/fo/instruction", + "@type": [ + "http://www.w3.org/2002/07/owl#DatatypeProperty" + ], + "http://www.w3.org/2000/01/rdf-schema#comment": [ + { + "@language": "en-gb", + "@value": "An instruction provides the human-readable text associated with a step in the method for a recipe." + } + ], + "http://www.w3.org/2000/01/rdf-schema#domain": [ + { + "@id": "http://purl.org/ontology/fo/Step" + } + ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy": [ + { + "@id": "http://purl.org/ontology/fo/" + } + ], + "http://www.w3.org/2000/01/rdf-schema#label": [ + { + "@language": "en-gb", + "@value": "instruction" + } + ], + "http://www.w3.org/2000/01/rdf-schema#range": [ + { + "@id": "http://www.w3.org/2001/XMLSchema#string" + } + ], + "http://www.w3.org/2003/06/sw-vocab-status/ns#term_status": [ + { + "@value": "testing" + } + ] + }, + { + "@id": "http://purl.org/ontology/fo/diet", + "@type": [ + "http://www.w3.org/2002/07/owl#ObjectProperty" + ], + "http://www.w3.org/2000/01/rdf-schema#comment": [ + { + "@language": "en-gb", + "@value": "The diet property relates a recipe to a diet it may be suitable for." + } + ], + "http://www.w3.org/2000/01/rdf-schema#domain": [ + { + "@id": "http://purl.org/ontology/fo/Recipe" + } + ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy": [ + { + "@id": "http://purl.org/ontology/fo/" + } + ], + "http://www.w3.org/2000/01/rdf-schema#label": [ + { + "@language": "en-gb", + "@value": "diet" + } + ], + "http://www.w3.org/2000/01/rdf-schema#range": [ + { + "@id": "http://purl.org/ontology/fo/Diet" + } + ], + "http://www.w3.org/2003/06/sw-vocab-status/ns#term_status": [ + { + "@value": "testing" + } + ] + }, + { + "@id": "http://purl.org/ontology/fo/Technique", + "@type": [ + "http://www.w3.org/2002/07/owl#Class" + ], + "http://www.w3.org/2000/01/rdf-schema#comment": [ + { + "@language": "en-gb", + "@value": "A Technique is a way of working with an ingredient to produce a desired effect, for example, whipping cream." + } + ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy": [ + { + "@id": "http://purl.org/ontology/fo/" + } + ], + "http://www.w3.org/2000/01/rdf-schema#label": [ + { + "@language": "en-gb", + "@value": "Technique" + } + ], + "http://www.w3.org/2003/06/sw-vocab-status/ns#term_status": [ + { + "@value": "testing" + } + ] + }, + { + "@id": "http://purl.org/ontology/fo/serve_as", + "@type": [ + "http://www.w3.org/2002/07/owl#ObjectProperty" + ], + "http://www.w3.org/2000/01/rdf-schema#comment": [ + { + "@language": "en-gb", + "@value": "The serve as property relates a recipe to the course in a meal that it may be served as." + } + ], + "http://www.w3.org/2000/01/rdf-schema#domain": [ + { + "@id": "http://purl.org/ontology/fo/Recipe" + } + ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy": [ + { + "@id": "http://purl.org/ontology/fo/" + } + ], + "http://www.w3.org/2000/01/rdf-schema#label": [ + { + "@language": "en-gb", + "@value": "serve as" + } + ], + "http://www.w3.org/2000/01/rdf-schema#range": [ + { + "@id": "http://purl.org/ontology/fo/Course" + } + ], + "http://www.w3.org/2003/06/sw-vocab-status/ns#term_status": [ + { + "@value": "testing" + } + ] + }, + { + "@id": "http://purl.org/ontology/fo/canape", + "@type": [ + "http://www.w3.org/2002/07/owl#ObjectProperty" + ], + "http://www.w3.org/2000/01/rdf-schema#comment": [ + { + "@language": "en-gb", + "@value": "The canape property relates a menu to a recipe that may be served as a canape." + } + ], + "http://www.w3.org/2000/01/rdf-schema#domain": [ + { + "@id": "http://purl.org/ontology/fo/Menu" + } + ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy": [ + { + "@id": "http://purl.org/ontology/fo/" + } + ], + "http://www.w3.org/2000/01/rdf-schema#label": [ + { + "@language": "en-gb", + "@value": "canape" + } + ], + "http://www.w3.org/2000/01/rdf-schema#range": [ + { + "@id": "http://purl.org/ontology/fo/Recipe" + } + ], + "http://www.w3.org/2003/06/sw-vocab-status/ns#term_status": [ + { + "@value": "testing" + } + ] + }, + { + "@id": "http://purl.org/ontology/fo/Cuisine", + "@type": [ + "http://www.w3.org/2002/07/owl#Class" + ], + "http://www.w3.org/2000/01/rdf-schema#comment": [ + { + "@language": "en-gb", + "@value": "A Cuisine is a particular style of food, often based on a region. These classifications are often highly subjective." + } + ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy": [ + { + "@id": "http://purl.org/ontology/fo/" + } + ], + "http://www.w3.org/2000/01/rdf-schema#label": [ + { + "@language": "en-gb", + "@value": "Cuisine" + } + ], + "http://www.w3.org/2003/06/sw-vocab-status/ns#term_status": [ + { + "@value": "testing" + } + ] + }, + { + "@id": "http://purl.org/ontology/fo/IngredientList", + "@type": [ + "http://www.w3.org/2002/07/owl#Class" + ], + "http://www.w3.org/2000/01/rdf-schema#comment": [ + { + "@language": "en-gb", + "@value": "An IngredientList is a sequence (rdf:Seq) of ingredients in the order they should be listed in the recipe." + } + ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy": [ + { + "@id": "http://purl.org/ontology/fo/" + } + ], + "http://www.w3.org/2000/01/rdf-schema#label": [ + { + "@language": "en-gb", + "@value": "IngredientList" + } + ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf": [ + { + "@id": "http://www.w3.org/1999/02/22-rdf-syntax-ns#Seq" + } + ], + "http://www.w3.org/2003/06/sw-vocab-status/ns#term_status": [ + { + "@value": "testing" + } + ] + }, + { + "@id": "http://purl.org/ontology/fo/method", + "@type": [ + "http://www.w3.org/2002/07/owl#ObjectProperty" + ], + "http://www.w3.org/2000/01/rdf-schema#comment": [ + { + "@language": "en-gb", + "@value": "The method property relates a recipe or stage to the method used to make it." + } + ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy": [ + { + "@id": "http://purl.org/ontology/fo/" + } + ], + "http://www.w3.org/2000/01/rdf-schema#label": [ + { + "@language": "en-gb", + "@value": "method" + } + ], + "http://www.w3.org/2000/01/rdf-schema#range": [ + { + "@id": "http://purl.org/ontology/fo/Method" + } + ], + "http://www.w3.org/2003/06/sw-vocab-status/ns#term_status": [ + { + "@value": "testing" + } + ] + }, + { + "@id": "http://purl.org/ontology/fo/#andrew", + "@type": [ + "http://xmlns.com/foaf/0.1/Person" + ], + "http://xmlns.com/foaf/0.1/name": [ + { + "@value": "Andrew Robinson" + } + ] + }, + { + "@id": "http://purl.org/ontology/fo/StageSequence", + "@type": [ + "http://www.w3.org/2002/07/owl#Class" + ], + "http://www.w3.org/2000/01/rdf-schema#comment": [ + { + "@language": "en-gb", + "@value": "Where a recipe has a number of stage, for example where a recipe states 'for the sauce' a stage sequence provides a way to sequence the stages (rdf:Seq) into the desired order." + } + ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy": [ + { + "@id": "http://purl.org/ontology/fo/" + } + ], + "http://www.w3.org/2000/01/rdf-schema#label": [ + { + "@language": "en-gb", + "@value": "StageSequence" + } + ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf": [ + { + "@id": "http://www.w3.org/1999/02/22-rdf-syntax-ns#Seq" + } + ], + "http://www.w3.org/2003/06/sw-vocab-status/ns#term_status": [ + { + "@value": "testing" + } + ] + }, + { + "@id": "http://purl.org/ontology/fo/quantity", + "@type": [ + "http://www.w3.org/2002/07/owl#DatatypeProperty" + ], + "http://www.w3.org/2000/01/rdf-schema#comment": [ + { + "@language": "en-gb", + "@value": "A quantity provides a non-negative integer quantity that can be used as a measure of the food stuff for the ingredient." + } + ], + "http://www.w3.org/2000/01/rdf-schema#domain": [ + { + "@id": "http://purl.org/ontology/fo/Ingredient" + } + ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy": [ + { + "@id": "http://purl.org/ontology/fo/" + } + ], + "http://www.w3.org/2000/01/rdf-schema#label": [ + { + "@language": "en-gb", + "@value": "quantity" + } + ], + "http://www.w3.org/2000/01/rdf-schema#range": [ + { + "@id": "http://www.w3.org/2001/XMLSchema#nonNegativeInteger" + } + ], + "http://www.w3.org/2003/06/sw-vocab-status/ns#term_status": [ + { + "@value": "testing" + } + ] + }, + { + "@id": "http://purl.org/ontology/fo/Stage", + "@type": [ + "http://www.w3.org/2002/07/owl#Class" + ], + "http://www.w3.org/2000/01/rdf-schema#comment": [ + { + "@language": "en-gb", + "@value": "A Stage is a part of a recipe that may have its own ingredient list and/or method. It allows the different parts of a multi-part recipe to be modelled seperately, yet as part of the same recipe." + } + ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy": [ + { + "@id": "http://purl.org/ontology/fo/" + } + ], + "http://www.w3.org/2000/01/rdf-schema#label": [ + { + "@language": "en-gb", + "@value": "Stage" + } + ], + "http://www.w3.org/2003/06/sw-vocab-status/ns#term_status": [ + { + "@value": "testing" + } + ] + } +] diff --git a/bbc.ttl b/bbc.ttl new file mode 100644 index 0000000000000000000000000000000000000000..2e7e65fcd8e91b94c0c68fb8a5a6a47a7a1908bd --- /dev/null +++ b/bbc.ttl @@ -0,0 +1,353 @@ +@base <http://purl.org/ontology/fo/> . + +@prefix dcmit: <http://purl.org/dc/dcmitype/> . +@prefix dcterms: <http://purl.org/dc/terms/> . +@prefix dctypes: <http://purl.org/dc/dcmitype/> . +@prefix fo: <http://purl.org/ontology/fo/> . +@prefix foaf: <http://xmlns.com/foaf/0.1/> . +@prefix owl: <http://www.w3.org/2002/07/owl#> . +@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . +@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . +@prefix skos: <http://www.w3.org/2004/02/skos/core#> . +@prefix v: <http://rdf.data-vocabulary.org/#> . +@prefix vs: <http://www.w3.org/2003/06/sw-vocab-status/ns#> . +@prefix xsd: <http://www.w3.org/2001/XMLSchema#> . +@prefix dc: <http://purl.org/dc/elements/1.1/> . +@prefix provenance: <http://www.bbc.co.uk/ontologies/provenance/> . + +############################################################################ +# General description of the schema +############################################################################ + +fo: + a owl:Ontology , provenance:Ontology ; + dcterms:title "Food Ontology"@en-gb ; + rdfs:label "Food Ontology"^^xsd:string ; + rdfs:comment "A simple vocabulary for describing recipes, ingredients, menus and diets."@en-gb ; + foaf:maker <#rija>, <#oliver>, <#philip>, <#andrew>, <#rob> ; + dcterms:created "2011-07-08"^^xsd:date ; + dcterms:license <http://creativecommons.org/licenses/by/4.0#id> ; + provenance:canonicalLocation + "https://repo.dev.bbc.co.uk/services/linked-data/ontologies/domain/kl/food/food-ontology-1-1.ttl"^^xsd:string ; + provenance:changeReason + "Fix a typo of occassion"^^xsd:string ; + dc:date "Date: 2014/03/18 16:30:00 " ; + provenance:slug "fo"^^xsd:string ; + provenance:version "1.1"^^xsd:double ; + provenance:public "true"^^xsd:boolean ; + owl:imports vs: , dc: , dcterms: , foaf: , provenance: ; + owl:priorVersion <http://purl.org/ontology/fo/1.0> ; + owl:versionIRI <http://purl.org/ontology/fo/1.1> ; + owl:versionInfo "1.1"^^xsd:string . + + +<#rija> a foaf:Person ; + foaf:name "Rija Menage" . + +<#oliver> a foaf:Person ; + foaf:name "Oliver Bartlett" . + +<#philip> a foaf:Person ; + foaf:name "Philip Lamond" . + +<#andrew> a foaf:Person ; + foaf:name "Andrew Robinson" . + +<#rob> a foaf:Person ; + foaf:name "Rob Styles" . + +############################################################################ +# Classes +############################################################################ + +fo:Recipe a owl:Class ; + owl:sameAs v:Recipe ; + rdfs:label "Recipe"@en-gb ; + rdfs:comment "A Recipe is a combination of ingredients and a method, created by a chef, that produces a food."@en-gb ; + vs:term_status "testing" ; + rdfs:isDefinedBy fo: . + +fo:Method a owl:Class ; + rdfs:subClassOf rdf:Seq ; + rdfs:label "Method"@en-gb ; + rdfs:comment "A Method is the way in which ingredients are combined, using particular techniques, in order to produce a food. A method is part of a recipe and is also an rdf:Seq."@en-gb ; + vs:term_status "testing" ; + rdfs:isDefinedBy fo: . + +fo:Step a owl:Class ; + rdfs:label "Step"@en-gb ; + rdfs:comment "A Step is the lowest level of instruction used in a recipe. A sequence of steps form a method."@en-gb ; + vs:term_status "testing" ; + rdfs:isDefinedBy fo: . + +fo:StageSequence a owl:Class ; + rdfs:subClassOf rdf:Seq ; + rdfs:label "StageSequence"@en-gb ; + rdfs:comment "Where a recipe has a number of stage, for example where a recipe states 'for the sauce' a stage sequence provides a way to sequence the stages (rdf:Seq) into the desired order."@en-gb ; + vs:term_status "testing" ; + rdfs:isDefinedBy fo: . + +fo:Stage a owl:Class ; + rdfs:label "Stage"@en-gb ; + rdfs:comment "A Stage is a part of a recipe that may have its own ingredient list and/or method. It allows the different parts of a multi-part recipe to be modelled seperately, yet as part of the same recipe."@en-gb ; + vs:term_status "testing" ; + rdfs:isDefinedBy fo: . + +fo:IngredientList a owl:Class ; + rdfs:subClassOf rdf:Seq ; + rdfs:label "IngredientList"@en-gb ; + rdfs:comment "An IngredientList is a sequence (rdf:Seq) of ingredients in the order they should be listed in the recipe."@en-gb ; + vs:term_status "testing" ; + rdfs:isDefinedBy fo: . + +fo:Ingredient a owl:Class ; + owl:sameAs v:Ingredient ; + rdfs:label "Ingredient"@en-gb ; + rdfs:comment "An Ingredient is the combination of a quantity and a food, giving the amount of something that should be used in the recipe."@en-gb ; + vs:term_status "testing" ; + rdfs:isDefinedBy fo: . + +fo:Food a owl:Class ; + rdfs:label "Food"@en-gb ; + rdfs:comment "A Food is something that can be eaten. It may be a basic food such as salt or it may be the more complex result of another recipe, for example chicken stock. A recipe uses foods as part of ingredients and also produces foods to be eaten."@en-gb ; + vs:term_status "testing" ; + rdfs:isDefinedBy fo: . + +fo:Collection a owl:Class ; + rdfs:subClassOf dcmit:Collection ; + rdfs:label "Collection"@en-gb ; + rdfs:comment "A Collection is a group of recipes that are brought together because they have something in common. Some collections may result from automated queries such as all recipes that share a particular ingredient, other collections may be the result of editorial selection."@en-gb ; + vs:term_status "testing" ; + rdfs:isDefinedBy fo: . + +fo:Diet a owl:Class ; + rdfs:label "Diet"@en-gb ; + rdfs:comment "A Diet is a way of selecting food that achieves a particular effect, such as eating in way that is pregnancy-friendly or avoiding foods that contain shellfish."@en-gb ; + vs:term_status "testing" ; + rdfs:isDefinedBy fo: . + +fo:Menu a owl:Class ; + rdfs:subClassOf fo:Collection ; + rdfs:label "Menu"@en-gb ; + rdfs:comment "A Menu is a collection of recipes, usually one or more per course, that have been selected to go well together. A Menu may also be related to a particular cuisine or occasion."@en-gb ; + vs:term_status "testing" ; + rdfs:isDefinedBy fo: . + +fo:ShoppingCategory a owl:Class ; + rdfs:label "ShoppingCategory"@en-gb ; + rdfs:comment "A Shopping Category is a classification given to a food to indicate where it may be found when shopping."@en-gb ; + vs:term_status "testing" ; + rdfs:isDefinedBy fo: . + +fo:Technique a owl:Class ; + rdfs:label "Technique"@en-gb ; + rdfs:comment "A Technique is a way of working with an ingredient to produce a desired effect, for example, whipping cream."@en-gb ; + vs:term_status "testing" ; + rdfs:isDefinedBy fo: . + +fo:Cuisine a owl:Class ; + rdfs:label "Cuisine"@en-gb ; + rdfs:comment "A Cuisine is a particular style of food, often based on a region. These classifications are often highly subjective."@en-gb ; + vs:term_status "testing" ; + rdfs:isDefinedBy fo: . + +fo:Course a owl:Class ; + rdfs:label "Course"@en-gb ; + rdfs:comment "A Course is the sequence of a dish within a meal. For example a basic dinner party may consists of Starter, Main and Dessert courses."@en-gb ; + vs:term_status "testing" ; + rdfs:isDefinedBy fo: . + +fo:Occasion a owl:Class ; + rdfs:label "Occasion"@en-gb ; + rdfs:comment "An Occasion is a recognised event or type of event that a particular food may be suitable for. An exmaple of a particular occassion might be Chinese New Year, whereas a more general occassion might a birthday."@en-gb ; + vs:term_status "testing" ; + rdfs:isDefinedBy fo: . + +fo:Season a owl:Class ; + rdfs:label "Season"@en-gb ; + rdfs:comment "A Season is a period of time that recurs annually during which a food is typically available or at its best."@en-gb ; + vs:term_status "testing" ; + rdfs:isDefinedBy fo: . + +############################################################################ +# Object Properties +############################################################################ + +fo:ingredients a owl:ObjectProperty ; + rdfs:label "ingredients"@en-gb ; + rdfs:comment "The ingredients property relates a recipe or recipe stage to an ingredient list."@en-gb ; + rdfs:range fo:IngredientList ; + vs:term_status "testing" ; + rdfs:isDefinedBy fo: . + +fo:food a owl:ObjectProperty ; + rdfs:label "food"@en-gb ; + rdfs:comment "The food property relates an ingredient to the food that is required."@en-gb ; + rdfs:range fo:Food ; + rdfs:domain fo:Ingredient ; + vs:term_status "testing" ; + rdfs:isDefinedBy fo: . + +fo:shopping_category a owl:ObjectProperty ; + rdfs:label "shopping category"@en-gb ; + rdfs:comment "The shopping category property relates a food to the shopping category where that food is likely to be found when shopping for it."@en-gb ; + rdfs:range fo:ShoppingCategory ; + rdfs:domain fo:Food ; + vs:term_status "testing" ; + rdfs:isDefinedBy fo: . + +fo:method a owl:ObjectProperty ; + rdfs:label "method"@en-gb ; + rdfs:comment "The method property relates a recipe or stage to the method used to make it."@en-gb ; + rdfs:range fo:Method ; + vs:term_status "testing" ; + rdfs:isDefinedBy fo: . + +fo:produces a owl:ObjectProperty ; + rdfs:label "produces"@en-gb ; + rdfs:comment "The produces property relates a recipe to the food it produces."@en-gb ; + rdfs:range fo:Food ; + rdfs:domain fo:Recipe ; + vs:term_status "testing" ; + rdfs:isDefinedBy fo: . + +fo:stages a owl:ObjectProperty ; + rdfs:label "stages"@en-gb ; + rdfs:comment "The stages property relates a recipe to the sequence of stages it contains."@en-gb ; + rdfs:range fo:StageSequence ; + rdfs:domain fo:Recipe ; + vs:term_status "testing" ; + rdfs:isDefinedBy fo: . + +fo:canape a owl:ObjectProperty ; + rdfs:label "canape"@en-gb ; + rdfs:comment "The canape property relates a menu to a recipe that may be served as a canape."@en-gb ; + rdfs:range fo:Recipe ; + rdfs:domain fo:Menu ; + vs:term_status "testing" ; + rdfs:isDefinedBy fo: . + +fo:starter a owl:ObjectProperty ; + rdfs:label "starter"@en-gb ; + rdfs:comment "The starter property relates a menu to a recipe that may be served as a starter."@en-gb ; + rdfs:range fo:Recipe ; + rdfs:domain fo:Menu ; + vs:term_status "testing" ; + rdfs:isDefinedBy fo: . + +fo:main_course a owl:ObjectProperty ; + rdfs:label "main course"@en-gb ; + rdfs:comment "The main course property relates a menu to a recipe that may be served as a main course."@en-gb ; + rdfs:range fo:Recipe ; + rdfs:domain fo:Menu ; + vs:term_status "testing" ; + rdfs:isDefinedBy fo: . + +fo:side_dish a owl:ObjectProperty ; + rdfs:label "side dish"@en-gb ; + rdfs:comment "The side dish property relates a menu to a recipe that may be served as a side dish."@en-gb ; + rdfs:range fo:Recipe ; + rdfs:domain fo:Menu ; + vs:term_status "testing" ; + rdfs:isDefinedBy fo: . + +fo:dessert a owl:ObjectProperty ; + rdfs:label "dessert"@en-gb ; + rdfs:comment "The dessert property relates a menu to a recipe that may be served as a dessert."@en-gb ; + rdfs:range fo:Recipe ; + rdfs:domain fo:Menu ; + vs:term_status "testing" ; + rdfs:isDefinedBy fo: . + +fo:diet a owl:ObjectProperty ; + rdfs:label "diet"@en-gb ; + rdfs:comment "The diet property relates a recipe to a diet it may be suitable for."@en-gb ; + rdfs:range fo:Diet ; + rdfs:domain fo:Recipe ; + vs:term_status "testing" ; + rdfs:isDefinedBy fo: . + +fo:cuisine a owl:ObjectProperty ; + rdfs:label "cuisine"@en-gb ; + rdfs:comment "The cuisine property classifies a recipe as being an example of that cuisine."@en-gb ; + rdfs:range fo:Cuisine ; + rdfs:domain fo:Recipe ; + vs:term_status "testing" ; + rdfs:isDefinedBy fo: . + +fo:occasion a owl:ObjectProperty ; + rdfs:label "occassion"@en-gb ; + rdfs:comment "The occassion property relates a recipe to an occasion it may be appropriate for."@en-gb ; + rdfs:range fo:Occasion ; + rdfs:domain fo:Recipe ; + vs:term_status "testing" ; + rdfs:isDefinedBy fo: . + +fo:required_technique a owl:ObjectProperty ; + rdfs:label "required technique"@en-gb ; + rdfs:comment "The required technique property indicates that a particular technique is required in order to complete a recipe, method or step."@en-gb ; + rdfs:range fo:Technique ; + vs:term_status "testing" ; + rdfs:isDefinedBy fo: . + +fo:serve_as a owl:ObjectProperty ; + rdfs:label "serve as"@en-gb ; + rdfs:comment "The serve as property relates a recipe to the course in a meal that it may be served as."@en-gb ; + rdfs:range fo:Course ; + rdfs:domain fo:Recipe ; + vs:term_status "testing" ; + rdfs:isDefinedBy fo: . + +fo:at_its_best a owl:ObjectProperty ; + rdfs:label "at its best"@en-gb ; + rdfs:comment "The at its best property tells us in what season a particular food is at its best."@en-gb ; + rdfs:range fo:Season ; + rdfs:domain fo:Food ; + vs:term_status "testing" ; + rdfs:isDefinedBy fo: . + +############################################################################ +# Datatype Properties +############################################################################ + +fo:serves a owl:DatatypeProperty ; + rdfs:label "serves"@en-gb ; + rdfs:comment "The server property indicates what the recipe is intended to serve, this is often a human readable integer range such as '6-8'."@en-gb ; + rdfs:range xsd:string ; + rdfs:domain fo:Recipe ; + vs:term_status "testing" ; + rdfs:isDefinedBy fo: . + +fo:quantity a owl:DatatypeProperty ; + rdfs:label "quantity"@en-gb ; + rdfs:comment "A quantity provides a non-negative integer quantity that can be used as a measure of the food stuff for the ingredient."@en-gb ; + rdfs:range xsd:nonNegativeInteger ; + rdfs:domain fo:Ingredient ; + vs:term_status "testing" ; + rdfs:isDefinedBy fo: . + +fo:metric_quantity a owl:DatatypeProperty ; + rdfs:label "metric quantity"@en-gb ; + rdfs:comment "A metric quantity provides a value and metric unit in a human readable string for use in measuring out an ingredient."@en-gb ; + rdfs:range xsd:string ; + rdfs:domain fo:Ingredient ; + vs:term_status "testing" ; + rdfs:isDefinedBy fo: . + +fo:imperial_quantity a owl:DatatypeProperty ; + rdfs:label "imperial quantity"@en-gb ; + rdfs:comment "A metric quantity provides a value and imperial unit in a human readable string for use in measuring out an ingredient."@en-gb ; + rdfs:range xsd:string ; + rdfs:domain fo:Ingredient ; + vs:term_status "testing" ; + rdfs:isDefinedBy fo: . + +fo:instruction a owl:DatatypeProperty ; + rdfs:label "instruction"@en-gb ; + rdfs:comment "An instruction provides the human-readable text associated with a step in the method for a recipe."@en-gb ; + rdfs:range xsd:string ; + rdfs:domain fo:Step ; + vs:term_status "testing" ; + rdfs:isDefinedBy fo: . + + diff --git a/create_ontology.py b/create_ontology.py index b73ca37499050fb464936029bc8019473ac386e9..c703b6dadab3a522468af3c8e0d87c22b7b3cd1f 100755 --- a/create_ontology.py +++ b/create_ontology.py @@ -1,8 +1,63 @@ from rdflib import Graph, plugin from rdflib.serializer import Serializer +import json, rdflib_jsonld + +# The context is to define shorthands for things so that for example +# name refers to https://schema.org/name +context = """ +{ + "name": "file:///schema.org/name", + "image": { + "@id": "http://schema.org/image", + "@type": "id" + } +} +""" + +other = """ + "name": "http://rdf.data-vocabulary.org/#name", + "author": "https://rdf.data-vocabulary.org/#author", + "collection": "http://rdf.data-vocabulary.org/#collection", + "menu": "http://rdf.data-vocabulary.org/#menu", + "ingredientList": "http://rdf.data-vocabulary.org/#ingredientList", + "ingredient": "http://rdf.data-vocabulary.org/#ingredients", + "yield": "http://rdf.data-vocabulary.org/#yield", + "instructions": "http://rdf.data-vocabulary.org/#instructions", + "stageSequence": "http://rdf.data-vocabulary.org/#stageSequence", + "sequence": { + "@id": "http://rdf.data-vocabulary.org/#sequence", + "@type": "xsd:integer" + }, + "unit": "http://rdf.data-vocabulary.org/#unit", + "xsd": "http://www.w3.org/2001/XMLSchema#" +} +""" + +recipe = """ +{ + "@context": "http://schema.org/", + "@type": "Person", + "name": "Mojito" +} +""" + +other = """ + "author": "", + "ingredientList": [ + "1/2 cup fresh mint leaves"], + "instructions": [ + "Crush blah blah", + "Step 2"] +} +""" + +g = Graph().parse(data=recipe, format='json-ld') + +jsonld = g.serialize(format='xml', destination="ontology.xml", indent=4) bbc = """ @prefix dc: <http://purl.org/dc/elements/1.1/> . + <> dc:title "Ontology" . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @@ -11,59 +66,11 @@ bbc = """ @prefix : <#> . -:Ingredient a rdfs:Class. -:Collection a rdfs:Class. -:Menu a rdfs:Class; rdfs:subClassOf :Collection. -:Recipe a rdfs:Class. -:Food a rdfs:Class. -:StageSequence a rdfs:Class. - :hasAllergens a rdfs:Property. +:hasName a rdfs:Property. +:hasWebsite a rdfs:Property. +:hasAuthor a rdfs:Property. +:hasRating a rdfs:Property. +:hasDifficulty a rdfs:Property. +:hasIngredient a rdfs:Property. """ - - -# - Collection -# - Menu -# - Recipe -# - Food -# - StageSequence -# - Seq -# - IngredientList -# - Ingredient -# - Amount -# - Unit -# - Name -# - Type -# - Vegetable -# - Method -# - Step -# - Action -# - Verb -# - Ingredient etc -# -# -# - Menu subClassOf Collection -# - Menu canape Recipe etc -# - Recipe produces Food -# - Recipe stages StageSequence -# - hasName -# - hasURLSource -# - hasAuthor -# - hasWebsite -# - hasRating -# - hasDifficulty -# - hasNoIngredients -# - number of ingredients -# - hasIngredientsList -# - isVegetable -# - Or has type vegetable / fruit whatever -# - isAllergen -# - hasAllergens -# - hasRelatedRecipes -# - -g = Graph().parse(data=bbc, format='n3') - -context = {"@vocab": "http://purl.org/dc/terms/", "@language": "en"} - -print(g.serialize(format='json-ld', context=context, indent=4).decode()) diff --git a/grammar.lark b/grammar.lark index 2cb1479ba37dd95ad7c5f742b07ded4a1ae0e434..7a3736642703261201e84bce1c4bb5e372df0a20 100644 --- a/grammar.lark +++ b/grammar.lark @@ -8,7 +8,7 @@ ambiguator: AMBIGUATOR AMBIGUATOR: ("<" | ">" | "less than" | "more than") fraction: FRACTION -FRACTION: NUMBER "/" NUMBER +FRACTION: ((NUMBER "/" NUMBER) | (NUMBER? " " "½")) // amount: quantity of an ingredient // eg: 10 - 20 g of pasta @@ -19,49 +19,55 @@ AMBIGUOUS: ("a few drops" | "some" | "a pinch") // UNIT: unit of measure // recognises synonyms or shorthand // eg: "cup", "grams", "pinch". shorthand: "g", "gr" -unit: (weight | volume | temperature | time | distance | ambiguous | oven)+ +// unit: (weight | volume | temperature | time | distance | ambiguous | oven)+ +unit: (weight | volume | distance | temperature | time | ambiguous | oven)+ weight: (gram | miligram | kilogram | ounce | pound) gram: ("gram" | "grams" | "g" | "gr" | "gramme" | "grammes") miligram: ("miligram" | "miligrams" | "mg" | "miligramme" | "miligrammes") kilogram: ("kg" | "kilo" | "kilos" | "kiloes" | "kilogramme" | "kilogrammes") ounce: ("ounce" | "ounces" | "oz") -pound: ("pound" | "pounds" | "lb" | "#") -volume: (tablespoon | teaspoon | cup | pint | quart | gallon | litre | fluidounce) +pound: ("pound" | "pounds" | "lb" | "\#") +volume: (tablespoon | teaspoon | cup | pint | quart | gallon | litre | mililitre | fluidounce) tablespoon: ("tablespoon" | "tablespoons" | "tbsp" | "tbsps" | "t" | "tbs" | "tbl") teaspoon: ("teaspoon" | "teaspoons" | "tsp") -fluidounce: ("fluid ounce" | "fluid ounces" | "fl oz") +cup: ("cup" | "c" | "cups") pint: ("pint" | "pints" | "p" | "pt" | "pts" | "fl pt" | "fl pts") quart: ("quart" | "quarts" | "q" | "qt" | "qts" | "fl qt" | "fl qts") gallon: ("gallon" | "gallons" | "g" | "gal" | "gals") litre: ("litre" | "litres" | "l") -mililitre: "(mililitre" | "mililitres" | "mililiter" | "mililiters" | "ml") -cup: ("cup" | "c" | "cups") +fluidounce: ("fluid ounce" | "fluid ounces" | "fl oz") +mililitre: ("mililitre" | "mililitres" | "mililiter" | "mililiters" | "ml") distance: (milimeter | centimeter | inch | meter) milimeter: ("milimeter" | "milimeters" | "milimetre" | "milimetres" | "mm") centimeter: ("centimeter" | "centimeters" | "centimetre" | "centimetres" | "cm") -inch: ("inch" | """ | "in") +inch: ("inch" | "\"" | "in") meter: ("meter" | "meters" | "metre" | "metres" | "m") temperature: (fahrenheit | celsius) fahrenheit: ("fahrenheit" | "fa" | "f" | "fahr") celsius: ("celsius" | "cel" | "c") -time: (seconds: minutes | hours) +time: (seconds | minutes | hours) seconds: ("seconds" | "s" | "secs" | "sec" | "second") minutes: ("minutes" | "m" | "mins" | "min" | "minute") -hours: ("hours" | "hour | "h") -ambiguous: ("slice" | "half" | "entire" | "some" | "few" | "a few" | "several" | "splash" | "pinch" | "drops") +hours: ("hours" | "hour" | "h") +// ambiguous: might be better as part of AMOUNT: +ambiguous: ("slice" | "half" | "entire" | "some" | "few" | "a few" | "several" | "splash" | "pinch" | "drops" | "link" | "links") +oven: fan fan: "fan/gas" NUMBER -// ingredient: -// ingredient: [modifier*] amount unit [preposition] INGREDIENT [conjunction + INGREDIENT] [modifier ","]* -ingredient: modifier* amount* INGREDIENT [conjunction + INGREDIENT] [aside] -INGREDIENT: ("almond" | "soy milk" | "cider vinegar" | "vegan butter" | "vegan food colourings" | "sunflower spread" | "caster sugar" | "vanilla extract" | "self-raising flour" | "self raising flour" | "baking powder" | "icing sugar" | "milk" | "vinegar") -// INGREDIENT: ("acidulated water" | "ackee" | "acorn squash" | "advocaat" | "agar-agar" | "ajwain" | "ale" | "aleppo pepper" | "alfalfa sprouts" | "allspice" | "almond" | "almond essence" | "almond extract" | "almond milk" | "amaranth" | "amaretti" | "amchoor" | "anchovies" | "anchovy essence" | "angelica" | "angostura bitters" | "anise" | "apple" | "apple chutney" | "apple juice" | "apple sauce" | "apricot" | "apricot jam" | "aquafaba" | "arborio rice" | "arbroath smokie" | "argan oil" | "arrowroot" | "artichoke" | "asafoetida" | "asparagus" | "aubergine" | "avocado" | "bacon" | "baguette" | "baked beans" | "baking" | "baking powder" | "balsamic vinegar" | "bamboo shoots" | "banana" | "barbecue sauce" | "barley" | "basil" | "basmati rice" | "bay leaf" | "beans" | "beansprouts" | "b\u00e9chamel sauce" | "beef" | "beef consomm\u00e9" | "beef dripping" | "beef mince" | "beef ribs" | "beef rump" | "beef sausage" | "beef stock" | "beef tomato" | "beer" | "beetroot" | "berry" | "best end of lamb" | "beurre mani\u00e9" | "bicarbonate of soda" | "bird's-eye chillies" | "biscotti" | "biscuits" | "blachan" | "black bean" | "black bean sauce" | "black cardamom" | "black eyed beans" | "black pepper" | "black pudding" | "black sesame seeds" | "blackberry" | "blackcurrant" | "blackcurrant juice drink" | "blini" | "blood orange" | "blueberry" | "boar" | "bok choi" | "bone marrow" | "bonito" | "borage" | "borlotti beans" | "bouquet garni" | "braising steak" | "bramley apple" | "bran" | "brandy" | "brandy butter" | "brandy snaps" | "bratwurst" | "brazil nut" | "bread" | "bread roll" | "bread sauce" | "breadcrumbs" | "breadfruit" | "bresaola" | "brie" | "brill" | "brioche" | "brisket" | "broad beans" | "broccoli" | "brown bread" | "brown lentil" | "brown rice" | "brown sauce" | "brown shrimp" | "brown sugar" | "brussels sprouts" | "buckwheat" | "buckwheat flour" | "bulgur wheat" | "buns" | "burger" | "butter" | "butter beans" | "buttercream icing" | "butterhead lettuce" | "buttermilk" | "butternut squash" | "cabbage" | "caerphilly" | "cake" | "calasparra rice" | "calvados" | "camembert" | "candied peel" | "cannellini beans" | "cape gooseberries" | "capers" | "capsicum" | "caramel" | "caraway seeds" | "cardamom" | "carob" | "carrot" | "cashew" | "cassava" | "cassia bark" | "caster sugar" | "cauliflower" | "caviar" | "cavolo nero" | "cayenne pepper" | "celeriac" | "celery" | "celery seeds" | "chaat masala" | "champ" | "champagne" | "chana dal" | "chanterelle mushrooms" | "chapati flour" | "chapatis" | "charcuterie" | "chard" | "charlotte potato" | "cheddar" | "cheese" | "cherry" | "cherry brandy" | "cherry tomatoes" | "chervil" | "cheshire" | "chestnut" | "chestnut mushrooms" | "chia seeds" | "chicken" | "chicken breast" | "chicken leg" | "chicken liver" | "chicken stock" | "chicken thigh" | "chicken wing" | "chickpea" | "chickpea flour" | "chicory" | "chilli" | "chilli oil" | "chilli paste" | "chilli powder" | "chilli sauce" | "chinese cabbage" | "chinese mushrooms" | "chinese pancake" | "chipotle" | "chips" | "chives" | "chocolate" | "chocolate biscuit" | "chocolate cake" | "chocolate truffle" | "chopped tomatoes" | "chorizo" | "choux pastry" | "christmas pudding" | "chuck and blade" | "chump" | "chutney" | "ciabatta" | "cider" | "cider vinegar" | "cinnamon" | "citrus fruit" | "clams" | "clarified butter" | "clementine" | "clotted cream" | "cloves" | "cobnut" | "cockles" | "cocoa butter" | "cocoa powder" | "coconut" | "coconut cream" | "coconut flour" | "coconut milk" | "coconut oil" | "cod" | "coffee" | "coffee beans" | "coffee essence" | "coffee granules" | "coffee liqueur" | "cognac" | "cola" | "coleslaw" | "coley" | "collar" | "comp\u00f4te" | "comt\u00e9" | "condensed milk" | "coriander" | "coriander cress" | "coriander seeds" | "corn oil" | "corned beef" | "cornflour" | "cos lettuce" | "cottage cheese" | "courgette" | "couscous" | "crab" | "crackers" | "cranberry" | "cranberry juice" | "cranberry sauce" | "crayfish" | "cream" | "cream cheese" | "cream liqueur" | "cream of tartar" | "cream soda" | "creamed coconut" | "cr\u00e8me fra\u00eeche" | "cr\u00eape" | "cress" | "crisps" | "croissant" | "crostini" | "cro\u00fbtons" | "crumble" | "crystallised ginger" | "cucumber" | "cumin" | "curd" | "curd cheese" | "curly kale" | "currants" | "curry" | "curry leaves" | "curry paste" | "curry powder" | "custard" | "custard powder" | "cuttlefish" | "daikon" | "damsons" | "dandelion" | "dark chocolate" | "date" | "demerara sugar" | "desiccated coconut" | "desir\u00e9e potato" | "digestive biscuit" | "dijon mustard" | "dill" | "dim sum wrappers" | "dolcelatte" | "double cream" | "double gloucester" | "dragon fruit" | "dried apricots" | "dried cherries" | "dried chilli" | "dried fruit" | "dried mixed fruit" | "dry sherry" | "duck" | "duck confit" | "duck fat" | "dulce de leche" | "dumplings" | "eel" | "egg" | "egg wash" | "egg white" | "egg yolk" | "elderflower" | "emmental" | "english muffin" | "english mustard" | "evaporated milk" | "exotic fruit" | "falafel" | "farfalle" | "fat" | "fennel" | "fennel seeds" | "fenugreek" | "feta" | "fettuccine" | "field mushroom" | "fig" | "fillet of beef" | "filo pastry" | "fish" | "fish paste" | "fish roe" | "fish sauce" | "fish soup" | "five-spice powder" | "flageolet beans" | "flaked almonds" | "flank" | "flatbread" | "flatfish" | "flaxseed" | "fleur de sel" | "flour" | "flour tortilla" | "floury potato" | "focaccia" | "fondant icing" | "fontina cheese" | "food colouring" | "forced rhubarb" | "fortified wine" | "freekeh" | "french beans" | "french bread" | "french dressing" | "fresh coriander" | "fresh tuna" | "fromage frais" | "fruit" | "fruit brandy" | "fruit cake" | "fruit juice" | "fudge" | "fusilli" | "galangal" | "game" | "gammon" | "garam masala" | "garlic" | "garlic and herb cream cheese" | "garlic bread" | "gelatine" | "ghee" | "gherkin" | "giblets" | "gin" | "ginger" | "ginger ale" | "ginger beer" | "ginger biscuit" | "gingerbread" | "glac\u00e9 cherries" | "globe artichoke" | "glucose" | "gluten-free flour" | "gnocchi" | "goat" | "goats' cheese" | "goji berries" | "golden syrup" | "goose" | "goose fat" | "gooseberry" | "gorgonzola" | "gouda" | "grains" | "gram flour" | "grapefruit" | "grapefruit juice" | "grapes" | "grapeseed oil" | "gratin" | "gravy" | "gravy browning" | "green banana" | "green beans" | "green cabbage" | "green lentil" | "green tea" | "greengages" | "ground almonds" | "ground ginger" | "grouse" | "gruy\u00e8re" | "guacamole" | "guava" | "gurnard" | "haddock" | "haggis" | "hake" | "halibut" | "halloumi" | "ham" | "hare" | "haricot beans" | "harissa" | "hazelnut" | "hazelnut oil" | "heart" | "herbal tea" | "herbes de provence" | "herbs" | "herring" | "hogget" | "hoisin sauce" | "hollandaise sauce" | "honey" | "honeycomb" | "horseradish" | "horseradish sauce" | "hot cross buns" | "hummus" | "hunza apricots" | "ice cream" | "iceberg lettuce" | "icing" | "icing sugar" | "irish stout" | "jackfruit" | "jaggery" | "jam" | "jasmine rice" | "jelly" | "jerk seasoning" | "jersey royal potatoes" | "jerusalem artichoke" | "juniper berries" | "jus" | "kale" | "ketchup" | "ketjap manis" | "kidney" | "kidney beans" | "king edward" | "kipper" | "kirsch" | "kiwi fruit" | "kohlrabi" | "lager" | "lamb" | "lamb breast" | "lamb chop" | "lamb fillet" | "lamb kidney" | "lamb loin" | "lamb mince" | "lamb neck" | "lamb rump" | "lamb shank" | "lamb shoulder" | "lamb stock" | "lancashire cheese" | "langoustine" | "lard" | "lardons" | "lasagne" | "lasagne sheets" | "laverbread" | "leek" | "leftover turkey" | "leg of lamb" | "lemon" | "lemon balm" | "lemon curd" | "lemon juice" | "lemon sole" | "lemonade" | "lemongrass" | "lentils" | "lettuce" | "lime" | "lime cordial" | "lime juice" | "lime leaves" | "lime pickle" | "ling" | "lingonberry" | "linguine" | "liqueur" | "liquorice" | "little gem lettuce" | "liver" | "loaf cake" | "lobster" | "long-grain rice" | "lovage" | "low-calorie sweetener" | "lychee" | "macadamia" | "macaroni" | "macaroon" | "mace" | "mackerel" | "madeira" | "madeira cake" | "madeleines" | "maize" | "manchego" | "mandarin" | "mangetout" | "mango" | "mango chutney" | "mango juice" | "maple syrup" | "margarine" | "marjoram" | "marmalade" | "marrow" | "marrowfat peas" | "marsala wine" | "marshmallow" | "marzipan" | "mascarpone" | "mashed potato" | "matzo" | "mayonnaise" | "meat" | "medlars" | "melon" | "meringue" | "milk" | "milk chocolate" | "mince" | "mince pies" | "mincemeat" | "mint" | "mint sauce" | "mirin" | "miso" | "mixed berries" | "mixed nuts" | "mixed spice" | "mixed spices" | "molasses" | "monkfish" | "morel" | "mortadella" | "mozzarella" | "muesli" | "muffins" | "mung beans" | "mung dal" | "mushroom" | "mussels" | "mustard" | "mustard cress" | "mustard powder" | "mustard seeds" | "mutton" | "naan bread" | "nachos" | "nasturtium" | "nectarine" | "nettle" | "new potatoes" | "nibbed almonds" | "nigella seeds" | "noodles" | "nori" | "nougat" | "nut" | "nutmeg" | "oatcakes" | "oatmeal" | "oats" | "octopus" | "offal" | "oil" | "oily fish" | "okra" | "olive" | "olive oil" | "onion" | "orange" | "orange juice" | "orange liqueur" | "oregano" | "ouzo" | "oxtail" | "oyster" | "oyster mushrooms" | "oyster sauce" | "paella" | "pak choi" | "palm oil" | "palm sugar" | "pancakes" | "pancetta" | "panch phoran" | "pandan leaves" | "paneer" | "panettone" | "papaya" | "pappardelle" | "paprika" | "paratha" | "parma ham" | "parmesan" | "parsley" | "parsnip" | "partridge" | "passata" | "passion fruit" | "passion fruit juice" | "pasta" | "pasta sauce" | "pastrami" | "pastry" | "pasty" | "p\u00e2t\u00e9" | "pea shoots" | "peach" | "peanut butter" | "peanut oil" | "peanuts" | "pear" | "pearl barley" | "peas" | "pecan" | "pecorino" | "pectin" | "peel" | "penne" | "pepper" | "peppercorn" | "pepperoni" | "perry" | "pesto" | "pheasant" | "piccalilli" | "pickle" | "pickled onion" | "pie" | "pigeon" | "pigeon peas" | "pine nut" | "pineapple" | "pineapple juice" | "pink fir apple" | "pink peppercorn" | "pinto beans" | "pistachio" | "pitta bread" | "plaice" | "plain flour" | "plantain" | "plum" | "polenta" | "pollack" | "pollock" | "pomegranate" | "pomegranate juice" | "pomegranate molasses" | "pomelo" | "popcorn" | "poppy seeds" | "porcini" | "pork" | "pork belly" | "pork chop" | "pork fillet" | "pork leg" | "pork loin" | "pork mince" | "pork sausages" | "pork shoulder" | "pork spare rib" | "porridge" | "port" | "portobello mushrooms" | "potato" | "potato wedges" | "poultry" | "poussin" | "prawn" | "prawn crackers" | "preserved lemons" | "preserves" | "pretzels" | "prosciutto" | "prune" | "pudding rice" | "puff pastry" | "pulled pork" | "pumpernickel bread" | "pumpkin" | "pumpkin seed" | "purple sprouting broccoli" | "puy lentils" | "quail" | "quails' egg" | "quark" | "quince" | "quinoa" | "quorn" | "rabbit" | "rack of lamb" | "radicchio" | "radish" | "rainbow chard" | "rainbow trout" | "raisins" | "raita" | "rapeseed oil" | "ras-el-hanout" | "raspberry" | "raspberry jam" | "ratafia biscuits" | "ratatouille" | "red cabbage" | "red leicester" | "red lentil" | "red mullet" | "red onion" | "red rice" | "red snapper" | "red wine" | "red wine vinegar" | "redcurrant" | "redcurrant jelly" | "rennet" | "rhubarb" | "rib of beef" | "rice" | "rice flour" | "rice noodles" | "rice vinegar" | "rice wine" | "ricotta" | "rigatoni" | "risotto rice" | "roast beef" | "roast chicken" | "roast lamb" | "roast pork" | "roast potatoes" | "roasted vegetables" | "rock salt" | "rocket" | "root vegetable" | "roquefort" | "rosemary" | "rosewater" | "royal icing" | "rum" | "rump" | "runner beans" | "rye bread" | "rye flour" | "saffron" | "sage" | "sage derby" | "salad" | "salad leaves" | "salami" | "salmon" | "salsa" | "salsify" | "salt" | "salt beef" | "salt cod" | "samphire" | "sardine" | "satay" | "satsuma" | "sauces" | "saucisson" | "sauerkraut" | "sausage" | "savory" | "savoy cabbage" | "scallop" | "scotch bonnet chilli" | "scrag" | "sea bass" | "sea bream" | "sea salt" | "seafood" | "seasoning" | "seaweed" | "seeds" | "self-raising flour" | "semolina" | "serrano ham" | "sesame oil" | "sesame seeds" | "seville orange" | "shallot" | "sharon fruit" | "shellfish" | "sherry" | "sherry vinegar" | "shiitake mushroom" | "shin" | "shortbread" | "shortcrust pastry" | "sichuan pepper" | "silverside" | "single cream" | "sirloin" | "skate" | "sloe" | "sloe gin" | "smoked cheese" | "smoked fish" | "smoked haddock" | "smoked mackerel" | "smoked paprika" | "smoked salmon" | "smoked trout" | "soba noodles" | "soda bread" | "soda water" | "sorrel" | "soup" | "sourdough bread" | "soured cream" | "soy sauce" | "soy milk" | "soya beans" | "soya flour" | "soya milk" | "spaghetti" | "sparkling wine" | "spelt" | "spelt flour" | "spices" | "spinach" | "split peas" | "sponge cake" | "spring greens" | "spring onion" | "spring roll wrappers" | "squash" | "squid" | "sriracha" | "star anise" | "steak" | "stem ginger" | "stewing lamb" | "stilton" | "stock" | "strawberry" | "strawberry jam" | "strong white flour" | "stuffing" | "suet" | "sugar" | "sugar-snap peas" | "sultanas" | "sumac" | "summer fruit" | "sunflower oil" | "sunflower seed" | "sushi rice" | "swede" | "sweet potato" | "sweet sherry" | "sweetbread" | "sweetcorn" | "sweets" | "swiss chard" | "swiss rolls and roulades" | "swordfish" | "syrup" | "t-bone steak" | "tabasco" | "taco" | "tagliatelle" | "tahini" | "taleggio" | "tamari" | "tamarind" | "tangerine" | "tapenade" | "tapioca" | "tarragon" | "tayberry" | "tea" | "tequila" | "teriyaki sauce" | "thai basil" | "thyme" | "tilapia" | "tinned tuna" | "toffee" | "tofu" | "tomatillo" | "tomato" | "tomato chutney" | "tomato juice" | "tomato pur\u00e9e" | "tongue" | "tonic" | "topside" | "treacle" | "trout" | "truffle" | "truffle oil" | "turbot" | "turkey" | "turkey breast" | "turkey mince" | "turkish delight" | "turmeric" | "turnip" | "urid dal" | "vacherin" | "vanilla bean paste" | "vanilla essence" | "vanilla extract" | "vanilla pod" | "veal" | "vegetable oil" | "vegetable shortening" | "vegetable stock" | "vegetables" | "vegetarian sausage" | "venison" | "vermicelli (pasta)" | "vermouth" | "vine leaves" | "vinegar" | "vodka" | "walnut" | "walnut oil" | "wasabi" | "water chestnut" | "watercress" | "watermelon" | "waxy potato" | "wensleydale" | "wheatgerm" | "whelk" | "whipping cream" | "whisky" | "whisky liqueur" | "white bread" | "white cabbage" | "white chocolate" | "white fish" | "white pepper" | "white wine" | "white wine vinegar" | "whitecurrant" | "whiting" | "whole wheat pasta" | "wholegrain mustard" | "wholemeal bread" | "wholemeal flour" | "wild garlic" | "wild mushrooms" | "wild rice" | "wine" | "wood pigeon" | "worcestershire sauce" | "wraps" | "yam" | "yeast" | "yeast extract" | "yoghurt" | "yuzu" | "zest") +ingredient: modifier* amount* INGREDIENT (conjunction + INGREDIENT)* (aside | ignore)* +INGREDIENT: ("almond" | "soy milk" | "cider vinegar" | "vegan butter" | "vegan food colourings" | "sunflower spread" | "caster sugar" | "chorizo" | "vanilla extract" | "self-raising flour" | "self raising flour" | "baking powder" | "icing sugar" | "milk" | "vinegar" | "pork" | "beef" | "oil" | "acidulated water" | "ackee" | "acorn squash" | "advocaat" | "agar-agar" | "ajwain" | "ale" | "aleppo pepper" | "alfalfa sprouts" | "allspice" | "almond" | "almond essence" | "almond extract" | "almond milk" | "amaranth" | "amaretti" | "amchoor" | "anchovies" | "anchovy essence" | "angelica" | "angostura bitters" | "anise" | "apple" | "apple chutney" | "apple juice" | "apple sauce" | "apricot" | "apricot jam" | "aquafaba" | "arborio rice" | "arbroath smokie" | "argan oil" | "arrowroot" | "artichoke" | "asafoetida" | "asparagus" | "aubergine" | "avocado" | "bacon" | "baguette" | "baked beans" | "baking" | "baking powder" | "balsamic vinegar" | "bamboo shoots" | "banana" | "barbecue sauce" | "barley" | "basil" | "basmati rice" | "bay leaf" | "beans" | "beansprouts" | "b\u00e9chamel sauce" | "beef" | "beef consomm\u00e9" | "beef dripping" | "beef mince" | "beef ribs" | "beef rump" | "beef sausage" | "beef stock" | "beef tomato" | "beer" | "beetroot" | "berry" | "best end of lamb" | "beurre mani\u00e9" | "bicarbonate of soda" | "bird's-eye chillies" | "biscotti" | "biscuits" | "blachan" | "black bean" | "black bean sauce" | "black cardamom" | "black eyed beans" | "black pepper" | "black pudding" | "black sesame seeds" | "blackberry" | "blackcurrant" | "blackcurrant juice drink" | "blini" | "blood orange" | "blueberry" | "boar" | "bok choi" | "bone marrow" | "bonito" | "borage" | "borlotti beans" | "bouquet garni" | "braising steak" | "bramley apple" | "bran" | "brandy" | "brandy butter" | "brandy snaps" | "bratwurst" | "brazil nut" | "bread" | "bread roll" | "bread sauce" | "breadcrumbs" | "breadfruit" | "bresaola" | "brie" | "brill" | "brioche" | "brisket" | "broad beans" | "broccoli" | "brown bread" | "brown lentil" | "brown rice" | "brown sauce" | "brown shrimp" | "brown sugar" | "brussels sprouts" | "buckwheat" | "buckwheat flour" | "bulgur wheat" | "buns" | "burger" | "butter" | "butter beans" | "buttercream icing" | "butterhead lettuce" | "buttermilk" | "butternut squash" | "cabbage" | "caerphilly" | "cake" | "calasparra rice" | "calvados" | "camembert" | "candied peel" | "cannellini beans" | "cape gooseberries" | "capers" | "capsicum" | "caramel" | "caraway seeds" | "cardamom" | "carob" | "carrot" | "cashew" | "cassava" | "cassia bark" | "caster sugar" | "cauliflower" | "caviar" | "cavolo nero" | "cayenne pepper" | "celeriac" | "celery" | "celery seeds" | "chaat masala" | "champ" | "champagne" | "chana dal" | "chanterelle mushrooms" | "chapati flour" | "chapatis" | "charcuterie" | "chard" | "charlotte potato" | "cheddar" | "cheese" | "cherry" | "cherry brandy" | "cherry tomatoes" | "chervil" | "cheshire" | "chestnut" | "chestnut mushrooms" | "chia seeds" | "chicken" | "chicken breast" | "chicken leg" | "chicken liver" | "chicken stock" | "chicken thigh" | "chicken wing" | "chickpea" | "chickpea flour" | "chicory" | "chilli" | "chilli oil" | "chilli paste" | "chilli powder" | "chilli sauce" | "chinese cabbage" | "chinese mushrooms" | "chinese pancake" | "chipotle" | "chips" | "chives") +// | "chocolate" | "chocolate biscuit" | "chocolate cake" | "chocolate truffle" | "chopped tomatoes" | "chorizo" | "choux pastry" | "christmas pudding" | "chuck and blade" | "chump" | "chutney" | "ciabatta" | "cider" | "cider vinegar" | "cinnamon" | "citrus fruit" | "clams" | "clarified butter" | "clementine" | "clotted cream" | "cloves" | "cobnut" | "cockles" | "cocoa butter" | "cocoa powder" | "coconut" | "coconut cream" | "coconut flour" | "coconut milk" | "coconut oil" | "cod" | "coffee" | "coffee beans" | "coffee essence" | "coffee granules" | "coffee liqueur" | "cognac" | "cola" | "coleslaw" | "coley" | "collar" | "comp\u00f4te" | "comt\u00e9" | "condensed milk" | "coriander" | "coriander cress" | "coriander seeds" | "corn oil" | "corned beef" | "cornflour" | "cos lettuce" | "cottage cheese" | "courgette" | "couscous" | "crab" | "crackers" | "cranberry" | "cranberry juice" | "cranberry sauce" | "crayfish" | "cream" | "cream cheese" | "cream liqueur" | "cream of tartar" | "cream soda" | "creamed coconut" | "cr\u00e8me fra\u00eeche" | "cr\u00eape" | "cress" | "crisps" | "croissant" | "crostini" | "cro\u00fbtons" | "crumble" | "crystallised ginger" | "cucumber" | "cumin" | "curd" | "curd cheese" | "curly kale") + +// | "currants" | "curry" | "curry leaves" | "curry paste" | "curry powder" | "custard" | "custard powder" | "cuttlefish" | "daikon" | "damsons" | "dandelion" | "dark chocolate" | "date" | "demerara sugar" | "desiccated coconut" | "desir\u00e9e potato" | "digestive biscuit" | "dijon mustard" | "dill" | "dim sum wrappers" | "dolcelatte" | "double cream" | "double gloucester" | "dragon fruit" | "dried apricots" | "dried cherries" | "dried chilli" | "dried fruit" | "dried mixed fruit" | "dry sherry" | "duck" | "duck confit" | "duck fat" | "dulce de leche" | "dumplings" | "eel" | "egg" | "egg wash" | "egg white" | "egg yolk" | "elderflower" | "emmental" | "english muffin" | "english mustard" | "evaporated milk" | "exotic fruit" | "falafel" | "farfalle" | "fat" | "fennel" | "fennel seeds" | "fenugreek" | "feta" | "fettuccine" | "field mushroom" | "fig" | "fillet of beef" | "filo pastry" | "fish" | "fish paste" | "fish roe" | "fish sauce" | "fish soup" | "five-spice powder" | "flageolet beans" | "flaked almonds" | "flank" | "flatbread" | "flatfish" | "flaxseed" | "fleur de sel" | "flour" | "flour tortilla" | "floury potato" | "focaccia" | "fondant icing" | "fontina cheese" | "food colouring" | "forced rhubarb" | "fortified wine" | "freekeh" | "french beans" | "french bread" | "french dressing" | "fresh coriander" | "fresh tuna" | "fromage frais" | "fruit" | "fruit brandy" | "fruit cake" | "fruit juice" | "fudge" | "fusilli" | "galangal" | "game" | "gammon" | "garam masala" | "garlic" | "garlic and herb cream cheese" | "garlic bread" | "gelatine" | "ghee" | "gherkin" | "giblets" | "gin" | "ginger" | "ginger ale" | "ginger beer" | "ginger biscuit" | "gingerbread" | "glac\u00e9 cherries" | "globe artichoke" | "glucose" | "gluten-free flour" | "gnocchi" | "goat" | "goats' cheese" | "goji berries" | "golden syrup" | "goose" | "goose fat" | "gooseberry" | "gorgonzola" | "gouda" | "grains" | "gram flour" | "grapefruit" | "grapefruit juice" | "grapes" | "grapeseed oil" | "gratin" | "gravy" | "gravy browning" | "green banana" | "green beans" | "green cabbage" | "green lentil" | "green tea" | "greengages" | "ground almonds" | "ground ginger" | "grouse" | "gruy\u00e8re" | "guacamole" | "guava" | "gurnard" | "haddock" | "haggis" | "hake" | "halibut" | "halloumi" | "ham" | "hare" | "haricot beans" | "harissa" | "hazelnut" | "hazelnut oil" | "heart" | "herbal tea" | "herbes de provence" | "herbs" | "herring" | "hogget" | "hoisin sauce" | "hollandaise sauce" | "honey" | "honeycomb" | "horseradish" | "horseradish sauce" | "hot cross buns" | "hummus" | "hunza apricots" | "ice cream" | "iceberg lettuce" | "icing" | "icing sugar" | "irish stout" | "jackfruit" | "jaggery" | "jam" | "jasmine rice" | "jelly" | "jerk seasoning" | "jersey royal potatoes" | "jerusalem artichoke" | "juniper berries" | "jus" | "kale" | "ketchup" | "ketjap manis" | "kidney" | "kidney beans" | "king edward" | "kipper" | "kirsch" | "kiwi fruit" | "kohlrabi" | "lager" | "lamb" | "lamb breast" | "lamb chop" | "lamb fillet" | "lamb kidney" | "lamb loin" | "lamb mince" | "lamb neck" | "lamb rump" | "lamb shank" | "lamb shoulder" | "lamb stock" | "lancashire cheese" | "langoustine" | "lard" | "lardons" | "lasagne" | "lasagne sheets" | "laverbread" | "leek" | "leftover turkey" | "leg of lamb" | "lemon" | "lemon balm" | "lemon curd" | "lemon juice" | "lemon sole" | "lemonade" | "lemongrass" | "lentils" | "lettuce" | "lime" | "lime cordial" | "lime juice" | "lime leaves" | "lime pickle" | "ling" | "lingonberry" | "linguine" | "liqueur" | "liquorice" | "little gem lettuce" | "liver" | "loaf cake" | "lobster" | "long-grain rice" | "lovage" | "low-calorie sweetener" | "lychee" | "macadamia" | "macaroni" | "macaroon" | "mace" | "mackerel" | "madeira" | "madeira cake" | "madeleines" | "maize" | "manchego" | "mandarin" | "mangetout" | "mango" | "mango chutney" | "mango juice" | "maple syrup" | "margarine" | "marjoram" | "marmalade" | "marrow" | "marrowfat peas" | "marsala wine" | "marshmallow" | "marzipan" | "mascarpone" | "mashed potato" | "matzo" | "mayonnaise" | "meat" | "medlars" | "melon" | "meringue" | "milk" | "milk chocolate" | "mince" | "mince pies" | "mincemeat" | "mint" | "mint sauce" | "mirin" | "miso" | "mixed berries" | "mixed nuts" | "mixed spice" | "mixed spices" | "molasses" | "monkfish" | "morel" | "mortadella" | "mozzarella" | "muesli" | "muffins" | "mung beans" | "mung dal" | "mushroom" | "mussels" | "mustard" | "mustard cress" | "mustard powder" | "mustard seeds" | "mutton" | "naan bread" | "nachos" | "nasturtium" | "nectarine" | "nettle" | "new potatoes" | "nibbed almonds" | "nigella seeds" | "noodles" | "nori" | "nougat" | "nut" | "nutmeg" | "oatcakes" | "oatmeal" | "oats" | "octopus" | "offal" | "oil" | "oily fish" | "okra" | "olive" | "olive oil" | "onion" | "orange" | "orange juice" | "orange liqueur" | "oregano" | "ouzo" | "oxtail" | "oyster" | "oyster mushrooms" | "oyster sauce" | "paella" | "pak choi" | "palm oil" | "palm sugar" | "pancakes" | "pancetta" | "panch phoran" | "pandan leaves" | "paneer" | "panettone" | "papaya" | "pappardelle" | "paprika" | "paratha" | "parma ham" | "parmesan" | "parsley" | "parsnip" | "partridge" | "passata" | "passion fruit" | "passion fruit juice" | "pasta" | "pasta sauce" | "pastrami" | "pastry" | "pasty" | "p\u00e2t\u00e9" | "pea shoots" | "peach" | "peanut butter" | "peanut oil" | "peanuts" | "pear" | "pearl barley" | "peas" | "pecan" | "pecorino" | "pectin" | "peel" | "penne" | "pepper" | "peppercorn" | "pepperoni" | "perry" | "pesto" | "pheasant" | "piccalilli" | "pickle" | "pickled onion" | "pie" | "pigeon" | "pigeon peas" | "pine nut" | "pineapple" | "pineapple juice" | "pink fir apple" | "pink peppercorn" | "pinto beans" | "pistachio" | "pitta bread" | "plaice" | "plain flour" | "plantain" | "plum" | "polenta" | "pollack" | "pollock" | "pomegranate" | "pomegranate juice" | "pomegranate molasses" | "pomelo" | "popcorn" | "poppy seeds" | "porcini" | "pork" | "pork belly" | "pork chop" | "pork fillet" | "pork leg" | "pork loin" | "pork mince" | "pork sausages" | "pork shoulder" | "pork spare rib" | "porridge" | "port" | "portobello mushrooms" | "potato" | "potato wedges" | "poultry" | "poussin" | "prawn" | "prawn crackers" | "preserved lemons" | "preserves" | "pretzels" | "prosciutto" | "prune" | "pudding rice" | "puff pastry" | "pulled pork" | "pumpernickel bread" | "pumpkin" | "pumpkin seed" | "purple sprouting broccoli" | "puy lentils" | "quail" | "quails' egg" | "quark" | "quince" | "quinoa" | "quorn" | "rabbit" | "rack of lamb" | "radicchio" | "radish" | "rainbow chard" | "rainbow trout" | "raisins" | "raita" | "rapeseed oil" | "ras-el-hanout" | "raspberry" | "raspberry jam" | "ratafia biscuits" | "ratatouille" | "red cabbage" | "red leicester" | "red lentil" | "red mullet" | "red onion" | "red rice" | "red snapper" | "red wine" | "red wine vinegar" | "redcurrant" | "redcurrant jelly" | "rennet" | "rhubarb" | "rib of beef" | "rice" | "rice flour" | "rice noodles" | "rice vinegar" | "rice wine" | "ricotta" | "rigatoni" | "risotto rice" | "roast beef" | "roast chicken" | "roast lamb" | "roast pork" | "roast potatoes" | "roasted vegetables" | "rock salt" | "rocket" | "root vegetable" | "roquefort" | "rosemary" | "rosewater" | "royal icing" | "rum" | "rump" | "runner beans" | "rye bread" | "rye flour" | "saffron" | "sage" | "sage derby" | "salad" | "salad leaves" | "salami" | "salmon" | "salsa" | "salsify" | "salt" | "salt beef" | "salt cod" | "samphire" | "sardine" | "satay" | "satsuma" | "sauces" | "saucisson" | "sauerkraut" | "sausage" | "savory" | "savoy cabbage" | "scallop" | "scotch bonnet chilli" | "scrag" | "sea bass" | "sea bream" | "sea salt" | "seafood" | "seasoning" | "seaweed" | "seeds" | "self-raising flour" | "semolina" | "serrano ham" | "sesame oil" | "sesame seeds" | "seville orange" | "shallot" | "sharon fruit" | "shellfish" | "sherry" | "sherry vinegar" | "shiitake mushroom" | "shin" | "shortbread" | "shortcrust pastry" | "sichuan pepper" | "silverside" | "single cream" | "sirloin" | "skate" | "sloe" | "sloe gin" | "smoked cheese" | "smoked fish" | "smoked haddock" | "smoked mackerel" | "smoked paprika" | "smoked salmon" | "smoked trout" | "soba noodles" | "soda bread" | "soda water" | "sorrel" | "soup" | "sourdough bread" | "soured cream" | "soy sauce" | "soy milk" | "soya beans" | "soya flour" | "soya milk" | "spaghetti" | "sparkling wine" | "spelt" | "spelt flour" | "spices" | "spinach" | "split peas" | "sponge cake" | "spring greens" | "spring onion" | "spring roll wrappers" | "squash" | "squid" | "sriracha" | "star anise" | "steak" | "stem ginger" | "stewing lamb" | "stilton" | "stock" | "strawberry" | "strawberry jam" | "strong white flour" | "stuffing" | "suet" | "sugar" | "sugar-snap peas" | "sultanas" | "sumac" | "summer fruit" | "sunflower oil" | "sunflower seed" | "sushi rice" | "swede" | "sweet potato" | "sweet sherry" | "sweetbread" | "sweetcorn" | "sweets" | "swiss chard" | "swiss rolls and roulades" | "swordfish" | "syrup" | "t-bone steak" | "tabasco" | "taco" | "tagliatelle" | "tahini" | "taleggio" | "tamari" | "tamarind" | "tangerine" | "tapenade" | "tapioca" | "tarragon" | "tayberry" | "tea" | "tequila" | "teriyaki sauce" | "thai basil" | "thyme" | "tilapia" | "tinned tuna" | "toffee" | "tofu" | "tomatillo" | "tomato" | "tomato chutney" | "tomato juice" | "tomato pur\u00e9e" | "tongue" | "tonic" | "topside" | "treacle" | "trout" | "truffle" | "truffle oil" | "turbot" | "turkey" | "turkey breast" | "turkey mince" | "turkish delight" | "turmeric" | "turnip" | "urid dal" | "vacherin" | "vanilla bean paste" | "vanilla essence" | "vanilla extract" | "vanilla pod" | "veal" | "vegetable oil" | "vegetable shortening" | "vegetable stock" | "vegetables" | "vegetarian sausage" | "venison" | "vermicelli (pasta)" | "vermouth" | "vine leaves" | "vinegar" | "vodka" | "walnut" | "walnut oil" | "wasabi" | "water chestnut" | "watercress" | "watermelon" | "waxy potato" | "wensleydale" | "wheatgerm" | "whelk" | "whipping cream" | "whisky" | "whisky liqueur" | "white bread" | "white cabbage" | "white chocolate" | "white fish" | "white pepper" | "white wine" | "white wine vinegar" | "whitecurrant" | "whiting" | "whole wheat pasta" | "wholegrain mustard" | "wholemeal bread" | "wholemeal flour" | "wild garlic" | "wild mushrooms" | "wild rice" | "wine" | "wood pigeon" | "worcestershire sauce" | "wraps" | "yam" | "yeast" | "yeast extract" | "yoghurt" | "yuzu" | "zest") // aside: Match and ignore anything inside brackets // consider using %ignore aside aside: ASIDE ASIDE: /\(.*\)/ +ignore: IGNORE +IGNORE: /./ + // modifier: a word or phrase that modifies the ingredient // eg: "pears, chopped", "chopped pears", "chicken, skin on" // usually ends in "ed" @@ -74,7 +80,7 @@ NOUN: ("holes") // UTENSIL: an auxiliary object used by the action // eg: "bowl", "pan" utensil: UTENSIL -UTENSIL: ("bowl" | "pan" | "oven" | "12-hole cupcake tin" | "paper cases" | "jug") +UTENSIL: ("12-hole cupcake tin" | "apple corer" | "apple cutter" | "baster" | "beanpot" | "biscuit press" | "blow torch" | "boil over preventer" | "bottle opener" | "bowl" | "bread knife" | "browning tray" | "butter curler" | "cake and pie server" | "cheese cutter" | "cheese knife" | "cheese slicer" | "cheesecloth" | "chef's knife" | "cherry pitter" | "chinois" | "clay pot" | "cleaver" | "colander" | "cookie cutter" | "corkscrew" | "crab cracker" | "cutting board" | "dough scraper" | "edible tableware" | "egg piercer" | "egg poacher" | "egg separator" | "egg slicer" | "egg timer" | "jug" | "fat separator" | "fillet knife" | "fish scaler" | "fish slice" | "flour sifter" | "food mill" | "funnel" | "garlic press" | "grapefruit knife" | "grater" | "herb chopper" | "honey dipper" | "ladle" | "lame" | "lemon reamer" | "lemon squeezer" | "lobster pick" | "mandoline" | "mated colander pot" | "measuring cup" | "measuring spoon" | "meat grinder" | "meat tenderiser" | "meat thermometer" | "melon baller" | "mezzaluna" | "microplane" | "milk frother" | "mortar and pestle" | "nutcracker" | "nutmeg grater" | "oven" | "oven glove" | "pan" | "pastry bag" | "pastry blender" | "pastry brush" | "paper cases" | "peel" | "peeler" | "pepper mill" | "pie bird" | "pizza cutter" | "potato masher" | "potato ricer" | "pot-holder" | "poultry shears" | "roller docker" | "rolling pin" | "salt shaker" | "scales" | "scissors" | "scoop" | "sieve" | "slotted spoon" | "spatula" | "spider" | "sugar thermometer" | "tamis" | "tin opener" | "tomato knife" | "tongs" | "trussing needle" | "twine" | "whisk" | "wooden spoon" | "zester") // instruction: a verb applied to one or more ingredients // does not apply to gerunds like "stirring constantly" @@ -82,7 +88,7 @@ UTENSIL: ("bowl" | "pan" | "oven" | "12-hole cupcake tin" | "paper cases" | "jug instruction: verb ( PREPOSITION ( verb )? PREPOSITION? ( ingredient* | UTENSIL | mixture ) ) PREPOSITION+ UTENSIL verb: VERB -VERB: ("add" | "incorporate" | "cut" | "chop" | "fry" | "sear" | "brown" | "cook" | "brown" | "cook" | "simmer" | "quenelle" | "avoid" | "bake" | "roast" | "heat" | "preheat" | "beat" | "divide" | "portion" | "split" | "fill" | "cool" | "spoon" | "pipe" | "line" | "fold" | "whisk" | "stir" | "peel") +VERB: ("add" | "chop" | "cut" | "fry" | "sear" | "brown" | "cook" | "simmer" | "quennelle" | "avoid" | "bake" | "roast" | "heat" | "preheat" | "beat" | "divide" | "portion" | "split" | "fill" | "line" | "cool" | "spoon" | "pipe" | "fold" | "whisk" | "stir" | "peel") // mixture: a way to refer to multiple previous ingredients // usually as a result of a previous step in the method @@ -99,7 +105,7 @@ ARTICLE: ("a" | "an" | "the") // CONJUNCTION: word used to connect words, phrases, clauses, or sentences conjunction: CONJUNCTION -CONJUNCTION: ("and" | "or" | "but") +CONJUNCTION: ("and" | "or" | "but" | ",") // ADJECTIVE: adjective: ADJECTIVE diff --git a/o.py b/o.py new file mode 100644 index 0000000000000000000000000000000000000000..ca9692d716daf87f5a2ab69105631c2b6491b5e3 --- /dev/null +++ b/o.py @@ -0,0 +1,11 @@ +from rdflib import Graph, plugin +from rdflib.serializer import Serializer + +json = """ +[{"@id": "value"}] +""" + +g = Graph().parse(data=json, format='json-ld') + +xml = g.serialize(format='xml', indent=4).decode() +print(xml) diff --git a/ontology.n3 b/ontology.n3 deleted file mode 100644 index b2a60607d285e993b918eafef3217717b9041668..0000000000000000000000000000000000000000 --- a/ontology.n3 +++ /dev/null @@ -1,18 +0,0 @@ -@prefix dc: <http://purl.org/dc/elements/1.1/> . -<> dc:title - "Primer - Getting into the Semantic Web and RDF using N3" . - -@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . -@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . -@prefix owl: <http://www.w3.org/2002/07/owl#> . - -@prefix : <#> . - -:Ingredient a rdfs:Class. -:Collection a rdfs:Class. -:Menu a rdfs:Class; rdfs:subClassOf :Collection. -:Recipe a rdfs:Class. -:Food a rdfs:Class. -:StageSequence a rdfs:Class. - -:hasAllergens a rdfs:Property. diff --git a/parse.py b/parse.py new file mode 100755 index 0000000000000000000000000000000000000000..107618d09ebc48ecfd621c330b4f3b065935206f --- /dev/null +++ b/parse.py @@ -0,0 +1,42 @@ +from lark import Lark, tree, Transformer, v_args +from anytree.exporter import JsonExporter +from anytree.importer import DictImporter +import json + +class TreeToJson(Transformer): + def list(self, items): + dictionary = {} + for i in items: + dictionary[i.name] = i.value + return dictionary + + def pair(self, key_value): + name, value = key_value + return name, value + + def object(self, items): + name = items[0] + try: + elements = items[1] + except indexError: + elements = [] + + return {name, elements} + + def string(self, s): + (s,) = s + return s[1:-1] + +with open('grammar.lark', 'r') as grammar: + parser = Lark(grammar, start='start') + +filename = 'recipes/Uruguayan Guiso.json' +with open(filename, 'r') as recipe: + for section in ['ingredients', 'instructions']: + for i in json.load(recipe)[section]: + # json.loads(parser.parse(i).pretty()) + # print(parser.parse(i)) + tree = parser.parse(i) + print(TreeToJson().transform(tree)) +# print(parser.parse(i).pretty()) + # tree.pydot__tree_to_png(parser.parse(i), 'ast.png') diff --git a/parser.py b/parser.py deleted file mode 100755 index d07bbf8e96dadd303f3be7e965f6edaeb7a99929..0000000000000000000000000000000000000000 --- a/parser.py +++ /dev/null @@ -1,26 +0,0 @@ -from lark import Lark, tree -from anytree.exporter import JsonExporter -from anytree.importer import DictImporter -import json - -importer = DictImporter() -exporter = JsonExporter(indent=2, sort_keys=True) - -with open('grammar.lark', 'r') as grammar: - parser = Lark(grammar, start='start') - -# Parse -# filename = 'recipes/easy.json' -filename = 'recipes/vegancupcakes.json' -with open(filename, 'r') as recipe: - for section in ['Ingredients']: - for i in json.load(recipe)[section]: - print(parser.parse(i).pretty()) -# print(parser.parse(i).__dict__) -# exporter.export(parser.parse(i).__dict__) - # Print JSON AST - dict object has no __dict__ -# root = importer.import_(parser.parse(i).__dict__) -# print(exporter.export(root)) - # Doesn't work - object Tree not serializable - # print(json.dumps(parser.parse(i).__dict__)) - tree.pydot__tree_to_png(parser.parse(i), 'ast.png') diff --git a/preprocessor.py b/preprocessor.py index 539a566a8871483c45d4455a6470548a7ce0bd48..05eec6dec0c1433c8bc29121f726c159b83995f8 100755 --- a/preprocessor.py +++ b/preprocessor.py @@ -1,27 +1,33 @@ import json -from jsonschema import validate +import os +import glob +import subprocess +# from jsonschema import validate + +def lowerCase(recipe): + subprocess.call("sed -i 's/.*/\L&/g' recipes/*.json") -with open('recipes/vegancupcakes.json', 'r') as f: - recipes = json.load(f) - # Add a space before and after the character if there isn't one already -# all ubits +# all units # - # For example, converts "10g" to "10 g" def surround(): + pass # parse JSON for each Unit in Ingredients - for ingredient in recipes['Ingredients']: + # for ingredient in recipes['Ingredients']: # unit is any value of key Unit or Alternative in units.json # if unit surrounded by spaces, pass; else, add where necessary # Replaces the article "a" with the quantifier 1 def replaceA(): + pass # substitute "a" for 1 # Figure out from the context what the shorthand refers to # For example, "bake for 30 minutes at 180 c" refers to celsius, not cups # Conflicts should be rare and obvious, context-specific knowledge can be hard-coded into the processor def disambiguateUnits(): + pass # Guess units where they are not specified # For example, "bake for 30 minutes at 180" @@ -41,4 +47,7 @@ def specialChars(): def validateSchema(): # for each json file in database/ validate(schema, file) - \ No newline at end of file + +for filename in glob.glob("recipes/*.json"): + lowerCase(filename) + # with open(os.path.join(os.getcwd(), filename), 'r+') as f: diff --git a/reasoner.py b/reasoner.py new file mode 100755 index 0000000000000000000000000000000000000000..649dffc920379f7a015890f76017dfe0a459c086 --- /dev/null +++ b/reasoner.py @@ -0,0 +1,25 @@ +from owlready2 import * + +ontology = get_ontology("file:///home/liam/final-year-project/bbc.ttl").load() + +with ontology: + # owlready2.readthedocs.io/en/latest/onto.html + def hasAuthor(author): + pass + + def hasName(name): + pass + + def hasAllergen(allergen): + pass + + def hasDifficulty(difficulty): + pass + + def hasIngredient(ingredient): + ontology.search(iri = "*ingredient") + + def hasVegetables(): + pass + + sync_reasoner() diff --git a/recipes/Bacon Avocado Pasta.json b/recipes/Bacon Avocado Pasta.json new file mode 100644 index 0000000000000000000000000000000000000000..a0e729d9ba5c68e30f127ee0a0a3c216d80bbd5b --- /dev/null +++ b/recipes/Bacon Avocado Pasta.json @@ -0,0 +1 @@ +\L{"title": "bacon avocado pasta", "image": "https://imagesvc.meredithcorp.io/v3/mm/image?url=https%3a%2f%2fimages.media-allrecipes.com%2fuserphotos%2f4332206.jpg", "rating": 4.83, "total_time": 47, "ingredients": ["1 (8 ounce) package gldn grn bow tie semolina pasta dry-cup qk", "6 slices pork, cured, bacon, raw", "\u2154 cup basil, fresh", "3 tablespoons lemon juice, raw", "2 tablespoons oil, olive, salad or cooking", "3 cloves garlic, raw", "\u00bc teaspoon spices, pepper, black", "\u215b teaspoon salt, table", "2 eaches avocados, raw, all commercial varieties", "\u00bd cup cheese, pecorino romano"], "instructions": ["bring a large pot of lightly salted water to a boil. add pasta; cook, stirring occasionally, until tender yet firm to the bite, about 12 minutes. drain.", "", "place bacon in a large skillet and cook over medium-high heat, turning occasionally, until evenly browned, about 10 minutes. drain on paper towels; crumble into small pieces.", "", "mix basil, lemon juice, olive oil, garlic, pepper, and salt together in a small bowl.", "", "combine bacon pieces and avocado in a large bowl. stir in basil mixture. add pasta; toss to combine. sprinkle romano cheese on top."]} \ No newline at end of file diff --git a/recipes/Bruti Ma Buoni.json b/recipes/Bruti Ma Buoni.json new file mode 100644 index 0000000000000000000000000000000000000000..5ce4a34ca2d555a9206f91f11ac384f98326680b --- /dev/null +++ b/recipes/Bruti Ma Buoni.json @@ -0,0 +1 @@ +\L{"title": "bruti ma buoni", "image": "https://imagesvc.meredithcorp.io/v3/mm/image?url=https%3a%2f%2fimages.media-allrecipes.com%2fuserphotos%2f728481.jpg", "rating": 3.6, "total_time": 0, "ingredients": ["1 cup egg, white, raw, fresh", "1 \u00be cups sugars, granulated", "5 \u2153 cups nuts, almonds, blanched", "2 cups nuts, hazelnuts or filberts"], "instructions": ["preheat oven to 325 degrees f (165 degrees c).", "", "let egg whites stand until at room temperature. beat the whites until lightly foamy. add the sugar gradually as you beat. beat until soft peaks are formed. fold in the nuts.", "", "transfer this all to a large saucepot. cook over low heat, stirring all the time, until it thickens and turns a little brown, about 10 minutes.", "", "spoon the cookies onto greased baking sheets by the teaspoonful, about 1 to 1-1/2 inches apart. bake about 22 minutes, or until dry. remove and place on a wire rack to cool."]} \ No newline at end of file diff --git a/recipes/Busy Day Slow Cooker Taco Soup.json b/recipes/Busy Day Slow Cooker Taco Soup.json new file mode 100644 index 0000000000000000000000000000000000000000..77eb8fe8a07750d6e63864a6b93f0476ea93c5a2 --- /dev/null +++ b/recipes/Busy Day Slow Cooker Taco Soup.json @@ -0,0 +1 @@ +\L{"title": "busy day slow cooker taco soup", "image": "https://imagesvc.meredithcorp.io/v3/mm/image?url=https%3a%2f%2fimages.media-allrecipes.com%2fuserphotos%2f3442175.jpg", "rating": 4.54, "total_time": 195, "ingredients": ["1 pound beef, ground, regular, (approximately 27% fat), raw", "2 (14.5 ounce) cans tomatoes, red, ripe, canned, whole, regular pack", "1 (15 ounce) can beans, kidney, red, canned", "1 (15 ounce) can beans, pinto, mature seeds, canned", "1 (14 ounce) can corn, sweet, yellow, canned, whole kernel, drained solids", "1 (1 ounce) package ortega mild taco meat seasoning mix nb", "1 (1 ounce) package good seasons dressing mix-ranch dry env"], "instructions": ["heat a large skillet over medium-high heat. cook and stir beef in the hot skillet until browned and crumbly, 5 to 7 minutes.", "", "stir browned ground beef, tomatoes, kidney beans, pinto beans, corn, taco seasoning, and ranch dressing mix together in the crock of a slow cooker.", "", "cook on low for at least 3 hours."]} \ No newline at end of file diff --git a/recipes/Camp Bread.json b/recipes/Camp Bread.json new file mode 100644 index 0000000000000000000000000000000000000000..a3e0e093d9770b0c3f88668d971396441be40042 --- /dev/null +++ b/recipes/Camp Bread.json @@ -0,0 +1 @@ +\L{"title": "camp bread", "image": "https://images.media-allrecipes.com/userphotos/560x315/3271578.jpg", "rating": 0.0, "total_time": 40, "ingredients": ["5 cups all-purpose flour, plus more for kneading", "1/4 cup olive oil, plus more for brushing", "1 tablespoon kosher salt", "1 teaspoon cracked black pepper", "1/2 ounce active dry yeast", "1 2/3 cups warm water", "1 tablespoon finely chopped fresh herbs such as rosemary or thyme", "1 jalapeno or other chile, seeded, chopped", "lemons or limes for juicing"], "instructions": ["in an electric mixer with a dough hook, add flour, olive oil, kosher salt, and black pepper. turn on mixer to medium speed.", "stir yeast into warm water. pour into flour mixture and mix until dough looks smooth.", "remove dough from mixer and place on floured surface. gently knead for 1 minute.", "add finely chopped fresh herbs or chiles, if desired.", "cut dough into four equal parts. wrap tightly with plastic wrap; refrigerate for at least 1 hour.", "unwrap dough and place on well-floured surface. dust dough with flour and flatten dough with hands.", "let dough rest for about 10 minutes then stretch (as if it were pizza dough) pulling the dough out.", "shape into rectangles then brush with olive oil; season with salt and pepper.", "on a medium hot grill, cook bread for 3 to 4 minutes per side. for citrus flavor, squeeze freshly squeezed lemon or lime juice over dough while it's grilling.", "serve immediately."]} \ No newline at end of file diff --git a/recipes/Celebration Pie.json b/recipes/Celebration Pie.json new file mode 100644 index 0000000000000000000000000000000000000000..ebf34783cff491caccc8c6ecb2ab820dd86234a5 --- /dev/null +++ b/recipes/Celebration Pie.json @@ -0,0 +1 @@ +\L{"title": "celebration pie", "image": "https://imagesvc.meredithcorp.io/v3/mm/image?url=https%3a%2f%2fwww.allrecipes.com%2fimg%2fmisc%2fog-default.png", "rating": 4.33, "total_time": 5, "ingredients": ["1 (9 inch) pie crust, cookie-type, prepared from recipe, graham cracker, baked", "1 (14 ounce) can milk, canned, condensed, sweetened", "1 (0.13 ounce) package kool-aid drink mix unswt-blk cherry dry pkg", "1 (8 ounce) container dessert topping, semi solid, frozen"], "instructions": ["in a large bowl, combine sweetened condensed milk and drink mix. mix well, then fold in the whipped topping until no streaks remain. pour filling into pie shell. refrigerate several hours or overnight, the longer the better."]} \ No newline at end of file diff --git a/recipes/Chinese Dan-Bin.json b/recipes/Chinese Dan-Bin.json new file mode 100644 index 0000000000000000000000000000000000000000..d4056526d8ab0d88c226ed98820140c19ae007d7 --- /dev/null +++ b/recipes/Chinese Dan-Bin.json @@ -0,0 +1 @@ +\L{"title": "chinese dan-bin", "image": "https://imagesvc.meredithcorp.io/v3/mm/image?url=https%3a%2f%2fimages.media-allrecipes.com%2fuserphotos%2f102166.jpg", "rating": 3.93, "total_time": 7, "ingredients": ["1 slice pork, cured, bacon, raw", "1 egg, whole, raw, fresh", "1 (6 inch) tortillas, ready-to-bake or -fry, corn", "\u00bc cup corn, sweet, yellow, raw", "1 tablespoon salsa"], "instructions": ["fry the slice of bacon in a skillet over medium-high heat. set aside. reduce the heat to medium. pour the egg into the skillet, and sprinkle with corn. cook for less than 10 seconds.", "", "lay the tortilla over the whole egg. after the egg is firm and attached to the tortilla, flip over, and lay the bacon on top. put salsa over the bacon, and wrap. remove from the skillet, cut into small pieces and serve hot."]} \ No newline at end of file diff --git a/recipes/Chocolate Macaroon Cake.json b/recipes/Chocolate Macaroon Cake.json new file mode 100644 index 0000000000000000000000000000000000000000..043f902e61fb8784adee8ba1813afbe93c3fbf92 --- /dev/null +++ b/recipes/Chocolate Macaroon Cake.json @@ -0,0 +1 @@ +\L{"title": "chocolate macaroon cake", "image": "https://imagesvc.meredithcorp.io/v3/mm/image?url=https%3a%2f%2fimages.media-allrecipes.com%2fuserphotos%2f7927826.jpg", "rating": 4.52, "total_time": 190, "ingredients": ["1 egg, white, raw, fresh", "2 teaspoons vanilla extract", "\u00bd cup sugars, granulated", "2 cups nuts, coconut meat, dried (desiccated), sweetened, flaked, packaged", "1 tablespoon wheat flour, white, all-purpose, enriched, bleached", "\u00bd cup cocoa, dry powder, unsweetened", "\u00be cup coffee, brewed, prepared with tap water", "3 egg, whole, raw, fresh", "1 \u00be cups sugars, granulated", "1 teaspoon leavening agents, baking soda", "\u00bd cup cream, sour, cultured", "\u00bd cup shortening, household, soybean (hydrogenated)-cottonseed (hydrogenated)", "1 teaspoon salt, table", "2 cups wheat flour, white, all-purpose, enriched, bleached", "2 cups sugars, granulated", "4 tablespoons cocoa, dry powder, unsweetened", "\u00bd cup butter, with salt", "\u00bc cup syrups, corn, high-fructose", "\u00bd cup milk, reduced fat, fluid, 2% milkfat, with added vitamin a", "1 teaspoon vanilla extract"], "instructions": ["preheat oven to 350 degrees f (175 degrees c). grease a 10-inch bundt pan.", "", "to make filling: beat egg white with 1 teaspoon vanilla until soft mounds form. add 1/2 cup sugar gradually, beating until stiff peaks form. stir in coconut and 1 tablespoon flour. set filling aside.", "", "dissolve the cocoa in the hot coffee. separate the three eggs, setting the yolks aside. beat the egg whites until soft mounds form. gradually beat in 1/2 cup sugar until meringue stands in medium-stiff peaks.", "", "combine the sour cream and the baking soda. beat remaining 1 1/4 cups of the sugar, shortening, egg yolks, salt, 1 teaspoon vanilla and 1/2 of the of the cocoa mixture until light and creamy, about 4 minutes. stir in 2 cups flour, the sour cream mixture, and the remaining cocoa mixture; blend well.", "", "fold about 1/3 of the beaten egg whites into the batter to lighten it; gently fold in remaining egg whites.", "", "turn 1/2 of the chocolate batter into the prepared pan. place 1/2 of the coconut mixture on top. cover with the remaining chocolate batter, then the remaining coconut mixture.", "", "bake in preheated oven until a tester inserted in the center of the cake comes out clean, 55 to 65 minutes. let cake cool completely before removing from pan and icing.", "", "to make icing: combine 2 cups sugar and 1/4 cup cocoa powder; transfer to a saucepan. add butter, corn syrup, and milk. bring to boil over medium heat, stirring frequently, and let boil for 1 minute. do not overcook! remove from heat, let cool, and stir in 1 teaspoon vanilla. beat icing until it is at a soft, spreading consistency; glaze cake."]} \ No newline at end of file diff --git a/recipes/Chocolate Olive Oil Cake.json b/recipes/Chocolate Olive Oil Cake.json new file mode 100644 index 0000000000000000000000000000000000000000..4c5615dde8e21a2b13756b195d8eff1631d95c6d --- /dev/null +++ b/recipes/Chocolate Olive Oil Cake.json @@ -0,0 +1 @@ +\L{"title": "chocolate olive oil cake", "image": "https://imagesvc.meredithcorp.io/v3/mm/image?url=https%3a%2f%2fimages.media-allrecipes.com%2fuserphotos%2f5330497.jpg", "rating": -1, "total_time": 100, "ingredients": ["3 \u00bd ounces dark chocolate candy bar", "2 eaches egg, whole, raw, fresh", "\u00bd cup sugars, granulated", "6 tablespoons oil, olive, salad or cooking", "1 cup nuts, almonds", "\u00bd cup wheat flour, white, all-purpose, enriched, bleached", "1 teaspoon spices, cinnamon, ground"], "instructions": ["preheat the oven to 350 degrees f (175 degrees c). grease a 7-inch baking pan and line with parchment paper.", "", "place chocolate in top of a double boiler over simmering water. stir frequently, scraping down the sides with a rubber spatula to avoid scorching, until chocolate is melted, about 5 minutes. remove from heat.", "", "combine eggs and sugar in a large bowl; beat with an electric mixer until pale. stir in melted chocolate and olive oil with a spatula until well combined. combine almonds, flour, and cinnamon in a second bowl and add to chocolate mixture. stir until well combined. pour into the prepared baking pan.", "", "bake in the preheated oven until a toothpick inserted into the center comes out clean, 25 to 30 minutes. cool completely before slicing and serving."]} \ No newline at end of file diff --git a/recipes/Christmas Poinsettia Punch.json b/recipes/Christmas Poinsettia Punch.json new file mode 100644 index 0000000000000000000000000000000000000000..db3a631ba676965d720694659ff1dca7ee604949 --- /dev/null +++ b/recipes/Christmas Poinsettia Punch.json @@ -0,0 +1 @@ +\L{"title": "christmas poinsettia punch", "image": "https://imagesvc.meredithcorp.io/v3/mm/image?url=https%3a%2f%2fimages.media-allrecipes.com%2fuserphotos%2f3029582.jpg", "rating": 5.0, "total_time": 10, "ingredients": ["\u00be (64 fluid ounce) bottle cranberry juice cocktail, bottled", "1 liter carbonated water; club soda", "1 (750 milliliter) bottle orange vodka", "1 (750 milliliter) bottle champagne", "\u00bd cup cranberries, raw"], "instructions": ["combine chilled cranberry juice, club soda, vodka, and champagne (see cook's note).", "", "garnish with fresh cranberries."]} \ No newline at end of file diff --git a/recipes/Creamy Spinach Tortellini.json b/recipes/Creamy Spinach Tortellini.json new file mode 100644 index 0000000000000000000000000000000000000000..303a10473c08254217bb3b6bf9ddde458bbf21ea --- /dev/null +++ b/recipes/Creamy Spinach Tortellini.json @@ -0,0 +1 @@ +\L{"title": "creamy spinach tortellini", "image": "https://imagesvc.meredithcorp.io/v3/mm/image?url=https%3a%2f%2fimages.media-allrecipes.com%2fuserphotos%2f7324048.jpg", "rating": 4.32, "total_time": 35, "ingredients": ["1 (9 ounce) package di giorno cheese tortellini-preckd kft", "2 tablespoons butter, with salt", "1 small onions, raw", "1 (8 ounce) package cheese, cream", "\u00bd cup cheese, parmesan, grated", "\u00bd cup milk, reduced fat, fluid, 2% milkfat, with added vitamin a", "1 cup mushrooms, raw", "1 (10 ounce) package spinach, frozen, chopped or leaf, unprepared", "1 cup cherry tomatoes, each"], "instructions": ["cook tortellini according to package directions.", "", "heat butter in a large skillet over medium heat. stir in onion; cook until soft and translucent. mix in cream cheese, parmesan, milk, mushrooms, and spinach.", "", "gently mix in tortellini and cherry tomatoes with skillet contents; warm through, and serve."]} \ No newline at end of file diff --git a/recipes/Easy Haupia.json b/recipes/Easy Haupia.json new file mode 100644 index 0000000000000000000000000000000000000000..ba0f76e7ee7f2105c01a7ad7503a99a9cf05a72b --- /dev/null +++ b/recipes/Easy Haupia.json @@ -0,0 +1 @@ +\L{"title": "easy haupia", "image": "https://imagesvc.meredithcorp.io/v3/mm/image?url=https%3a%2f%2fimages.media-allrecipes.com%2fuserphotos%2f8215585.jpg", "rating": 3.83, "total_time": 135, "ingredients": ["5 tablespoons cornstarch", "\u00bc cup sugars, granulated", "\u215b teaspoon salt, table", "2 cups nuts, coconut milk, canned (liquid expressed from grated meat and water)"], "instructions": ["place the cornstarch, sugar, and salt into a saucepan; stir in 1/4 of the coconut milk to make a smooth paste. stir in the remaining coconut milk, and bring to a simmer over low heat, stirring constantly. cook and stir until thickened so that it coats the back of a spoon, about 5 minutes. pour into a 9x13 inch baking dish; refrigerate until cold."]} \ No newline at end of file diff --git a/recipes/Easy Rice Flour Pancake.json b/recipes/Easy Rice Flour Pancake.json new file mode 100644 index 0000000000000000000000000000000000000000..27a2f9e4899ce837afb0043de3396d3291a02023 --- /dev/null +++ b/recipes/Easy Rice Flour Pancake.json @@ -0,0 +1 @@ +\L{"title": "easy rice flour pancake", "image": "https://imagesvc.meredithcorp.io/v3/mm/image?url=https%3a%2f%2fimages.media-allrecipes.com%2fuserphotos%2f2235555.jpg", "rating": 2.67, "total_time": 20, "ingredients": ["1 cup rice flour, white", "1 pinch salt, table", "1 egg, whole, raw, fresh", "1 tablespoon oil, soybean, salad or cooking", "1 tablespoon water, municipal", "1 serving pam butter cooking spray-1/3sec spray ihf"], "instructions": ["mix rice flour and salt together in a bowl; form a well in the center of the mixture. stir in egg, vegetable oil, and enough water to make a smooth batter.", "", "spray a non-stick frying pan with cooking spray and place over medium heat; pour about 1/4 cup batter into the hot pan. tilt pan until batter covers the whole bottom surface making a thin pancake; cook for 1 minute. flip and cook about 1 more minute. repeat with remaining batter."]} \ No newline at end of file diff --git a/recipes/Grandma's Famous Salmon Cakes.json b/recipes/Grandma's Famous Salmon Cakes.json new file mode 100644 index 0000000000000000000000000000000000000000..0fa3b26d9a1d4bfc75a82e9a141deb5cf931ef73 --- /dev/null +++ b/recipes/Grandma's Famous Salmon Cakes.json @@ -0,0 +1 @@ +\L{"title": "Grandma's Famous Salmon Cakes", "image": "https://imagesvc.meredithcorp.io/v3/mm/image?url=https%3A%2F%2Fimages.media-allrecipes.com%2Fuserphotos%2F785713.jpg", "rating": 4.38, "total_time": 30, "ingredients": ["1 (14.75 ounce) can Finfish, salmon, sockeye, canned, drained solids with bone", "2 Egg, whole, raw, fresh", "1 small Onions, raw", "1 teaspoon Spices, pepper, black", "3 tablespoons Oil, soybean, salad or cooking"], "instructions": ["Pick through the salmon and remove any bones. In a mixing bowl, beat the eggs and add the diced onion, salmon and pepper. Mix thoroughly.", "", "Shape into 2 ounce patties; about 7 or 8 patties. In a large skillet over medium heat, heat the oil. Fry each patty for 5 minutes on each side or until crispy and golden brown."]} \ No newline at end of file diff --git a/recipes/Green Eggs And Hash Omelet.json b/recipes/Green Eggs And Hash Omelet.json new file mode 100644 index 0000000000000000000000000000000000000000..107dee51285a6829607414b067a027d3ab26cc84 --- /dev/null +++ b/recipes/Green Eggs And Hash Omelet.json @@ -0,0 +1 @@ +\L{"title": "green eggs and hash omelet", "image": "https://imagesvc.meredithcorp.io/v3/mm/image?url=https%3a%2f%2fimages.media-allrecipes.com%2fuserphotos%2f4538662.jpg", "rating": 4.6, "total_time": 16, "ingredients": ["2 egg, whole, raw, fresh", "2 cups spinach, raw", "1 cup corned beef hash-canned", "1 pinch spices, pepper, black", "1 serving pam butter cooking spray-1/3sec spray ihf", "2 tablespoons cheese, mozzarella, part skim milk"], "instructions": ["combine eggs and spinach in a blender. blend on high speed for 1 minute. scrape down the sides of the blender. pulse until spinach is fully blended into the eggs, about 1 minute more.", "", "pour hash into a microwave-safe bowl. heat in the microwave until thoroughly warmed, about 1 minute. season with black pepper.", "", "spray a nonstick skillet with cooking spray; place over medium heat. pour in egg-spinach mixture. cover with a lid. cook until top is barely set, about 5 minutes. place corned beef hash over 1 side of the omelet. slide onto a plate, using the skillet to fold the other side on top. sprinkle mozzarella cheese over omelet."]} \ No newline at end of file diff --git a/recipes/Grilled Chicken Salad Cosmopolitan.json b/recipes/Grilled Chicken Salad Cosmopolitan.json new file mode 100644 index 0000000000000000000000000000000000000000..17e773b7e12420a67ba7d9eb3e28369318610ff9 --- /dev/null +++ b/recipes/Grilled Chicken Salad Cosmopolitan.json @@ -0,0 +1 @@ +\L{"title": "grilled chicken salad cosmopolitan", "image": "https://imagesvc.meredithcorp.io/v3/mm/image?url=https%3a%2f%2fimages.media-allrecipes.com%2fuserphotos%2f21891.jpg", "rating": 4.29, "total_time": 95, "ingredients": ["\u00bc cup cranberry sauce, canned, sweetened", "\u00bc cup marmalade, orange", "\u00bc cup lime juice, raw", "\u00bc cup orange juice, raw", "\u00bc cup oil, soybean, salad or cooking", "2 tablespoons lime vodka", "4 chicken, broilers or fryers, breast, meat only, raw", "\u00be teaspoon salt, table", "\u00be teaspoon lemon pepper hs", "1 (10 ounce) bag mixed salad greens", "\u00bd cup dried cranberries fsp", "2 cups oranges, raw", "2 tablespoons orange peel, raw"], "instructions": ["in a small saucepan over low heat, combine the cranberry sauce and orange marmalade. warm and stir until melted and well blended. remove from the heat and stir in the lime juice, orange juice and vegetable oil. remove 1/2 cup of the mixture and set aside in the refrigerator for later.", "", "allow the mixture to cool then stir in the lemon vodka and transfer to a large resealable bag. season the chicken pieces with salt and lemon pepper; place them into the bag with the marinade. seal the bag and marinate in the refrigerator for at least 1 hour, turning occasionally.", "", "preheat a grill for medium heat. remove the chicken from the plastic bag, discarding the marinade.", "", "place the chicken pieces on the preheated grill and cook for 4 to 5 minutes on each side, or until firm and no longer pink in the center. if you have a meat thermometer, it should measure 160 degrees f (70 degrees c) when measured in the thickest part. remove chicken to a cutting board and allow to rest for about 5 minutes.", "", "while the chicken is resting, combine the salad greens, cranberries, and orange segments. pour the reserved citrus marinade over the salad and toss lightly to coat. divide the salad between four serving plates. slice each piece of chicken crosswise into 1/2 inch strips. arrange over the tops of the salads and sprinkle with orange zest strips."]} \ No newline at end of file diff --git a/recipes/Healthy Quiche.json b/recipes/Healthy Quiche.json new file mode 100644 index 0000000000000000000000000000000000000000..a6dba870b49b745823445709b3d19dc8b4097724 --- /dev/null +++ b/recipes/Healthy Quiche.json @@ -0,0 +1 @@ +\L{"title": "healthy quiche", "image": "https://imagesvc.meredithcorp.io/v3/mm/image?url=https%3a%2f%2fimages.media-allrecipes.com%2fuserphotos%2f7652459.jpg", "rating": 4.36, "total_time": 50, "ingredients": ["1 serving pam butter cooking spray-1/3sec spray ihf", "\u00be cup onions, raw", "\u00bd cup zucchini, raw", "\u00be cup cauliflower, raw", "2 tablespoons water, municipal", "10 egg, white, raw, fresh", "\u00bc teaspoon spices, garlic powder", "\u00bc teaspoon spices, pepper, red or cayenne", "\u00bc teaspoon salt, table", "\u00bc teaspoon spices, pepper, black", "\u00bc cup monterey jack cheese+jalapeno pepper kft"], "instructions": ["preheat oven to 350 degrees f (175 degrees c).", "", "coat a skillet with cooking spray and place over medium heat; cook and stir onion and zucchini until tender, 5 to 10 minutes.", "", "place cauliflower in a microwave-safe bowl and add water; cook in microwave until cauliflower is tender, about 3 minutes. drain water.", "", "whisk egg whites, garlic powder, cayenne pepper, salt, and pepper together in a bowl; add zucchini-onion mixture, cauliflower, and pepperjack cheese. pour egg mixture into a 10-inch round pan.", "", "bake in the preheated oven until quiche is set in the middle, about 25 minutes."]} \ No newline at end of file diff --git a/recipes/Karen's Italian Pan-Fried Chicken.json b/recipes/Karen's Italian Pan-Fried Chicken.json new file mode 100644 index 0000000000000000000000000000000000000000..43250ee68da4d71cd97401f15efa3754628720bf --- /dev/null +++ b/recipes/Karen's Italian Pan-Fried Chicken.json @@ -0,0 +1 @@ +\L{"title": "Karen's Italian Pan-Fried Chicken", "image": "https://imagesvc.meredithcorp.io/v3/mm/image?url=https%3A%2F%2Fimages.media-allrecipes.com%2Fuserphotos%2F1919293.jpg", "rating": 4.57, "total_time": 35, "ingredients": ["1 Egg, whole, raw, fresh", "1 cup Progresso Italian Style Bread Crumbs PLB", "1 pound Chicken, broilers or fryers, breast, meat only, raw", "\u00bc cup Vegetable oil, canola", "1 (16 ounce) jar Peppers, sweet, red, canned, solids and liquids", "\u00bd cup Asiago Cheese"], "instructions": ["Preheat oven to 350 degrees F (175 degrees C).", "", "Beat egg in a shallow bowl. Spread bread crumbs in a separate shallow bowl. Dip chicken in egg, allowing excess to drip back into the bowl. Press the dipped chicken into the bread crumbs until evenly coated on all sides.", "", "Heat 2 tablespoons canola oil in a skillet over medium heat; cook chicken until no longer pink in the center, about 5 minutes per side. An instant-read thermometer inserted into the center should read at least 165 degrees F (74 degrees C).", "", "Heat remaining canola oil in a separate skillet over medium heat; cook and stir roasted red peppers until heated through, 3 to 5 minutes.", "", "Transfer chicken to a casserole dish and top with Asiago cheese and roasted red peppers.", "", "Bake in the preheated oven until cheese is melted, about 8 minutes."]} \ No newline at end of file diff --git a/recipes/Linguine with Cajun-Spiced Shrimp and Corn.json b/recipes/Linguine with Cajun-Spiced Shrimp and Corn.json new file mode 100644 index 0000000000000000000000000000000000000000..1ab4ab4e0e3954834b4d2f6cfa04c46aa66f9b3a --- /dev/null +++ b/recipes/Linguine with Cajun-Spiced Shrimp and Corn.json @@ -0,0 +1 @@ +\L{"title": "linguine with cajun-spiced shrimp and corn", "image": "https://imagesvc.meredithcorp.io/v3/mm/image?url=https%3a%2f%2fimages.media-allrecipes.com%2fuserphotos%2f5987565.jpg", "rating": 4.06, "total_time": 45, "ingredients": ["1 (16 ounce) package gg linguine pasta semolina-dry-5/8\"crcl qk", "1 pound shrimp, fresh, raw, medium (31-35)", "1 tablespoon liquid shrimp and crab boil seasoning", "\u00bd cup butter, with salt", "1 teaspoon garlic, raw", "\u2153 cup red onion", "\u2153 cup peppers, sweet, red, raw; red bell pepper", "\u00bd cup corn, sweet, yellow, canned, whole kernel, drained solids", "1 \u00bd tablespoons lime juice, raw", "2 tablespoons cilantro, raw", "1 teaspoon spices, oregano, ground", "1 teaspoon chipotle peppers in adobo sauce", "1 teaspoon sea salt, gray", "\u00bd cup cream, fluid, half and half"], "instructions": ["bring a large pot of lightly salted water to a boil. add linguine and cook until al dente, 8 to 10 minutes; drain.", "", "place shrimp and crab boil into a large saucepan. fill with water to 1 inch above the shrimp, and bring to a boil over high heat. boil for 3 minutes until shrimp turn pink, then drain.", "", "meanwhile, melt butter in a large skillet over medium-high heat. stir in garlic, and red onion, cook until the onion softens and turns translucent, about 4 minutes. stir in bell pepper, corn, lime juice, cilantro, oregano, chipotle pepper, and salt. stir in the half-and-half, and bring to a simmer. once the mixture is simmering, stir in shrimp, and toss with the drained pasta."]} \ No newline at end of file diff --git a/recipes/Maryellen's Baked Onions.json b/recipes/Maryellen's Baked Onions.json new file mode 100644 index 0000000000000000000000000000000000000000..1e19d0412899df701393a7621545a684aa2e6299 --- /dev/null +++ b/recipes/Maryellen's Baked Onions.json @@ -0,0 +1 @@ +\L{"title": "Maryellen's Baked Onions", "image": "https://imagesvc.meredithcorp.io/v3/mm/image?url=https%3A%2F%2Fimages.media-allrecipes.com%2Fuserphotos%2F1043160.jpg", "rating": 3.94, "total_time": 0, "ingredients": ["6 Vidalia onions", "\u00bc cup Balsamic Vinegar-60 Grain NAK", "\u00bc cup Honey, strained or extracted", ".183 teaspoon Tarragon-Fresh"], "instructions": ["Preheat oven to 350 degrees F (175 degrees C).", "", "Peel onions and make two cross cuts on the top of the onion. Place in a clay cooker or casserole dish.", "", "Mix together the Balsamic vinegar, honey and tarragon. Pour over onions and marinate for 1 hour.", "", "Bake for 30 to 40 minutes or until onions are tender."]} \ No newline at end of file diff --git a/recipes/Mexican Chicken Patties with Avocado Sour Cream Spread.json b/recipes/Mexican Chicken Patties with Avocado Sour Cream Spread.json new file mode 100644 index 0000000000000000000000000000000000000000..5b0defa1641664f24ccfd86fcb152f053337b4c5 --- /dev/null +++ b/recipes/Mexican Chicken Patties with Avocado Sour Cream Spread.json @@ -0,0 +1 @@ +\L{"title": "mexican chicken patties with avocado sour cream spread", "image": "https://imagesvc.meredithcorp.io/v3/mm/image?url=https%3a%2f%2fimages.media-allrecipes.com%2fuserphotos%2f4530759.jpg", "rating": 4.0, "total_time": 37, "ingredients": ["1 pound ground chicken-chub pack-prep 2.25oz tm", "1 bunch onions, spring or scallions (includes tops and bulb), raw", "2 eaches egg, white, raw, fresh", "1 bunch cilantro, raw", "1 peppers, jalapeno, raw", "1 \u00bd tablespoons cream, sour, cultured", "1 tablespoon chipotle chile pepper, ground", "1 pinch salt, table", "2 cups bread crumbs, dry, grated, plain", "2 teaspoons spices, garlic powder", "1 tablespoon oil, soybean, salad or cooking", "1 avocados, raw, all commercial varieties", "\u00bd cup cream, sour, cultured"], "instructions": ["combine ground chicken, green onions, egg whites, cilantro, jalapenos, 1 1/2 tablespoons sour cream, chipotle pepper, salt, and pepper in large bowl. mix until sticky and difficult to handle.", "", "shape ground chicken mixture into patties. combine bread crumbs, garlic powder, salt, and pepper in a bowl. coat patties lightly with seasoned bread crumbs.", "", "heat oil in a large skillet over medium heat. cook patties until browned, about 2 minutes per side. reduce heat to medium-low. cover and cook until no longer pink in the center and the juices run clear, about 4 minutes per side. an instant-read thermometer inserted into the center should read at least 165 degrees f (74 degrees c).", "", "mash avocado and 1/2 cup sour cream together in a bowl. season with salt and pepper. spread over chicken patties."]} \ No newline at end of file diff --git a/recipes/Moist German Sheet Pan Apple Cake.json b/recipes/Moist German Sheet Pan Apple Cake.json new file mode 100644 index 0000000000000000000000000000000000000000..dc8a3b4f8a5e18bfdaf4f823c84d09ecc5c73b5b --- /dev/null +++ b/recipes/Moist German Sheet Pan Apple Cake.json @@ -0,0 +1 @@ +\L{"title": "moist german sheet pan apple cake", "image": "https://imagesvc.meredithcorp.io/v3/mm/image?url=https%3a%2f%2fimages.media-allrecipes.com%2fuserphotos%2f4579317.jpg", "rating": -1, "total_time": 85, "ingredients": ["\u00be cup sugars, granulated", "2 tablespoons sugars, granulated", "\u00bc cup butter, without salt", "2 teaspoons vanilla sugar", "5 egg, whole, raw, fresh", "\u00bd lemons, raw, with peel", "2 \u00be cups wheat flour, white, all-purpose, enriched, bleached", "3 teaspoons leavening agents, baking powder, double-acting, sodium aluminum sulfate", "2 pounds apples, raw", "3 teaspoons cinnamon sugar", "2 \u00bd cups applesauce, canned, unsweetened, without added ascorbic acid", "1 cup wheat flour, white, all-purpose, enriched, bleached", "2 tablespoons wheat flour, white, all-purpose, enriched, bleached", "\u00bd cup butter, without salt", "\u00bd cup sugars, granulated", "2 tablespoons sugars, granulated", "1 cup almond meal", "2 teaspoons vanilla sugar"], "instructions": ["preheat oven to 400 degrees f (200 degrees c). line a rimmed baking sheet with parchment paper.", "", "combine 3/4 cup plus 2 tablespoons sugar, 1/4 cup butter, and 2 teaspoons vanilla sugar in a large bowl; beat with an electric mixer until smooth and creamy. add eggs one at a time, beating well after each addition. beat in lemon zest with the last egg.", "", "combine 2 3/4 cups flour and baking powder. sift over butter mixture and quickly beat into batter with the electric mixer running on low speed.", "", "combine apple slices, lemon juice, and cinnamon sugar in a bowl and fold into batter. spread batter onto the prepared baking sheet. spoon applesauce onto batter and spread out evenly.", "", "combine 1 cup plus 2 tablespoons flour, 1/2 cup cubed butter, 1/2 cup plus 2 tablespoons sugar, almond meal, and 2 teaspoons vanilla sugar in a bowl and mix into streusel. sprinkle streusel over applesauce.", "", "bake in the preheated oven until streusel is lightly browned and cake is set, about 40 minutes."]} \ No newline at end of file diff --git a/recipes/Mojito Cookies.json b/recipes/Mojito Cookies.json new file mode 100644 index 0000000000000000000000000000000000000000..264954178d73ccff2e543ccb1e2c5120f4575690 --- /dev/null +++ b/recipes/Mojito Cookies.json @@ -0,0 +1 @@ +\L{"title": "mojito cookies", "image": "https://imagesvc.meredithcorp.io/v3/mm/image?url=https%3a%2f%2fimages.media-allrecipes.com%2fuserphotos%2f1032504.jpg", "rating": -1, "total_time": 105, "ingredients": ["1 \u00bd cups sugars, granulated", "1 cup butter, with salt", "3 eaches limes, raw", "2 eaches egg, whole, raw, fresh", "1 teaspoon vanilla extract", "1 teaspoon peppermint extract", "1 teaspoon rum flavored extract", "2 \u00be cups wheat flour, white, all-purpose, enriched, bleached", "1 tablespoon leavening agents, baking powder, double-acting, sodium aluminum sulfate", "1 teaspoon salt, table"], "instructions": ["preheat the oven to 350 degrees f (175 degrees c).", "", "cream sugar, butter, and lime zest together in a medium mixing bowl with an electric mixer until fluffy. add eggs, fully incorporating 1 at a time. mix in vanilla extract, mint extract, and rum extract.", "", "sift flour, baking powder, and salt together in a separate bowl. mix into the egg mixture about 1/3 at a time, making sure flour is fully incorporated before adding the next batch.", "", "let chill in a refrigerator to allow the lime zest to impart greater flavor into the batter, up to 1 hour. remove and allow to return to room temperature, about 20 minutes.", "", "spoon tablespoons of batter onto ungreased baking sheets, leaving about 2 inches between each cookie.", "", "bake in the preheated oven until edges are light golden brown, about 10 minutes, turning halfway through baking time. allow to cool on the cookie sheets."]} \ No newline at end of file diff --git a/recipes/Mussels Moorings Style.json b/recipes/Mussels Moorings Style.json new file mode 100644 index 0000000000000000000000000000000000000000..c112c1d9324a22b1d7777ca9a4567a0564441434 --- /dev/null +++ b/recipes/Mussels Moorings Style.json @@ -0,0 +1 @@ +\L{"title": "mussels moorings style", "image": "https://imagesvc.meredithcorp.io/v3/mm/image?url=https%3a%2f%2fimages.media-allrecipes.com%2fuserphotos%2f1930.jpg", "rating": 4.15, "total_time": 20, "ingredients": ["\u00bd onions, raw", "1 spices, bay leaf, crumbled", "1 clove garlic, raw", "2 tablespoons carrots, raw", "\u2154 cup fish broth/stock", "\u2154 cup alcoholic beverage, wine, table, white", "4 pounds mollusks, mussel, blue, raw", "\u2154 cup cream, fluid, heavy whipping", "1 pinch salt, table"], "instructions": ["in a large saucepan, combine the onion, bay leaf, garlic, carrot, fish stock, and wine. bring to a boil, and cook for about 5 minutes to soften the carrot and onion.", "", "add the mussels to the boiling mixture, cover, and cook over high heat until the mussels open, about 5 minutes. shake the pan occasionally to help them cook evenly.", "", "as soon as the mussels have opened, remove them with a slotted spoon and set aside. remove the bay leaf from the broth, and stir in the heavy cream. heat through, but do not boil. taste, and season with salt and pepper. salt may not be necessary depending on the saltiness of your fish stock.", "", "place mussels into serving dishes, and spoon broth over them to serve."]} \ No newline at end of file diff --git a/recipes/Naan Bread Goat Cheese and Tomato Pizza.json b/recipes/Naan Bread Goat Cheese and Tomato Pizza.json new file mode 100644 index 0000000000000000000000000000000000000000..8212b5146dd3270b1311a2bb7d534cc7a567b35c --- /dev/null +++ b/recipes/Naan Bread Goat Cheese and Tomato Pizza.json @@ -0,0 +1 @@ +\L{"title": "naan bread goat cheese and tomato pizza", "image": "https://imagesvc.meredithcorp.io/v3/mm/image?url=https%3a%2f%2fimages.media-allrecipes.com%2fuserphotos%2f5177341.jpg", "rating": 5.0, "total_time": 26, "ingredients": ["1 naan bread", "2 tablespoons kraft caesar salad dressing kft", "1 tomatoes, red, ripe, raw", "\u00bd teaspoon italian seasoning", "4 slices pork, cured, bacon, cooked, broiled, pan-fried or roasted", "2 tablespoons cheese, goat, semisoft type"], "instructions": ["preheat oven to 375 degrees f (190 degrees c).", "", "place naan bread on a baking sheet. brush naan with caesar salad dressing. spread tomato slices over dressing. sprinkle italian seasoning on top. arrange bacon on top. sprinkle goat cheese over bacon.", "", "bake in the preheated oven until top is bubbling, 10 to 12 minutes. turn on the broiler; broil pizza until goat cheese is lightly browned, 1 to 2 minutes."]} \ No newline at end of file diff --git a/recipes/Navy Bean Soup with Ham.json b/recipes/Navy Bean Soup with Ham.json new file mode 100644 index 0000000000000000000000000000000000000000..a5c240060795ae166e6191566fb4654696806d4f --- /dev/null +++ b/recipes/Navy Bean Soup with Ham.json @@ -0,0 +1 @@ +\L{"title": "navy bean soup with ham", "image": "https://imagesvc.meredithcorp.io/v3/mm/image?url=https%3a%2f%2fimages.media-allrecipes.com%2fuserphotos%2f2396528.jpg", "rating": 4.58, "total_time": 170, "ingredients": ["1 (16 ounce) package beans, navy, mature seeds, raw", "10 sprigs parsley, raw", "2 sprigs spices, thyme, fresh", "1 spices, bay leaf, crumbled", "2 ham hock", "1 carrots, raw", "1 onions, raw", "1 clove garlic, raw", "8 cups water, municipal", "1 pinch morton kosher salt, coarse"], "instructions": ["place navy beans into a large pot and cover with cold water by 2 inches. bring to a boil, reduce heat to low, and simmer for 5 minutes. remove pot from heat, cover, and let stand for 1 hour. drain beans.", "", "use a small piece of kitchen twine to tie parsley and thyme sprigs and bay leaf into a small bundle. place soaked beans, herb bundle, ham hocks, carrot, onion, and garlic into a large soup pot or dutch oven. pour 8 cups cold water over ingredients. bring to a boil, reduce heat to low, and simmer until beans and ham hocks are tender, about 1 1/2 hours.", "", "turn off heat; remove ham hocks and let cool. when they are cool enough to handle, remove meat from the bones, discarding the bones, fat, and skin. chop ham into small cubes. remove and discard herb bundle.", "", "transfer about 3 cups cooked beans along with some cooking liquid into a blender; puree beans. pour pureed beans back into soup, add cooked ham, and bring back to a simmer over medium heat. season with kosher salt and black pepper to taste."]} \ No newline at end of file diff --git a/recipes/New York Rye Bread.json b/recipes/New York Rye Bread.json new file mode 100644 index 0000000000000000000000000000000000000000..6c87c56bd05a861296fe3c453d35dc7d7b63aff1 --- /dev/null +++ b/recipes/New York Rye Bread.json @@ -0,0 +1 @@ +\L{"title": "new york rye bread", "image": "https://imagesvc.meredithcorp.io/v3/mm/image?url=https%3a%2f%2fimages.media-allrecipes.com%2fuserphotos%2f126741.jpg", "rating": 4.16, "total_time": 185, "ingredients": ["1 \u215b cups water, municipal", "1 \u2153 tablespoons oil, vegetable corn, salad or cooking", "2 tablespoons honey, strained or extracted", "1 teaspoon salt, table", "2 \u2154 teaspoons spices, caraway seed", "1 \u2153 cups rye flour, light", "2 \u2153 cups wheat flour, white, bread, enriched", "\u00bc cup vital wheat gluten flour ami", "\u00bc cup milk, dry, nonfat, regular, with added vitamin a", "2 \u00bd teaspoons leavening agents, yeast, baker's, active dry"], "instructions": ["place all ingredients in to your bread machine in the order specified by your machine's manual. set the cycle to basic or white."]} \ No newline at end of file diff --git a/recipes/No-Bake Chocolate Pie.json b/recipes/No-Bake Chocolate Pie.json new file mode 100644 index 0000000000000000000000000000000000000000..aea878d59f4f9f2294e53c728c2c7913c9cdeb31 --- /dev/null +++ b/recipes/No-Bake Chocolate Pie.json @@ -0,0 +1 @@ +\L{"title": "no-bake chocolate pie", "image": "https://imagesvc.meredithcorp.io/v3/mm/image?url=https%3a%2f%2fimages.media-allrecipes.com%2fuserphotos%2f6428770.jpg", "rating": 3.0, "total_time": 500, "ingredients": ["1 \u00bd cups cookies, graham crackers, plain or honey", "\u00bc cup sugars, granulated", "\u00bd cup butter, with salt", "3 cups milk, fluid, 3.25% milkfat", "1 cup sugars, granulated", "2 eaches egg, whole, raw, fresh", "3 tablespoons cornstarch", "\u2153 cup cocoa, dry powder, unsweetened, processed with alkali", "\u215b teaspoon salt, table", "2 teaspoons vanilla extract"], "instructions": ["combine graham cracker crumbs and sugar in a 9-inch glass pie dish. add melted butter and mix together. press mixture firmly across pie dish and up sides. set aside.", "", "combine milk, sugar, eggs, cornstarch, cocoa powder, and salt in a bowl and mix using an electric mixer until well combined. pour into a saucepan and bring to a boil over medium-high heat, stirring constantly. boil for 1 minute. remove from heat and stir in vanilla extract.", "", "pour filling into crust and immediately cover with plastic wrap. cool on counter to room temperature. refrigerate 8 hours to overnight."]} \ No newline at end of file diff --git a/recipes/Pan-Roasted Salmon with Lime Butter and Creamy White Beans.json b/recipes/Pan-Roasted Salmon with Lime Butter and Creamy White Beans.json new file mode 100644 index 0000000000000000000000000000000000000000..2a2e865e428990d81dd0769bf709713065511968 --- /dev/null +++ b/recipes/Pan-Roasted Salmon with Lime Butter and Creamy White Beans.json @@ -0,0 +1 @@ +\L{"title": "pan-roasted salmon with lime butter and creamy white beans", "image": "https://imagesvc.meredithcorp.io/v3/mm/image?url=https%3a%2f%2fimages.media-allrecipes.com%2fuserphotos%2f4532788.jpg", "rating": 4.5, "total_time": 72, "ingredients": ["\u00bd cup butter, with salt", "1 limes, raw", "1 clove garlic, raw", "\u00bd teaspoon sea salt, gray", "4 (4 ounce) farmed atlantic salmon", "1 pinch salt, table", "1 tablespoon oil, olive, salad or cooking", "1 shallots, raw", "2 (15 ounce) cans beans, white, mature seeds, canned", "\u00bd cup cream, fluid, heavy whipping", "3 tablespoons chives, raw", "3 tablespoons mint leaves-raw", "3 tablespoons basil, fresh", "3 tablespoons parsley, raw", "3 tablespoons tarragon-fresh"], "instructions": ["mix butter, lime zest, lime juice, garlic, and salt together in a bowl. spoon butter onto a large piece of plastic wrap; roll up into a log. refrigerate until firm, 30 minutes to 1 hour.", "", "season salmon with salt and pepper.", "", "heat 2 tablespoons lime butter and olive oil in a cast iron skillet set over a camping stove. cook salmon fillets, skin-side down, until crisp, about 3 minutes. flip and cook until easily flaked with a fork, 1 to 2 minutes more. transfer salmon fillets to a plate; top each fillet with 1 tablespoon lime butter.", "", "heat 1 teaspoon lime butter in the skillet. cook and stir shallot in the hot butter until softened, about 3 minutes. stir in white beans and heavy cream; season with salt and pepper. simmer until slightly thickened, 5 to 10 minutes. remove from heat and stir in chives, mint, basil, parsley, and tarragon.", "", "divide bean mixture among 4 serving plates; place 1 salmon fillet on top."]} \ No newline at end of file diff --git a/recipes/Pasta Fruit Salad I.json b/recipes/Pasta Fruit Salad I.json new file mode 100644 index 0000000000000000000000000000000000000000..6974d67102a1254cf48bc7fa08ca29ac508d1a3c --- /dev/null +++ b/recipes/Pasta Fruit Salad I.json @@ -0,0 +1 @@ +\L{"title": "pasta fruit salad i", "image": "https://imagesvc.meredithcorp.io/v3/mm/image?url=https%3a%2f%2fwww.allrecipes.com%2fimg%2fmisc%2fog-default.png", "rating": 1.0, "total_time": 30, "ingredients": ["1 pound gldn grn rotelle semolina pasta-dry-cup qk", "1 (15 ounce) can tangerines, (mandarin oranges), canned, juice pack", "1 (20 ounce) can pineapple, canned, juice pack, solids and liquids", "\u00bc cup onions, spring or scallions (includes tops and bulb), raw", "1 cup ham, chopped, not canned", "\u00bd cup kraft miracle whip dressing"], "instructions": ["in a large pot of salted boiling water, cook pasta until al dente, rinse under cold water and drain.", "", "in a salad bowl, combine the pasta, oranges, pineapple, green onions, ham and creamy salad dressing. mix well and chill before serving."]} \ No newline at end of file diff --git a/recipes/Patholi.json b/recipes/Patholi.json new file mode 100644 index 0000000000000000000000000000000000000000..320cd76c154ae3f6c81f4fab991b94b28117fb0e --- /dev/null +++ b/recipes/Patholi.json @@ -0,0 +1 @@ +\L{"title": "patholi", "image": "https://imagesvc.meredithcorp.io/v3/mm/image?url=https%3a%2f%2fwww.allrecipes.com%2fimg%2fmisc%2fog-default.png", "rating": 3.0, "total_time": 285, "ingredients": ["1 cup chana dal [chana dahl]", "\u00bc cup water, municipal", "3 eaches peppers, hot chili, green, raw", "1 pinch salt, table", "\u00bc cup oil, soybean, salad or cooking", "1 teaspoon black gram/urad dahl beans -raw", "1 teaspoon spices, mustard seed, yellow", "1 teaspoon spices, cumin seed", "4 peppers, hot chile, sun-dried", "2 sprigs curry leaves-fresh", "1 pinch asafoetida powder", "1 cup onions, raw", "2 cups cilantro, raw", "\u00bd teaspoon spices, pepper, red or cayenne"], "instructions": ["place the chana dal into a large container and cover with several inches of cool water; let soak 4 to 6 hours. drain and rinse.", "", "combine the chana dal, green chile peppers, and salt in a large bowl; mash into a thick and coarse paste. add water as needed to help mash, but use as little as possible.", "", "heat the oil in a large non-stick skillet. cook the urad dal, mustard seeds, cumin seeds, dried red chile peppers, curry leaves, and asafoetida powder in the hot oil until the seeds begin to splutter, 2 to 3 minutes. add the onion and cook until golden brown, about 5 minutes. stir the chana dal paste into the mixture; cook and stir until the dal is cooked through and tender, about 20 minutes. sprinkle the cilantro and cayenne pepper over the mixture and stir. cook another 5 minutes."]} \ No newline at end of file diff --git a/recipes/Pomegranate Chicken.json b/recipes/Pomegranate Chicken.json new file mode 100644 index 0000000000000000000000000000000000000000..b7f1f496fc2051b1c31aab79527646a75829aea7 --- /dev/null +++ b/recipes/Pomegranate Chicken.json @@ -0,0 +1 @@ +\L{"title": "pomegranate chicken", "image": "https://imagesvc.meredithcorp.io/v3/mm/image?url=https%3a%2f%2fimages.media-allrecipes.com%2fuserphotos%2f4502128.jpg", "rating": 4.33, "total_time": 100, "ingredients": ["2 cups pomegranate juice", "\u00bc cup sugars, brown", "1 tablespoon vinegar, cider", "2 cloves garlic, raw", "1 tablespoon lime juice, raw", "1 limes, raw", "1 (4 pound) whole chicken, bone in", "\u00bd small onions, raw", "1 \u00bc teaspoons salt, table", "1 spices, bay leaf, crumbled", "\u00bd teaspoon spices, pepper, black", "\u00bd teaspoon spices, rosemary, dried"], "instructions": ["preheat oven to 400 degrees f (200 degrees c).", "", "stir pomegranate juice, brown sugar, vinegar, and garlic together in a saucepan. bring to a boil over medium-high heat. cook, stirring occasionally, until mixture is reduced to 3/4 cup, about 10 minutes. remove from heat and discard garlic, then stir in lime juice and let cool 5 minutes. set aside 6 tablespoons pomegranate syrup.", "", "poke several holes in lime with a fork and insert into chicken cavity along with onion, 1/2 teaspoon salt, bay leaf, pepper, and rosemary. tie legs together with kitchen string, sprinkle skin with remaining 3/4 teaspoon salt, then transfer chicken, breast side up, to a roasting pan.", "", "roast chicken, basting with pomegranate syrup every 20 minutes, until an instant-read thermometer inserted into thickest parts of all pieces registers 165 degrees f, about 1 hour total. let chicken rest 10 minutes before carving. serve drizzled with reserved pomegranate syrup."]} \ No newline at end of file diff --git a/recipes/Quick and Easy Pulled Pork Burritos.json b/recipes/Quick and Easy Pulled Pork Burritos.json new file mode 100644 index 0000000000000000000000000000000000000000..08755a214dd9d688d1566cd8a3d123af6fa7201e --- /dev/null +++ b/recipes/Quick and Easy Pulled Pork Burritos.json @@ -0,0 +1 @@ +\L{"title": "quick and easy pulled pork burritos", "image": "https://imagesvc.meredithcorp.io/v3/mm/image?url=https%3a%2f%2fwww.allrecipes.com%2fimg%2fmisc%2fog-default.png", "rating": 4.0, "total_time": 25, "ingredients": ["1 (16 ounce) can beans, baked, canned, plain or vegetarian", "8 (10 inch) flour tortilla (10 inch)", "1 small onions, raw", "1 pound pulled pork, fully cooked without sauce", "1 (8 ounce) package cheese, monterey", "1 (16 ounce) can enchilada sauce, ready-to-serve"], "instructions": ["pour beans into a pot and bring to a simmer over medium-low heat.", "", "place a tortilla on a microwave-safe plate, sprinkle with onion, 2 tablespoons beans, and 2 to 3 tablespoons pulled pork. sprinkle with monterey jack cheese, and roll the tortilla closed. drizzle over 2 tablespoons of enchilada sauce, and sprinkle with more cheese.", "", "microwave until heated through and cheese is melted, about 1 minute. repeat with remaining tortillas and filling ingredients."]} \ No newline at end of file diff --git a/recipes/Recipe.schema.json b/recipes/Recipe.schema.json index 441a2fe9adcc3d3a6537d7c53c05c379084e58ed..8cd809dd85f62c9eeafabe6ec691691e33180a52 100755 --- a/recipes/Recipe.schema.json +++ b/recipes/Recipe.schema.json @@ -1,125 +1,125 @@ -{ - "$schema": "http://json-schema.org/draft-04/schema#", - "type": "object", - "properties": { - "Name": { - "type": "string" - }, - "Ingredients": { - "type": "array", - "items": [ - { - "type": "string" - }, - { - "type": "string" - }, - { - "type": "string" - }, - { - "type": "string" - }, - { - "type": "string" - }, - { - "type": "string" - }, - { - "type": "string" - }, - { - "type": "string" - }, - { - "type": "string" - }, - { - "type": "string" - }, - { - "type": "string" - } - ] - }, - "Steps": { - "type": "array", - "items": [ - { - "type": "string" - }, - { - "type": "string" - }, - { - "type": "string" - }, - { - "type": "string" - } - ] - }, - "Yield": { - "type": "string" - }, - "Difficulty": { - "type": "string" - }, - "Preparation": { - "type": "string" - }, - "Cook": { - "type": "string" - }, - "Nutrition": { - "type": "object", - "properties": { - "Kcal": { - "type": "string" - }, - "Fat": { - "type": "string" - }, - "Saturates": { - "type": "string" - }, - "Carbs": { - "type": "string" - }, - "Sugars": { - "type": "string" - }, - "Fibre": { - "type": "string" - }, - "Protein": { - "type": "string" - }, - "Salt": { - "type": "string" - } - }, - "required": [ - "Kcal", - "Fat", - "Saturates", - "Carbs", - "Sugars", - "Fibre", - "Protein", - "Salt" - ] - } - }, - "required": [ - "Name", - "Ingredients", - "Steps", - "Yield", - "Difficulty", - "Preparation", - "Cook", - "Nutrition" - ] -} +\L{ +\L "$schema": "http://json-schema.org/draft-04/schema#", +\L "type": "object", +\L "properties": { +\L "name": { +\L "type": "string" +\L }, +\L "ingredients": { +\L "type": "array", +\L "items": [ +\L { +\L "type": "string" +\L }, +\L { +\L "type": "string" +\L }, +\L { +\L "type": "string" +\L }, +\L { +\L "type": "string" +\L }, +\L { +\L "type": "string" +\L }, +\L { +\L "type": "string" +\L }, +\L { +\L "type": "string" +\L }, +\L { +\L "type": "string" +\L }, +\L { +\L "type": "string" +\L }, +\L { +\L "type": "string" +\L }, +\L { +\L "type": "string" +\L } +\L ] +\L }, +\L "steps": { +\L "type": "array", +\L "items": [ +\L { +\L "type": "string" +\L }, +\L { +\L "type": "string" +\L }, +\L { +\L "type": "string" +\L }, +\L { +\L "type": "string" +\L } +\L ] +\L }, +\L "yield": { +\L "type": "string" +\L }, +\L "difficulty": { +\L "type": "string" +\L }, +\L "preparation": { +\L "type": "string" +\L }, +\L "cook": { +\L "type": "string" +\L }, +\L "nutrition": { +\L "type": "object", +\L "properties": { +\L "kcal": { +\L "type": "string" +\L }, +\L "fat": { +\L "type": "string" +\L }, +\L "saturates": { +\L "type": "string" +\L }, +\L "carbs": { +\L "type": "string" +\L }, +\L "sugars": { +\L "type": "string" +\L }, +\L "fibre": { +\L "type": "string" +\L }, +\L "protein": { +\L "type": "string" +\L }, +\L "salt": { +\L "type": "string" +\L } +\L }, +\L "required": [ +\L "kcal", +\L "fat", +\L "saturates", +\L "carbs", +\L "sugars", +\L "fibre", +\L "protein", +\L "salt" +\L ] +\L } +\L }, +\L "required": [ +\L "name", +\L "ingredients", +\L "steps", +\L "yield", +\L "difficulty", +\L "preparation", +\L "cook", +\L "nutrition" +\L ] +\L} diff --git a/recipes/Simple Butternut Squash Casserole.json b/recipes/Simple Butternut Squash Casserole.json new file mode 100644 index 0000000000000000000000000000000000000000..e7efc30abfd795b3696c17bd57a68f8848469024 --- /dev/null +++ b/recipes/Simple Butternut Squash Casserole.json @@ -0,0 +1 @@ +\L{"title": "simple butternut squash casserole", "image": "https://imagesvc.meredithcorp.io/v3/mm/image?url=https%3a%2f%2fwww.allrecipes.com%2fimg%2fmisc%2fog-default.png", "rating": -1, "total_time": 55, "ingredients": ["2 cups squash, winter, butternut, raw", "1 large carrots, raw", "\u00bd onions, raw", "1 \u00bd cups cream, sour, cultured", "1 (10.75 ounce) can soup, cream of celery, canned, condensed, commercial", "1 (10.75 ounce) can soup, cream of chicken, canned, condensed, commercial", "1 (12 ounce) package bread stuffing, bread, dry mix", "\u00bd cup butter, with salt"], "instructions": ["preheat the oven to 350 degrees f (175 degrees c). place a steamer insert into a saucepan and fill with water to just below the bottom of the steamer. bring water to a boil. add butternut squash, cover, and steam until tender, 8 to 10 minutes. transfer squash to a large bowl.", "", "add carrot, onion, sour cream, cream of celery soup, and cream of chicken soup to the squash. mix well. spread evenly in a 9x13-inch pan.", "", "place stuffing mix in a separate bowl and pour melted butter on top, tossing to coat evenly. spread on top of vegetable mixture in the pan.", "", "bake in the preheated oven, uncovered, until bubbling and golden brown on top, about 20 minutes."]} \ No newline at end of file diff --git a/recipes/Slow Cooker Spicy Sausage and Sweet Potato Soup.json b/recipes/Slow Cooker Spicy Sausage and Sweet Potato Soup.json new file mode 100644 index 0000000000000000000000000000000000000000..8c04bb454194d44d6ca6762b46f255ba7de518d3 --- /dev/null +++ b/recipes/Slow Cooker Spicy Sausage and Sweet Potato Soup.json @@ -0,0 +1 @@ +\L{"title": "slow cooker spicy sausage and sweet potato soup", "image": "https://imagesvc.meredithcorp.io/v3/mm/image?url=https%3a%2f%2fwww.allrecipes.com%2fimg%2fmisc%2fog-default.png", "rating": -1, "total_time": 325, "ingredients": ["3 eaches italian sausage, raw, pork", "2 eaches italian sausage, raw, pork, hot", "3 (14 ounce) cans rts low sodium chicken broth cam", "4 small sweetpotato, raw", "3 tablespoons *cloned* lawry's\u00ae caribbean jerk marinade with papaya juice", "2 cloves garlic, raw", "\u00bd teaspoon spices, thyme, dried", "1 pinch spices, cinnamon, ground", "1 (15 ounce) can beans, black turtle soup, mature seeds, canned"], "instructions": ["slice sausage links into 1/2-inch chunks. cook sausages in a skillet over high heat until browned but not cooked through, 3 to 5 minutes. remove and pat dry with paper towels to remove excess fat. transfer to a slow cooker and add chicken broth, sweet potatoes, jerk marinade, garlic, thyme, and cinnamon.", "", "cook on high for 3 hours. add black beans, reduce heat to low, and cook for an additional 2 hours."]} \ No newline at end of file diff --git a/recipes/Spiced Butternut Squash Muffins.json b/recipes/Spiced Butternut Squash Muffins.json new file mode 100644 index 0000000000000000000000000000000000000000..fa022ba9a3061670c43212b05ab93c01a73dd2a6 --- /dev/null +++ b/recipes/Spiced Butternut Squash Muffins.json @@ -0,0 +1 @@ +\L{"title": "spiced butternut squash muffins", "image": "https://imagesvc.meredithcorp.io/v3/mm/image?url=https%3a%2f%2fimages.media-allrecipes.com%2fuserphotos%2f6389168.jpg", "rating": 3.98, "total_time": 70, "ingredients": ["\u00bd pound squash, winter, butternut, raw", "1 \u00bd cups wheat flour, white, all-purpose, enriched, bleached", "2 teaspoons baking powder", "\u00bd cup sugars, granulated", "\u00bc teaspoon salt, table", "2 teaspoons spices, pumpkin pie spice", "\u00be cup milk, reduced fat, fluid, 2% milkfat, with added vitamin a", "1 egg, whole, raw, fresh", "1 tablespoon butter, with salt"], "instructions": ["preheat oven to 400 degrees f (200 degrees c). lightly grease a 12 cup muffin pan.", "", "in a medium saucepan with enough water to cover, boil squash 20 minutes, or until tender. remove from heat, drain, and puree in a food processor.", "", "in a large bowl, whisk together flour, baking powder, white sugar, salt and pumpkin pie spice.", "", "in a medium bowl, thoroughly mix together milk, egg and butter. stir in squash. fold the squash mixture into the flour mixture just until moistened.", "", "spoon the batter into the prepared muffin pan, filling cups about 1/2 full. bake 20 minutes in the preheated oven, or until a toothpick inserted in the center of a muffin comes out clean. remove from muffin pan and cool on a wire rack."]} \ No newline at end of file diff --git a/recipes/Spinach and Feta Turkey Burgers.json b/recipes/Spinach and Feta Turkey Burgers.json new file mode 100644 index 0000000000000000000000000000000000000000..e0c03270e5b22a9369fe16ba68e6600ed41875a6 --- /dev/null +++ b/recipes/Spinach and Feta Turkey Burgers.json @@ -0,0 +1 @@ +\L{"title": "spinach and feta turkey burgers", "image": "https://images.media-allrecipes.com/userphotos/560x315/1360550.jpg", "rating": 4.57, "total_time": 35, "ingredients": ["2 eggs, beaten", "2 cloves garlic, minced", "4 ounces feta cheese", "1 (10 ounce) box frozen chopped spinach, thawed and squeezed dry", "2 pounds ground turkey"], "instructions": ["preheat an outdoor grill for medium-high heat and lightly oil grate.", "while the grill is preheating, mix together eggs, garlic, feta cheese, spinach, and turkey in a large bowl until well combined; form into 8 patties.", "cook on preheated grill until no longer pink in the center, 15 to 20 minutes."]} \ No newline at end of file diff --git a/recipes/Strawberry Brown Sugar Sour Cream Pie.json b/recipes/Strawberry Brown Sugar Sour Cream Pie.json new file mode 100644 index 0000000000000000000000000000000000000000..a2c5d57c756c7600860b81fec2ddc600a9c8ab2c --- /dev/null +++ b/recipes/Strawberry Brown Sugar Sour Cream Pie.json @@ -0,0 +1 @@ +\L{"title": "strawberry brown sugar sour cream pie", "image": "https://imagesvc.meredithcorp.io/v3/mm/image?url=https%3a%2f%2fimages.media-allrecipes.com%2fuserphotos%2f5601823.jpg", "rating": 4.4, "total_time": 90, "ingredients": ["1 egg, whole, raw, fresh", "\u00be cup sugars, brown", "\u00be cup sugars, granulated", "\u00be cup cream, sour, cultured", "\u00bc cup wheat flour, whole-grain", "3 cups strawberries, raw", "1 pie crust, standard-type, prepared from recipe, unbaked", "\u2153 cup sugars, brown", "\u2153 cup wheat flour, whole-grain", "3 tablespoons butter, with salt"], "instructions": ["preheat an oven to 450 degrees f (230 degrees c).", "", "combine the egg, 3/4 cup brown sugar, white sugar, sour cream, and 1/4 cup wheat flour in a bowl. place the strawberry slices in the pie crust, and spoon the sour cream mixture over the berries.", "", "in another bowl, stir together 1/3 cup brown sugar and 1/3 cup flour. pour in the melted butter, and stir until mixture resembles course meal. sprinkle this mixture over sour cream mixture and berries in the pie shell.", "", "place pie on lowest rack in preheated oven. bake for 15 minutes, then reduce oven temperature to 350 degrees f (175 degrees c). bake for 45 minutes longer. remove from the oven, and let it cool completely (yes, overnight works best)."]} \ No newline at end of file diff --git a/recipes/Summer Nectarine, Tomato, and Cucumber Salad.json b/recipes/Summer Nectarine, Tomato, and Cucumber Salad.json new file mode 100644 index 0000000000000000000000000000000000000000..5c530550a3270c338e68d99d3bb6843d8584f72d --- /dev/null +++ b/recipes/Summer Nectarine, Tomato, and Cucumber Salad.json @@ -0,0 +1 @@ +\L{"title": "summer nectarine, tomato, and cucumber salad", "image": "https://imagesvc.meredithcorp.io/v3/mm/image?url=https%3a%2f%2fwww.allrecipes.com%2fimg%2fmisc%2fog-default.png", "rating": -1, "total_time": 20, "ingredients": ["2 eaches tomatoes, red, ripe, raw", "\u00bd cucumber, peeled, raw", "1 large nectarines, raw", "3 tablespoons cilantro, raw", "1 tablespoon oil, olive, salad or cooking", "3 tablespoons cheese, goat, semisoft type"], "instructions": ["mix tomatoes, cucumber, nectarine, and cilantro together in a bowl. stir in olive oil gently. sprinkle goat cheese over salad."]} \ No newline at end of file diff --git a/recipes/Trinidad Black Cake.json b/recipes/Trinidad Black Cake.json new file mode 100644 index 0000000000000000000000000000000000000000..731bc58fac17c77fc47376b7dff7e40c1755e69c --- /dev/null +++ b/recipes/Trinidad Black Cake.json @@ -0,0 +1 @@ +\L{"title": "trinidad black cake", "image": "https://imagesvc.meredithcorp.io/v3/mm/image?url=https%3a%2f%2fwww.allrecipes.com%2fimg%2fmisc%2fog-default.png", "rating": -1, "total_time": 650, "ingredients": ["3 cups raisins, seedless", "2 cups currants, zante, dried", "1 cup prunes, dried, uncooked", "\u2154 cup candied mixed fruit peel", "1 \u00bc cups cherry brandy liqueur", "\u00bd cup sugars, brown", "6 tablespoons dark rum", "1 teaspoon mixed spice", "2 cups butter, with salt", "1 \u00be cups sugars, brown", "10 egg, whole, raw, fresh", "4 cups wheat flour, white, all-purpose, self-rising, enriched", "1 teaspoon vanilla extract"], "instructions": ["place raisins, currants, prunes, and mixed peel in a food processor; process until finely chopped. transfer to a large jar.", "", "pour cherry brandy, 1/2 cup brown sugar, dark rum, and mixed spice into the jar; mix well and seal. refrigerate, stirring occasionally, until flavors blend, 2 weeks to 3 months.", "", "preheat oven to 325 degrees f (165 degrees c). grease and line two 9-inch cake pans with parchment paper.", "", "combine butter and 1 3/4 cup brown sugar in a bowl; beat with an electric mixer until smooth and creamy. beat in eggs until smooth. beat in raisin mixture until evenly incorporated. fold in flour and vanilla extract gradually until batter is smooth and falls off the back of a lifted spoon.", "", "divide batter between the prepared cake pans. cover cake pans loosely with aluminum foil.", "", "bake in the preheated oven until cakes are firm and spring back when lightly pressed, about 2 1/2 hours.", "", "cool cakes in the pans, 8 hours to overnight. wrap in aluminum foil to keep moist."]} \ No newline at end of file diff --git a/recipes/Ultimate Turkey Brine.json b/recipes/Ultimate Turkey Brine.json new file mode 100644 index 0000000000000000000000000000000000000000..49e0439294b89d45739da738bfa36051ecea2037 --- /dev/null +++ b/recipes/Ultimate Turkey Brine.json @@ -0,0 +1 @@ +\L{"title": "ultimate turkey brine", "image": "https://imagesvc.meredithcorp.io/v3/mm/image?url=https%3a%2f%2fimages.media-allrecipes.com%2fuserphotos%2f4207012.jpg", "rating": 4.71, "total_time": 145, "ingredients": ["1 gallon water, municipal", "2 cups morton kosher salt, coarse", "1 \u00bd cups sugars, brown", "12 eaches whole cloves", "3 eaches spices, bay leaf, crumbled", "1 tablespoon whole black peppercorns", "2 \u00bd teaspoons spices, rosemary, dried", "2 \u00bd teaspoons spices, thyme, dried"], "instructions": ["bring water to a boil in a large stockpot. stir salt and sugar into the water until dissolved; bring water again to a boil. add cloves, bay leaves, peppercorns, rosemary, and thyme to the water, reduce heat to medium-low, and cook mixture at a simmer for about 20 minutes.", "", "refrigerate brine until completely cooled."]} \ No newline at end of file diff --git a/recipes/Uruguayan Guiso.json b/recipes/Uruguayan Guiso.json new file mode 100644 index 0000000000000000000000000000000000000000..3cfcba1ea66d15454673a34a1b0b9750bbe5e700 --- /dev/null +++ b/recipes/Uruguayan Guiso.json @@ -0,0 +1 @@ +\L{"title": "uruguayan guiso", "image": "https://imagesvc.meredithcorp.io/v3/mm/image?url=https%3a%2f%2fwww.allrecipes.com%2fimg%2fmisc%2fog-default.png", "rating": -1, "total_time": 115, "ingredients": ["3 links chorizo, pork and beef", "2 tablespoons oil, olive, salad or cooking", "1 \u00bd pounds beef, chuck, blade roast, separable lean and fat, trimmed to 1/4\" fat, all grades, raw", "1 onions, raw", "1 leeks, raw", "4 cloves garlic, raw", "2 cups squash, winter, butternut, raw", "2 eaches potatoes, raw", "2 eaches carrots, raw", "3 cups water, municipal", "1 (8 ounce) can tomato products, canned, sauce", "1 cube vegetable bouillon", "1 tablespoon spices, oregano, ground", "1 teaspoon cumin, ground", "1 pinch salt, table", "2 cups ditalini pasta, dry", "1 cup peas, green, frozen, unprepared", "1 cup lentils, mature seeds, cooked, boiled, without salt", "\u00bd cup parsley, raw"], "instructions": ["place chorizo in a large skillet over medium heat. cook, turning occasionally and pricking each link with a fork to release some of the fat, until browned, 4 to 5 minutes. remove sausages and slice when cool enough to handle. set aside.", "", "heat oil in a large pot over high heat. add beef and cook until browned, 3 to 4 minutes. add reserved sausage slices, onion, leek, and garlic and saute until onion is translucent, about 3 minutes. reduce heat to medium-low and stir in butternut squash, potatoes, and carrots. add water and tomato sauce. if vegetables are not covered with liquid, add more water to cover.", "", "add bouillon cube, oregano, cumin, salt, and pepper and bring to boil. reduce heat to low and cook, stirring occasionally, until stew thickens up, about 1 hour. add pasta, peas, lentils, and parsley. cook until pasta is tender yet firm to the bite, 8 to 10 minutes. you may need to add more water at this point, since the pasta will absorb liquid and the stew may become too dry."]} \ No newline at end of file diff --git a/recipes/easy.json b/recipes/easy.json index 1d473f79cefa0512c6ad8739c0c607f500e75921..cb8bf3170db1e6c66fb361c75589e54382ed42d2 100755 --- a/recipes/easy.json +++ b/recipes/easy.json @@ -1 +1 @@ -"heat the oven to 320 celsius." +\L"heat the oven to 320 celsius." diff --git a/recipes/vegancupcakes.json b/recipes/vegancupcakes.json index 20e26a49d678cc4ef35d65ed29ccafea858622c7..64041810522da5586f6e1f50a06f6fb99230224a 100755 --- a/recipes/vegancupcakes.json +++ b/recipes/vegancupcakes.json @@ -1,36 +1,36 @@ -{ - "Cook": "20 mins", - "Difficulty": "Easy", - "Ingredients": [ - "150 ml almond or soy milk", - "1/2 tsp cider vinegar", - "110 g vegan butter or sunflower spread", - "110 g caster sugar", - "1 tsp vanilla extract", - "110 g self-raising flour", - "1/2 tsp baking powder", - "125 g vegan butter", - "250 g icing sugar", - "1/4 tsp vanilla extract", - "a few drops of vegan food colourings (check the label)" - ], - "Name": "Vegan cupcakes", - "Nutrition": { - "Carbs": "", - "Fat": "12g", - "Fibre": "0.4g", - "Kcal": "265", - "Protein": "1g", - "Salt": "0.28g", - "Saturates": "3g", - "Sugars": "30g" - }, - "Preparation": "30 mins", - "Steps": [ - "Heat the oven to 180C/160C fan/gas 4. Line the holes of a 12-hole cupcake tin with paper cases. Stir the milk and vinegar in a jug and leave to thicken slightly for a few mins.", - "Beat the butter and sugar with an electric whisk until well combined. Whisk in the vanilla, then add the milk a splash at a time, alternating with spoonfuls of the flour. Fold in any remaining flour, the baking powder and a pinch of salt until you get a creamy batter. Don\u2019t worry if it looks a little curdled at this stage.", - "Divide between the cupcake cases, filling them two-thirds\u00a0full, and bake for 20 - 25 mins until\u00a0golden and risen. Leave to cool on a wire rack.", - "To make the buttercream, beat the butter, icing sugar and vanilla with an electric whisk until pale and creamy. Divide between bowls and colour with different food colourings until you get desired strength. Spoon or pipe onto the cooled cupcakes." - ], - "Yield": "Makes 12" -} +\L{ +\L "cook": "20 mins", +\L "difficulty": "easy", +\L "ingredients": [ +\L "150 ml almond or soy milk", +\L "1/2 tsp cider vinegar", +\L "110 g vegan butter or sunflower spread", +\L "110 g caster sugar", +\L "1 tsp vanilla extract", +\L "110 g self-raising flour", +\L "1/2 tsp baking powder", +\L "125 g vegan butter", +\L "250 g icing sugar", +\L "1/4 tsp vanilla extract", +\L "a few drops of vegan food colourings (check the label)" +\L ], +\L "name": "vegan cupcakes", +\L "nutrition": { +\L "carbs": "", +\L "fat": "12g", +\L "fibre": "0.4g", +\L "kcal": "265", +\L "protein": "1g", +\L "salt": "0.28g", +\L "saturates": "3g", +\L "sugars": "30g" +\L }, +\L "preparation": "30 mins", +\L "steps": [ +\L "heat the oven to 180c/160c fan/gas 4. line the holes of a 12-hole cupcake tin with paper cases. stir the milk and vinegar in a jug and leave to thicken slightly for a few mins.", +\L "beat the butter and sugar with an electric whisk until well combined. whisk in the vanilla, then add the milk a splash at a time, alternating with spoonfuls of the flour. fold in any remaining flour, the baking powder and a pinch of salt until you get a creamy batter. don\u2019t worry if it looks a little curdled at this stage.", +\L "divide between the cupcake cases, filling them two-thirds\u00a0full, and bake for 20 - 25 mins until\u00a0golden and risen. leave to cool on a wire rack.", +\L "to make the buttercream, beat the butter, icing sugar and vanilla with an electric whisk until pale and creamy. divide between bowls and colour with different food colourings until you get desired strength. spoon or pipe onto the cooled cupcakes." +\L ], +\L "yield": "makes 12" +\L} diff --git a/scraper.py b/scrape.py similarity index 82% rename from scraper.py rename to scrape.py index 393c6ed94562730fefd187fc588290c9d6ce9baf..0cab414ed9ff01a54b7d80ec83615d64d41fafa1 100755 --- a/scraper.py +++ b/scrape.py @@ -5,7 +5,6 @@ from bs4 import BeautifulSoup import json def scrapeIngredients(): - urls = ["https://www.bbc.co.uk/food/ingredients/a-z/a/1", "https://www.bbc.co.uk/food/ingredients/a-z/a/2", "https://www.bbc.co.uk/food/ingredients/a-z/b/1", @@ -121,14 +120,42 @@ websites = [ "http://whatsgabycooking.com/", "http://yummly.com/" ] +def createRecipeList(sitemap): + """ + Generate a list of recipes from a webpage's sitemap + """ + urls = [] + soup = BeautifulSoup(requests.get(sitemap).text, 'html.parser') + for url in soup.find_all("url"): + for loc in url.findChildren("loc"): + if "recipes" in loc.text: + urls.append(loc.text) + return urls + +urls = [] +for website in [ + "https://allrecipes.com/sitemaps/recipe/1/sitemap.xml", + "https://bbc.co.uk/food/sitemap.xml", + "https://bbcgoodfood.com/sitemap.xml", + "https://greatbritishchefs.com/sitemap.xml" + ]: + for i in createRecipeList(website): + recipe = scrape_me(i) + filename = recipe.title() + jsonrecipe = json.loads(json.dumps({ + "title": recipe.title(), + "image": recipe.image(), + "rating": recipe.ratings(), + "total_time": recipe.total_time(), + "ingredients": recipe.ingredients(), + "instructions": recipe.instructions().splitlines()})) + with open("recipes/" + filename + ".json", "w") as filename: + json.dump(jsonrecipe, filename) +def buildRecipeList(): + for website in websites: + urlList(website) urlList("https://bbc.co.uk/food/ingredients") scrapeIngredients() -scrapeUtensils() - -for website in websites: - for url in urlList(website): - #with open file as # json pickle - print(scrape_me(url).title()) diff --git a/terminals/Adjective.lark b/terminals/Adjective.lark deleted file mode 100755 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/terminals/Article.lark b/terminals/Article.lark deleted file mode 100755 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/terminals/Conjunction.lark b/terminals/Conjunction.lark deleted file mode 100755 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/terminals/Ingredients.lark b/terminals/Ingredients.lark deleted file mode 100755 index 38ce3f88972c7c10025404e55ee2b4debe3b3cb1..0000000000000000000000000000000000000000 --- a/terminals/Ingredients.lark +++ /dev/null @@ -1 +0,0 @@ -INGREDIENT = ("acidulated water" | "ackee" | "acorn squash" | "advocaat" | "agar-agar" | "ajwain" | "ale" | "aleppo pepper" | "alfalfa sprouts" | "allspice" | "almond" | "almond essence" | "almond extract" | "almond milk" | "amaranth" | "amaretti" | "amchoor" | "anchovies" | "anchovy essence" | "angelica" | "angostura bitters" | "anise" | "apple" | "apple chutney" | "apple juice" | "apple sauce" | "apricot" | "apricot jam" | "aquafaba" | "arborio rice" | "arbroath smokie" | "argan oil" | "arrowroot" | "artichoke" | "asafoetida" | "asparagus" | "aubergine" | "avocado" | "bacon" | "baguette" | "baked beans" | "baking" | "baking powder" | "balsamic vinegar" | "bamboo shoots" | "banana" | "barbecue sauce" | "barley" | "basil" | "basmati rice" | "bay leaf" | "beans" | "beansprouts" | "b\u00e9chamel sauce" | "beef" | "beef consomm\u00e9" | "beef dripping" | "beef mince" | "beef ribs" | "beef rump" | "beef sausage" | "beef stock" | "beef tomato" | "beer" | "beetroot" | "berry" | "best end of lamb" | "beurre mani\u00e9" | "bicarbonate of soda" | "bird's-eye chillies" | "biscotti" | "biscuits" | "blachan" | "black bean" | "black bean sauce" | "black cardamom" | "black eyed beans" | "black pepper" | "black pudding" | "black sesame seeds" | "blackberry" | "blackcurrant" | "blackcurrant juice drink" | "blini" | "blood orange" | "blueberry" | "boar" | "bok choi" | "bone marrow" | "bonito" | "borage" | "borlotti beans" | "bouquet garni" | "braising steak" | "bramley apple" | "bran" | "brandy" | "brandy butter" | "brandy snaps" | "bratwurst" | "brazil nut" | "bread" | "bread roll" | "bread sauce" | "breadcrumbs" | "breadfruit" | "bresaola" | "brie" | "brill" | "brioche" | "brisket" | "broad beans" | "broccoli" | "brown bread" | "brown lentil" | "brown rice" | "brown sauce" | "brown shrimp" | "brown sugar" | "brussels sprouts" | "buckwheat" | "buckwheat flour" | "bulgur wheat" | "buns" | "burger" | "butter" | "butter beans" | "buttercream icing" | "butterhead lettuce" | "buttermilk" | "butternut squash" | "cabbage" | "caerphilly" | "cake" | "calasparra rice" | "calvados" | "camembert" | "candied peel" | "cannellini beans" | "cape gooseberries" | "capers" | "capsicum" | "caramel" | "caraway seeds" | "cardamom" | "carob" | "carrot" | "cashew" | "cassava" | "cassia bark" | "caster sugar" | "cauliflower" | "caviar" | "cavolo nero" | "cayenne pepper" | "celeriac" | "celery" | "celery seeds" | "chaat masala" | "champ" | "champagne" | "chana dal" | "chanterelle mushrooms" | "chapati flour" | "chapatis" | "charcuterie" | "chard" | "charlotte potato" | "cheddar" | "cheese" | "cherry" | "cherry brandy" | "cherry tomatoes" | "chervil" | "cheshire" | "chestnut" | "chestnut mushrooms" | "chia seeds" | "chicken" | "chicken breast" | "chicken leg" | "chicken liver" | "chicken stock" | "chicken thigh" | "chicken wing" | "chickpea" | "chickpea flour" | "chicory" | "chilli" | "chilli oil" | "chilli paste" | "chilli powder" | "chilli sauce" | "chinese cabbage" | "chinese mushrooms" | "chinese pancake" | "chipotle" | "chips" | "chives" | "chocolate" | "chocolate biscuit" | "chocolate cake" | "chocolate truffle" | "chopped tomatoes" | "chorizo" | "choux pastry" | "christmas pudding" | "chuck and blade" | "chump" | "chutney" | "ciabatta" | "cider" | "cinnamon" | "citrus fruit" | "clams" | "clarified butter" | "clementine" | "clotted cream" | "cloves" | "cobnut" | "cockles" | "cocoa butter" | "cocoa powder" | "coconut" | "coconut cream" | "coconut flour" | "coconut milk" | "coconut oil" | "cod" | "coffee" | "coffee beans" | "coffee essence" | "coffee granules" | "coffee liqueur" | "cognac" | "cola" | "coleslaw" | "coley" | "collar" | "comp\u00f4te" | "comt\u00e9" | "condensed milk" | "coriander" | "coriander cress" | "coriander seeds" | "corn oil" | "corned beef" | "cornflour" | "cos lettuce" | "cottage cheese" | "courgette" | "couscous" | "crab" | "crackers" | "cranberry" | "cranberry juice" | "cranberry sauce" | "crayfish" | "cream" | "cream cheese" | "cream liqueur" | "cream of tartar" | "cream soda" | "creamed coconut" | "cr\u00e8me fra\u00eeche" | "cr\u00eape" | "cress" | "crisps" | "croissant" | "crostini" | "cro\u00fbtons" | "crumble" | "crystallised ginger" | "cucumber" | "cumin" | "curd" | "curd cheese" | "curly kale" | "currants" | "curry" | "curry leaves" | "curry paste" | "curry powder" | "custard" | "custard powder" | "cuttlefish" | "daikon" | "damsons" | "dandelion" | "dark chocolate" | "date" | "demerara sugar" | "desiccated coconut" | "desir\u00e9e potato" | "digestive biscuit" | "dijon mustard" | "dill" | "dim sum wrappers" | "dolcelatte" | "double cream" | "double gloucester" | "dragon fruit" | "dried apricots" | "dried cherries" | "dried chilli" | "dried fruit" | "dried mixed fruit" | "dry sherry" | "duck" | "duck confit" | "duck fat" | "dulce de leche" | "dumplings" | "eel" | "egg" | "egg wash" | "egg white" | "egg yolk" | "elderflower" | "emmental" | "english muffin" | "english mustard" | "evaporated milk" | "exotic fruit" | "falafel" | "farfalle" | "fat" | "fennel" | "fennel seeds" | "fenugreek" | "feta" | "fettuccine" | "field mushroom" | "fig" | "fillet of beef" | "filo pastry" | "fish" | "fish paste" | "fish roe" | "fish sauce" | "fish soup" | "five-spice powder" | "flageolet beans" | "flaked almonds" | "flank" | "flatbread" | "flatfish" | "flaxseed" | "fleur de sel" | "flour" | "flour tortilla" | "floury potato" | "focaccia" | "fondant icing" | "fontina cheese" | "food colouring" | "forced rhubarb" | "fortified wine" | "freekeh" | "french beans" | "french bread" | "french dressing" | "fresh coriander" | "fresh tuna" | "fromage frais" | "fruit" | "fruit brandy" | "fruit cake" | "fruit juice" | "fudge" | "fusilli" | "galangal" | "game" | "gammon" | "garam masala" | "garlic" | "garlic and herb cream cheese" | "garlic bread" | "gelatine" | "ghee" | "gherkin" | "giblets" | "gin" | "ginger" | "ginger ale" | "ginger beer" | "ginger biscuit" | "gingerbread" | "glac\u00e9 cherries" | "globe artichoke" | "glucose" | "gluten-free flour" | "gnocchi" | "goat" | "goats' cheese" | "goji berries" | "golden syrup" | "goose" | "goose fat" | "gooseberry" | "gorgonzola" | "gouda" | "grains" | "gram flour" | "grapefruit" | "grapefruit juice" | "grapes" | "grapeseed oil" | "gratin" | "gravy" | "gravy browning" | "green banana" | "green beans" | "green cabbage" | "green lentil" | "green tea" | "greengages" | "ground almonds" | "ground ginger" | "grouse" | "gruy\u00e8re" | "guacamole" | "guava" | "gurnard" | "haddock" | "haggis" | "hake" | "halibut" | "halloumi" | "ham" | "hare" | "haricot beans" | "harissa" | "hazelnut" | "hazelnut oil" | "heart" | "herbal tea" | "herbes de provence" | "herbs" | "herring" | "hogget" | "hoisin sauce" | "hollandaise sauce" | "honey" | "honeycomb" | "horseradish" | "horseradish sauce" | "hot cross buns" | "hummus" | "hunza apricots" | "ice cream" | "iceberg lettuce" | "icing" | "icing sugar" | "irish stout" | "jackfruit" | "jaggery" | "jam" | "jasmine rice" | "jelly" | "jerk seasoning" | "jersey royal potatoes" | "jerusalem artichoke" | "juniper berries" | "jus" | "kale" | "ketchup" | "ketjap manis" | "kidney" | "kidney beans" | "king edward" | "kipper" | "kirsch" | "kiwi fruit" | "kohlrabi" | "lager" | "lamb" | "lamb breast" | "lamb chop" | "lamb fillet" | "lamb kidney" | "lamb loin" | "lamb mince" | "lamb neck" | "lamb rump" | "lamb shank" | "lamb shoulder" | "lamb stock" | "lancashire cheese" | "langoustine" | "lard" | "lardons" | "lasagne" | "lasagne sheets" | "laverbread" | "leek" | "leftover turkey" | "leg of lamb" | "lemon" | "lemon balm" | "lemon curd" | "lemon juice" | "lemon sole" | "lemonade" | "lemongrass" | "lentils" | "lettuce" | "lime" | "lime cordial" | "lime juice" | "lime leaves" | "lime pickle" | "ling" | "lingonberry" | "linguine" | "liqueur" | "liquorice" | "little gem lettuce" | "liver" | "loaf cake" | "lobster" | "long-grain rice" | "lovage" | "low-calorie sweetener" | "lychee" | "macadamia" | "macaroni" | "macaroon" | "mace" | "mackerel" | "madeira" | "madeira cake" | "madeleines" | "maize" | "manchego" | "mandarin" | "mangetout" | "mango" | "mango chutney" | "mango juice" | "maple syrup" | "margarine" | "marjoram" | "marmalade" | "marrow" | "marrowfat peas" | "marsala wine" | "marshmallow" | "marzipan" | "mascarpone" | "mashed potato" | "matzo" | "mayonnaise" | "meat" | "medlars" | "melon" | "meringue" | "milk" | "milk chocolate" | "mince" | "mince pies" | "mincemeat" | "mint" | "mint sauce" | "mirin" | "miso" | "mixed berries" | "mixed nuts" | "mixed spice" | "mixed spices" | "molasses" | "monkfish" | "morel" | "mortadella" | "mozzarella" | "muesli" | "muffins" | "mung beans" | "mung dal" | "mushroom" | "mussels" | "mustard" | "mustard cress" | "mustard powder" | "mustard seeds" | "mutton" | "naan bread" | "nachos" | "nasturtium" | "nectarine" | "nettle" | "new potatoes" | "nibbed almonds" | "nigella seeds" | "noodles" | "nori" | "nougat" | "nut" | "nutmeg" | "oatcakes" | "oatmeal" | "oats" | "octopus" | "offal" | "oil" | "oily fish" | "okra" | "olive" | "olive oil" | "onion" | "orange" | "orange juice" | "orange liqueur" | "oregano" | "ouzo" | "oxtail" | "oyster" | "oyster mushrooms" | "oyster sauce" | "paella" | "pak choi" | "palm oil" | "palm sugar" | "pancakes" | "pancetta" | "panch phoran" | "pandan leaves" | "paneer" | "panettone" | "papaya" | "pappardelle" | "paprika" | "paratha" | "parma ham" | "parmesan" | "parsley" | "parsnip" | "partridge" | "passata" | "passion fruit" | "passion fruit juice" | "pasta" | "pasta sauce" | "pastrami" | "pastry" | "pasty" | "p\u00e2t\u00e9" | "pea shoots" | "peach" | "peanut butter" | "peanut oil" | "peanuts" | "pear" | "pearl barley" | "peas" | "pecan" | "pecorino" | "pectin" | "peel" | "penne" | "pepper" | "peppercorn" | "pepperoni" | "perry" | "pesto" | "pheasant" | "piccalilli" | "pickle" | "pickled onion" | "pie" | "pigeon" | "pigeon peas" | "pine nut" | "pineapple" | "pineapple juice" | "pink fir apple" | "pink peppercorn" | "pinto beans" | "pistachio" | "pitta bread" | "plaice" | "plain flour" | "plantain" | "plum" | "polenta" | "pollack" | "pollock" | "pomegranate" | "pomegranate juice" | "pomegranate molasses" | "pomelo" | "popcorn" | "poppy seeds" | "porcini" | "pork" | "pork belly" | "pork chop" | "pork fillet" | "pork leg" | "pork loin" | "pork mince" | "pork sausages" | "pork shoulder" | "pork spare rib" | "porridge" | "port" | "portobello mushrooms" | "potato" | "potato wedges" | "poultry" | "poussin" | "prawn" | "prawn crackers" | "preserved lemons" | "preserves" | "pretzels" | "prosciutto" | "prune" | "pudding rice" | "puff pastry" | "pulled pork" | "pumpernickel bread" | "pumpkin" | "pumpkin seed" | "purple sprouting broccoli" | "puy lentils" | "quail" | "quails' egg" | "quark" | "quince" | "quinoa" | "quorn" | "rabbit" | "rack of lamb" | "radicchio" | "radish" | "rainbow chard" | "rainbow trout" | "raisins" | "raita" | "rapeseed oil" | "ras-el-hanout" | "raspberry" | "raspberry jam" | "ratafia biscuits" | "ratatouille" | "red cabbage" | "red leicester" | "red lentil" | "red mullet" | "red onion" | "red rice" | "red snapper" | "red wine" | "red wine vinegar" | "redcurrant" | "redcurrant jelly" | "rennet" | "rhubarb" | "rib of beef" | "rice" | "rice flour" | "rice noodles" | "rice vinegar" | "rice wine" | "ricotta" | "rigatoni" | "risotto rice" | "roast beef" | "roast chicken" | "roast lamb" | "roast pork" | "roast potatoes" | "roasted vegetables" | "rock salt" | "rocket" | "root vegetable" | "roquefort" | "rosemary" | "rosewater" | "royal icing" | "rum" | "rump" | "runner beans" | "rye bread" | "rye flour" | "saffron" | "sage" | "sage derby" | "salad" | "salad leaves" | "salami" | "salmon" | "salsa" | "salsify" | "salt" | "salt beef" | "salt cod" | "samphire" | "sardine" | "satay" | "satsuma" | "sauces" | "saucisson" | "sauerkraut" | "sausage" | "savory" | "savoy cabbage" | "scallop" | "scotch bonnet chilli" | "scrag" | "sea bass" | "sea bream" | "sea salt" | "seafood" | "seasoning" | "seaweed" | "seeds" | "self-raising flour" | "semolina" | "serrano ham" | "sesame oil" | "sesame seeds" | "seville orange" | "shallot" | "sharon fruit" | "shellfish" | "sherry" | "sherry vinegar" | "shiitake mushroom" | "shin" | "shortbread" | "shortcrust pastry" | "sichuan pepper" | "silverside" | "single cream" | "sirloin" | "skate" | "sloe" | "sloe gin" | "smoked cheese" | "smoked fish" | "smoked haddock" | "smoked mackerel" | "smoked paprika" | "smoked salmon" | "smoked trout" | "soba noodles" | "soda bread" | "soda water" | "sorrel" | "soup" | "sourdough bread" | "soured cream" | "soy sauce" | "soya beans" | "soya flour" | "soya milk" | "spaghetti" | "sparkling wine" | "spelt" | "spelt flour" | "spices" | "spinach" | "split peas" | "sponge cake" | "spring greens" | "spring onion" | "spring roll wrappers" | "squash" | "squid" | "sriracha" | "star anise" | "steak" | "stem ginger" | "stewing lamb" | "stilton" | "stock" | "strawberry" | "strawberry jam" | "strong white flour" | "stuffing" | "suet" | "sugar" | "sugar-snap peas" | "sultanas" | "sumac" | "summer fruit" | "sunflower oil" | "sunflower seed" | "sushi rice" | "swede" | "sweet potato" | "sweet sherry" | "sweetbread" | "sweetcorn" | "sweets" | "swiss chard" | "swiss rolls and roulades" | "swordfish" | "syrup" | "t-bone steak" | "tabasco" | "taco" | "tagliatelle" | "tahini" | "taleggio" | "tamari" | "tamarind" | "tangerine" | "tapenade" | "tapioca" | "tarragon" | "tayberry" | "tea" | "tequila" | "teriyaki sauce" | "thai basil" | "thyme" | "tilapia" | "tinned tuna" | "toffee" | "tofu" | "tomatillo" | "tomato" | "tomato chutney" | "tomato juice" | "tomato pur\u00e9e" | "tongue" | "tonic" | "topside" | "treacle" | "trout" | "truffle" | "truffle oil" | "turbot" | "turkey" | "turkey breast" | "turkey mince" | "turkish delight" | "turmeric" | "turnip" | "urid dal" | "vacherin" | "vanilla bean paste" | "vanilla essence" | "vanilla extract" | "vanilla pod" | "veal" | "vegetable oil" | "vegetable shortening" | "vegetable stock" | "vegetables" | "vegetarian sausage" | "venison" | "vermicelli (pasta)" | "vermouth" | "vine leaves" | "vinegar" | "vodka" | "walnut" | "walnut oil" | "wasabi" | "water chestnut" | "watercress" | "watermelon" | "waxy potato" | "wensleydale" | "wheatgerm" | "whelk" | "whipping cream" | "whisky" | "whisky liqueur" | "white bread" | "white cabbage" | "white chocolate" | "white fish" | "white pepper" | "white wine" | "white wine vinegar" | "whitecurrant" | "whiting" | "whole wheat pasta" | "wholegrain mustard" | "wholemeal bread" | "wholemeal flour" | "wild garlic" | "wild mushrooms" | "wild rice" | "wine" | "wood pigeon" | "worcestershire sauce" | "wraps" | "yam" | "yeast" | "yeast extract" | "yoghurt" | "yuzu" | "zest") diff --git a/terminals/Preposition.lark b/terminals/Preposition.lark deleted file mode 100755 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/terminals/Utensil.lark b/terminals/Utensil.lark deleted file mode 100755 index 45dc86814a5b97d1e917f90b4a35b57de1552565..0000000000000000000000000000000000000000 --- a/terminals/Utensil.lark +++ /dev/null @@ -1,98 +0,0 @@ -UTENSIL = (Apple corer -Apple cutter -Baster -Beanpot -Biscuit press -Blow torch -Boil over preventer -Bottle opener -Bowl -Bread knife -Browning tray -Butter curler -Cake and pie server -Cheese cutter -Cheese knife -Cheese slicer -Cheesecloth -Chef's knife -Cherry pitter -Chinois -Clay pot -Cleaver -Colander -Cookie cutter -Corkscrew -Crab cracker -Cutting board -Dough scraper -Edible tableware -Egg piercer -Egg poacher -Egg separator -Egg slicer -Egg timer -Fat separator -Fillet knife -Fish scaler -Fish slice -Flour sifter -Food mill -Funnel -Garlic press -Grapefruit knife -Grater -Herb chopper -Honey dipper -Ladle -Lame -Lemon reamer -Lemon squeezer -Lobster pick -Mandoline -Mated colander pot -Measuring cup -Measuring spoon -Meat grinder -Meat tenderiser -Meat thermometer -Melon baller -Mezzaluna -Microplane -Milk frother -Mortar and pestle -Nutcracker -Nutmeg grater -Oven glove -Pastry bag -Pastry blender -Pastry brush -Peel -Peeler -Pepper mill -Pie bird -Pizza cutter -Potato masher -Potato ricer -Pot-holder -Poultry shears -Roller docker -Rolling pin -Salt shaker -Scales -Scissors -Scoop -Sieve -Slotted spoon -Spatula -Spider -Sugar thermometer -Tamis -Tin opener -Tomato knife -Tongs -Trussing needle -Twine -Whisk -Wooden spoon -Zester diff --git a/scrape_utensils.py b/utensils.py similarity index 100% rename from scrape_utensils.py rename to utensils.py diff --git a/vegancupcakes.json b/vegancupcakes.json new file mode 100755 index 0000000000000000000000000000000000000000..effc257a2469390781a1562f4e2474fd8697dde1 --- /dev/null +++ b/vegancupcakes.json @@ -0,0 +1,157 @@ +{ + "@context": { + "@language": "en", + "@vocab": "http://purl.org/dc/terms/" + }, + "@graph": [ + { + "@id": "file:///home/liam/final-year-project/#Ingredient", + "@type": "http://www.w3.org/2000/01/rdf-schema#Class" + }, + { + "@id": "file:///home/liam/final-year-project/#Type", + "@type": "http://www.w3.org/2000/01/rdf-schema#Class" + }, + { + "@id": "file:///home/liam/final-year-project/#Amount", + "@type": "http://www.w3.org/2000/01/rdf-schema#Class" + }, + { + "@id": "file:///home/liam/final-year-project/", + "http://purl.org/dc/elements/1.1/title": { + "@value": "Ontology" + } + }, + { + "@id": "file:///home/liam/final-year-project/#Seq", + "@type": "http://www.w3.org/2000/01/rdf-schema#Class" + }, + { + "@id": "file:///home/liam/final-year-project/#Collection", + "@type": "http://www.w3.org/2000/01/rdf-schema#Class" + }, + { + "@id": "file:///home/liam/final-year-project/#hasAuthor", + "@type": "http://www.w3.org/2000/01/rdf-schema#Property" + }, + { + "@id": "file:///home/liam/final-year-project/#IngredientList", + "@type": "http://www.w3.org/2000/01/rdf-schema#Class" + }, + { + "@id": "file:///home/liam/final-year-project/#Action", + "@type": "http://www.w3.org/2000/01/rdf-schema#Class" + }, + { + "@id": "file:///home/liam/final-year-project/#Unit", + "@type": "http://www.w3.org/2000/01/rdf-schema#Class" + }, + { + "@id": "file:///home/liam/final-year-project/#Verb", + "@type": "http://www.w3.org/2000/01/rdf-schema#Class" + }, + { + "@id": "file:///home/liam/final-year-project/#Food", + "@type": "http://www.w3.org/2000/01/rdf-schema#Class" + }, + { + "@id": "file:///home/liam/final-year-project/#Step", + "@type": "http://www.w3.org/2000/01/rdf-schema#Class" + }, + { + "@id": "file:///home/liam/final-year-project/#Recipe", + "@type": "http://www.w3.org/2000/01/rdf-schema#Class" + }, + { + "@id": "file:///home/liam/final-year-project/#hasDifficulty", + "@type": "http://www.w3.org/2000/01/rdf-schema#Property" + }, + { + "@id": "file:///home/liam/final-year-project/#Method", + "@type": "http://www.w3.org/2000/01/rdf-schema#Class" + }, + { + "@id": "file:///home/liam/final-year-project/#hasWebsite", + "@type": "http://www.w3.org/2000/01/rdf-schema#Property" + }, + { + "@id": "file:///home/liam/final-year-project/#StageSequence", + "@type": "http://www.w3.org/2000/01/rdf-schema#Class" + }, + { + "@id": "file:///home/liam/final-year-project/#hasIngredient", + "@type": "http://www.w3.org/2000/01/rdf-schema#Property" + }, + { + "@id": "file:///home/liam/final-year-project/#hasAllergens", + "@type": "http://www.w3.org/2000/01/rdf-schema#Property" + }, + { + "@id": "file:///home/liam/final-year-project/#Menu", + "@type": "http://www.w3.org/2000/01/rdf-schema#Class", + "http://www.w3.org/2000/01/rdf-schema#subClassOf": { + "@id": "file:///home/liam/final-year-project/#Collection" + } + }, + { + "@id": "file:///home/liam/final-year-project/#Name", + "@type": "http://www.w3.org/2000/01/rdf-schema#Class" + }, + { + "@id": "file:///home/liam/final-year-project/#hasRating", + "@type": "http://www.w3.org/2000/01/rdf-schema#Property" + }, + { + "@id": "file:///home/liam/final-year-project/#hasName", + "@type": "http://www.w3.org/2000/01/rdf-schema#Property" + }, + "@id": "url", + "@type": "Recipe", + "title": "Vegan cupcakes", + "time": "20 mins", + "difficulty": "Easy" + "Ingredients": [ + "Ingredient": + "amount": 150, + "unit": "ml", + "ingredient": "almond", + "conjunction": "or", + "ingredient": "soy milk" + , + "Ingredient": # etc + ], + "Ingredients": [ + "150 ml almond or soy milk", + "1/2 tsp cider vinegar", + "110 g vegan butter or sunflower spread", + "110 g caster sugar", + "1 tsp vanilla extract", + "110 g self-raising flour", + "1/2 tsp baking powder", + "125 g vegan butter", + "250 g icing sugar", + "1/4 tsp vanilla extract", + "a few drops of vegan food colourings (check the label)" + ] + ] +} +{ + "Nutrition": { + "Carbs": "", + "Fat": "12g", + "Fibre": "0.4g", + "Kcal": "265", + "Protein": "1g", + "Salt": "0.28g", + "Saturates": "3g", + "Sugars": "30g" + }, + "Preparation": "30 mins", + "Steps": [ + "Heat the oven to 180C/160C fan/gas 4. Line the holes of a 12-hole cupcake tin with paper cases. Stir the milk and vinegar in a jug and leave to thicken slightly for a few mins.", + "Beat the butter and sugar with an electric whisk until well combined. Whisk in the vanilla, then add the milk a splash at a time, alternating with spoonfuls of the flour. Fold in any remaining flour, the baking powder and a pinch of salt until you get a creamy batter. Don\u2019t worry if it looks a little curdled at this stage.", + "Divide between the cupcake cases, filling them two-thirds\u00a0full, and bake for 20 - 25 mins until\u00a0golden and risen. Leave to cool on a wire rack.", + "To make the buttercream, beat the butter, icing sugar and vanilla with an electric whisk until pale and creamy. Divide between bowls and colour with different food colourings until you get desired strength. Spoon or pipe onto the cooled cupcakes." + ], + "Yield": "Makes 12" +} diff --git a/web.rdf b/web.rdf deleted file mode 100644 index f7bdfa7f6d4d0c8ac15dec6584bfbf7bed938fe7..0000000000000000000000000000000000000000 --- a/web.rdf +++ /dev/null @@ -1,34 +0,0 @@ - -<!-- Processed by Id: cwm.py,v 1.197 2007/12/13 15:38:39 syosi Exp --> -<!-- using base file:///home/liam/fyp/ontology.n3--> - - -<rdf:RDF xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> - - <rdf:Description rdf:about=""> - <dc:title>Primer - Getting into the Semantic Web and RDF using N3</dc:title> - </rdf:Description> - - <rdfs:Class rdf:about="#Ingredient"> - </rdfs:Class> - - <rdfs:Class rdf:about="#Collection"> - </rdfs:Class> - - <rdfs:Class rdf:about="#Menu"> - <rdfs:subClassOf rdf:resource="#Collection"/> - </rdfs:Class> - - <rdfs:Class rdf:about="#Recipe"> - </rdfs:Class> - - <rdfs:Class rdf:about="#Food"> - </rdfs:Class> - - <rdfs:Class rdf:about="#StageSequence"> - </rdfs:Class> - - <rdfs:Property rdf:about="#hasAllergens"> - </rdfs:Property> -</rdf:RDF>