def setupNodes(self): stringbuffer = "" # Create a new recipe object and set its starting values equal to what we know self.myrecipe = Recipe() self.myrecipe.allIngredients = self.ingredients self.myrecipe.allUtensils = self.utensils self.startNewRecipeStep("") # Create a new step self.allNodes = [] allIngredients = [] for i in self.ingredients: allIngredients.append(i.name) allUtensils = [] for u in self.utensils: allUtensils.append(u.name) # Our flow chart is composed of nodes. Each node has strings that will match it. # Each node also has a name, and an action to be performed if triggered # Each node has an input node, except the first, and any number of output nodes # Start node, the first thing that will be evaluated firstNode = Node([""], "first node") firstNode.action = "startNewRecipeStep" # In Node inNode = Node(['in'], "in node") # First utensil node firstUtensil = Node(allUtensils, "first utensil") firstUtensil.action = "addUtensil" inNode.addNode(firstUtensil) # Cook Node cookAction = Node(allCookActions, "cook action") cookAction.action = "addAction" firstUtensil.addNode(cookAction) # Addition Node additionWordsAction = Node(['onto', 'with', 'together', 'each'], "addition node") cookAction.addNode(additionWordsAction) # Measurement Node 1 measurements1Action = Node(allMeasurements, "0measurement") cookAction.addNode(measurements1Action) additionWordsAction.addNode(measurements1Action) # Ingredient Node 1 ingredients1Action = Node(allIngredients, "0ingredient") ingredients1Action.action = "addIngredient" ingredients1Action.addNode(ingredients1Action) ingredients1Action.addNode(measurements1Action) measurements1Action.addNode(ingredients1Action) cookAction.addNode(ingredients1Action) additionWordsAction.addNode(ingredients1Action) # Utensils Node 1 uten1Action = Node(allUtensils, "0utensil") uten1Action.action = "addUtensil" uten1Action.addNode(uten1Action) uten1Action.addNode(measurements1Action) measurements1Action.addNode(uten1Action) cookAction.addNode(uten1Action) additionWordsAction.addNode(uten1Action) # Addition Node 2 additionWords2Action = Node(['onto', 'with', 'in', 'on'], "addition node 2") ingredients1Action.addNode(additionWords2Action) measurements1Action.addNode(additionWords2Action) uten1Action.addNode(additionWords2Action) cookAction.addNode(additionWords2Action) # Measurement Node 2 measurements2Action = Node(allMeasurements, "1measurement") additionWords2Action.addNode(measurements2Action) # Ingredient Node 2 ingredients2Action = Node(allIngredients, "1ingredient") ingredients2Action.action = "addIngredient" ingredients2Action.addNode(ingredients2Action) ingredients2Action.addNode(measurements2Action) measurements2Action.addNode(ingredients2Action) additionWords2Action.addNode(ingredients2Action) # Utensils Node 2 uten2Action = Node(allUtensils, "1utensil") uten2Action.action = "addUtensil" uten2Action.addNode(uten2Action) uten2Action.addNode(measurements2Action) measurements2Action.addNode(uten2Action) additionWords2Action.addNode(uten2Action) # Until Over Node untilOverAction = Node(['until', 'over'], "until over") cookAction.addNode(untilOverAction) ingredients1Action.addNode(untilOverAction) measurements1Action.addNode(untilOverAction) ingredients2Action.addNode(untilOverAction) measurements2Action.addNode(untilOverAction) uten1Action.addNode(untilOverAction) uten2Action.addNode(untilOverAction) # Measurement Node 3 measurements3Action = Node(allMeasurements, "2measurement") untilOverAction.addNode(measurements3Action) # Ingredient Node 3 ingredients3Action = Node(allIngredients, "2ingredient") ingredients3Action.action = "addIngredient" ingredients3Action.addNode(ingredients3Action) ingredients3Action.addNode(measurements3Action) measurements3Action.addNode(ingredients3Action) untilOverAction.addNode(ingredients3Action) # Utensils Node 3 uten3Action = Node(allUtensils, "2utensil") uten3Action.action = "addUtensil" uten3Action.addNode(uten3Action) uten3Action.addNode(measurements3Action) measurements3Action.addNode(uten3Action) untilOverAction.addNode(uten3Action) # Is Are Node isAreAction = Node(['is', 'are'], "is are") ingredients3Action.addNode(isAreAction) measurements3Action.addNode(isAreAction) uten3Action.addNode(isAreAction) # To For Node toForNode = Node(['to', 'for'], "to for") cookAction.addNode(toForNode) ingredients1Action.addNode(toForNode) measurements1Action.addNode(toForNode) uten1Action.addNode(toForNode) uten2Action.addNode(toForNode) untilOverAction.addNode(toForNode) # Or Node orNode = Node(['or'], "or node") ingredients2Action.addNode(orNode) measurements2Action.addNode(orNode) uten2Action.addNode(orNode) # Condition Node conditionNode = Node(allConditions, "condition node") conditionNode.action = "addCondition" toForNode.addNode(conditionNode) isAreAction.addNode(conditionNode) ingredients3Action.addNode(conditionNode) uten3Action.addNode(conditionNode) measurements3Action.addNode(conditionNode) conditionNode.addNode(conditionNode) conditionNode.addNode(orNode) conditionNode.addNode(untilOverAction) conditionNode.addNode(additionWords2Action) # And Node andNode = Node(['and'], "and node") conditionNode.addNode(andNode) andNode.addNode(ingredients3Action) andNode.addNode(uten3Action) andNode.addNode(measurements3Action) andNode.addNode(conditionNode) # And Node 2 andNode2 = Node(['and'], "and node 2") cookAction.addNode(andNode2) andNode2.addNode(cookAction) firstNode.addNode(cookAction) firstNode.addNode(inNode) self.firstNode = firstNode self.currentNode = self.firstNode # Register all the nodes we created so we can print them self.allNodes.append(inNode) self.allNodes.append(firstUtensil) self.allNodes.append(cookAction) self.allNodes.append(additionWordsAction) self.allNodes.append(ingredients1Action) self.allNodes.append(measurements1Action) self.allNodes.append(uten1Action) self.allNodes.append(additionWords2Action) self.allNodes.append(ingredients2Action) self.allNodes.append(measurements2Action) self.allNodes.append(uten2Action) self.allNodes.append(untilOverAction) self.allNodes.append(ingredients3Action) self.allNodes.append(measurements3Action) self.allNodes.append(uten3Action) self.allNodes.append(isAreAction) self.allNodes.append(toForNode) self.allNodes.append(orNode) self.allNodes.append(conditionNode) self.allNodes.append(andNode) self.allNodes.append(andNode2)
def parseRecipe(self, itext): myRecipe = Recipe() sentence = nltk.sent_tokenize(itext) for i in sentence: myRecipe.addStep(parseStep(i))