예제 #1
0
    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))