def createNutrientIDFiles(): aliasList = util.listAllAliases() aliasList.sort() hitIngredientCount = 0 missedIngredientCount = 0 print "Number of Ingredients to Query: " + str(len(aliasList)) addIngredientToNutritionalList(aliasList) print foundIngredients
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!"
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..."