Пример #1
0
def createNutrientIDFiles():
	aliasList = util.listAllAliases()
	aliasList.sort()
	hitIngredientCount = 0
	missedIngredientCount = 0
	print "Number of Ingredients to Query: " + str(len(aliasList))
	addIngredientToNutritionalList(aliasList)
	print foundIngredients
Пример #2
0
def testAliasExtraction():
    print "Hello world!"
    allRecipes = []

    # Each alias has 3 main fields:
    #   "count"
    #   "aliasBuddies"
    #   "lines"
    aliasData = {}

    # Read in and parse recipe data structures (dictionaries) from a json file.
    aliasList = util.listAllAliases()
    for alias in aliasList:
        print alias.encode('ascii', errors='ignore')

    print str(len(aliasList)) + " ingredients found!"
Пример #3
0
def addVariablesAndFactors(csp, traits, whichCSP):
    num_ingredients = traits["num_ingredients"]

    if whichCSP == "alias":
        nameVariables = ['alias_%d'%i for i in xrange(0, num_ingredients)]
        nameDomain = util.listAllAliases()
        csp.set_domain(nameDomain)
        for var in nameVariables:
            csp.add_variable(var, nameDomain)

        if traits["verbose"]:
            "Solving aliasCSP. Added variables: ", csp.variables

        constraints = traits["alias_constraints"]
        addFactors_sameName(csp, traits)
        if constraints.get("free_of_nuts", "False").lower() == "true":
            addFactors_freeOfNuts(csp, traits)
        if constraints.get("free_of_meat", "False").lower() == "true":
            addFactors_freeOfMeat(csp, traits)
        addFactors_nutrientDataExists(csp, traits)
        addFactors_buddyScore(csp, traits)

    elif whichCSP == "amount":
        # Shorthand for nutritional database class
        ND = traits["ND"]

        variables = ['amount_%d'%i for i in xrange(0, num_ingredients)]
        aliasVarDict = {variables[i]: traits["alias_choices"][k] \
            for i, k in enumerate(sorted(traits["alias_choices"].keys()))}
        traits["amountVarToAlias"] = aliasVarDict
        domainDict = {}

        # Get a list of all nutrients that are mentioned in amount constraints
        # (focusNutrients)
        # validNutrients = ND.validNutrientsDict.keys() + ['kcal'] + ['sodium']
        focusNutrients = traits["focusNutrients"]
        # for constraint in traits["amount_constraints"]:
        #     focusNutrients += [n for n in constraint.split("_") if n in validNutrients]

        traits["focusNutrients"] = focusNutrients[:]

        # Create domains for the variables
        for var in variables:
            allDomains = []
            gramDomain = util.getIngredientRange(aliasVarDict[var], 4)
            allDomains.append(gramDomain)
            for nu in focusNutrients:
                nuDomain = [ND.getNutrientFromGrams(g, aliasVarDict[var], nu) for g in gramDomain]
                allDomains.append(nuDomain)
            domainDict[var] = [tuple(li) for li in zip(*allDomains)]

        # Where each unit is in the value tuple
        nutrientIndexDict = {unit: i for i, unit in enumerate(["grams"] + focusNutrients)}
        traits["nutrientIndices"] = nutrientIndexDict

        # Add all the amount variables
        for var in variables:
            print "Domain of var %s is %r" % (var, domainDict[var])
            csp.add_variable(var, domainDict[var])

        # Add all amount constraints specified in csp_defaultTraits.json
        for constraint, val in traits["amount_constraints"].items():
            splitConstraint = constraint.split("_")
            unit = splitConstraint[2]

            # If the amount constraint is a "max total ___" constraint...
            if splitConstraint[:2] == ["max", "total"]:
                print "Max sum is %s for unit %s: " % (val, unit)
                util.make_max_sum_variable(csp, unit, variables, val, nutrientIndexDict[unit])
            if splitConstraint[:2] == ["min", "total"]:
                print "Min sum is %s for unit %s: " % (val, unit)
                util.make_min_sum_variable(csp, unit, variables, val, nutrientIndexDict[unit])
            if splitConstraint[:2] == ["close", "total"]:
                print "Close sum is %s for unit %s: " % (val, unit)
                util.make_close_sum_variable(csp, unit, variables, val, nutrientIndexDict[unit])

        print "Finished making amountCSP..."