diff --git a/lib/DDG/Goodie/PaleoIngredientCheck.pm b/lib/DDG/Goodie/PaleoIngredientCheck.pm new file mode 100644 index 000000000..a4b51abab --- /dev/null +++ b/lib/DDG/Goodie/PaleoIngredientCheck.pm @@ -0,0 +1,59 @@ +package DDG::Goodie::PaleoIngredientCheck; +# ABSTRACT: Indicates if a given food item is known to be safe or unsafe on the paleo diet. + +use DDG::Goodie; + +triggers startend => share('triggers.txt')->slurp; + +zci answer_type => "paleo_ingredient_check"; +zci is_cached => 1; + +name "PaleoIngredientCheck"; +description "Indicates if a given food item is known to be safe or unsafe on the paleo diet."; +primary_example_queries "are apples paleo friendly", "Is dairy allowed on the paleo diet?"; +secondary_example_queries "Is sugar paleo friendly?", "beans paleo safe"; +category "food"; +topics "food_and_drink"; +code_url "https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/PaleoIngredientCheck.pm"; +attribution github => ["murz", "Mike Murray"]; +attribution github => ["javathunderman", "Thomas Denizou"]; + +my @safe_array = share('safe.txt')->slurp; +my %safe_keywords = map { chomp; $_ => 1 } @safe_array; +my @unsafe_array = share('unsafe.txt')->slurp; +my %unsafe_keywords = map { chomp; $_ => 1 } @unsafe_array; + +# p(%safe_keywords); +# warn($safe_keywords{"apple"}); + +handle remainder => sub { + return unless $_; + my $item = lc($_); + + # Remove any preceding "is" or "are" text from the query. + $item =~ s/^(is|are)[\W]+//; + + my $is_plural = substr($item, -1) eq "s"; + my $itemAlt = $is_plural ? substr($item, 0, -1) : $item."s"; # pluralized or unpluralized form + my $result; + + # warn "ITEM IS: $item"; + # warn "ITEM ALT IS: $itemAlt"; + + if (exists $safe_keywords{$item} || exists $safe_keywords{$itemAlt}) { + $result = "Yes"; + } elsif (exists $unsafe_keywords{$item} || exists $unsafe_keywords{$itemAlt}) { + $result = "No"; + } + + return unless $result; # ensure we have a result + + return $result, + structured_answer => { + input => [$item], # or just the original query + operation => "Paleo Friendly", + result => $result + }; +}; + +1; \ No newline at end of file diff --git a/share/goodie/paleo_ingredient_check/safe.txt b/share/goodie/paleo_ingredient_check/safe.txt new file mode 100644 index 000000000..a7e1cb924 --- /dev/null +++ b/share/goodie/paleo_ingredient_check/safe.txt @@ -0,0 +1,131 @@ +acorn squash +almonds +apple +artichoke hearts +asparagus +avocado +avocado +avocado oil +bacon +bananas +bass +bear +beef +beef jerky +beets +bison +bison jerky +bison ribeye +bison sirloin +bison steaks +blackberries +blueberries +broccoli +brussels sprouts +buffalo +butternut squash +cabbage +cantaloupe +carrots +cashews +cauliflower +celery +chicken breast +chicken eggs +chicken leg +chicken thigh +chicken wings +chuck steak +clams +clams +coconut oil +crab +crawfish +crayfish +duck eggs +eggplant +eggs +elk +emu +figs +goat +goose +goose eggs +grapes +grassfed beef +grass-fed beef +grass-fed butter +green onions +ground beef +halibut +hazelnuts +kangaroo +lamb chops +lamb rack +lean veal +lemon +lime +lobster +lobster +lychee +macadamia nuts +macadamia oil +mackerel +mango +new york steak +olive oil +oranges +ostrich +oysters +papaya +parsley +peaches +pecans +peppers +pheasant +pine nuts +pineapple guava +plums +pork +pork chops +pork tenderloin +potato +potatoes +poultry +pumpkin seeds +quail +rabbit +raspberries +rattlesnake +red snapper +reindeer +salmon +salmon +sardines +scallops +shark +shrimp +shrimp +spinach +steak +strawberries +sunfish +sunflower seeds +sweet potato +sweet potatoes +swordfish +tangerine +tilapia +trout +tuna +turkey +turtle +veal +venison steaks +walleye +walnuts +watermelon +wild boar +yam +yucca +zucchini diff --git a/share/goodie/paleo_ingredient_check/triggers.txt b/share/goodie/paleo_ingredient_check/triggers.txt new file mode 100644 index 000000000..c2827e401 --- /dev/null +++ b/share/goodie/paleo_ingredient_check/triggers.txt @@ -0,0 +1,14 @@ +paleo friendly +paleo friendly? +paleo diet friendly +paleo diet friendly? +paleo safe +paleo safe? +paleo +paleo? +allowed on the paleo diet +allowed on the paleo diet? +allowed on paleo diet +allowed on paleo diet? +allowed on paleo +allowed on paleo? \ No newline at end of file diff --git a/share/goodie/paleo_ingredient_check/unsafe.txt b/share/goodie/paleo_ingredient_check/unsafe.txt new file mode 100644 index 000000000..204a4caa4 --- /dev/null +++ b/share/goodie/paleo_ingredient_check/unsafe.txt @@ -0,0 +1,197 @@ +100 grand +2% milk +5-hour energy +ace k +acesulfame potassium +acid saccharin +ack +adzuki beans +alcohol and mixers +almond joy +aminosweet +apm +apple juice +aspartame +aspartame-acesulfame salt +aspartyl-phenylalanine-1-methyl ester +beans +beer +black beans +black-eyed peas +bread +broad beans +butter +butterfinger +calcium cyclamate +canderel +candy bars +cereals +cheese +chickpeas +chinola juice +chips +clearcut isomalt +coke +cologran +cookies +corn +corn syrup +cottage cheese +crackers +cream cheese +cream of wheat +cyclamate +cyclamate and saccharin +d-glucitol +d-glucitol syrup +dairy +dairy spreads +decomalt +diabetisweet +english muffins +equal classic +equal saccharin +equal spoonful +equal sucralose +erythritol +fava beans +fettuchini +french fries +frozen yogurt +garbanzo beans +glycerin +glycerine +glycerol +glycyrrhizin +grape juice +green beans +hash browns +hershey’s +high-fructose corn syrup +horse beans +hot dogs +hsh +hydrogenated high maltose content glucose syrup +hydrogenated isomaltulose +hydrogenated maltose +hydrogenated starch hydrolysate +ice cream +ice milk +isomalt +isomaltitol +ketchup +kidney beans +lactitol +lasagna +lasagne +lentils +lesys +licorice +lima beans +low fat milk +lupins +m&ms +maltisweet +maltitol +maltitol powder +maltitol syrup +mango juice +mannitol +mesquite +milk +milky way +miso +monster +mounds +mountain dew +mountain dew mdx +mung beans +natrataste blue +natrataste gold +natrulose +navy beans +necta sweet +neotame +nestle crunch +non-fat dairy creamer +nutrasweet +oatmeal +orange juice +pancakes +pasta +pastries +payday +peanut butter +peanuts +peas +pepsi +pinto beans +polydextrose +powdered milk +pretzels +pudding +rebiana +red beans +red bull +red vines +reeses’s pieces +reese’s +reese’s fast break +rockstar +rum +saccharin +sandwiches +skim milk +skittles +smart sweet +snickers +snickers peanut butter +snowpeas +sodium saccharin +sorbitol +soybean +soybeans +spam +splenda +sprite +starbucks refreshers +starfruit juice +steviol glycoside +strawberry juice +string beans +sucaryl +sucralose +sugar +sugar alcohol +sugar snap peas +sunchips +sunett +sweet n low +sweet one +sweet twin +sweetpearl +tagatose +tequila +toast +tofu +trichlorosucrose +triscuits +twinsweet +twix +twix peanut butter +twizzlers +two percent milk +vault +vodka +wheat +wheat thins +whiskey +white beans +whole milk +xs energy drink +xylipure +xylitol +xylosweet +yogurt +zerose +zsweet \ No newline at end of file diff --git a/t/PaleoIngredientCheck.t b/t/PaleoIngredientCheck.t new file mode 100644 index 000000000..87b4e560a --- /dev/null +++ b/t/PaleoIngredientCheck.t @@ -0,0 +1,59 @@ +#!/usr/bin/env perl + +use strict; +use warnings; +use Test::More; +use DDG::Test::Goodie; + +zci answer_type => "paleo_ingredient_check"; +zci is_cached => 1; + +ddg_goodie_test( + [qw( DDG::Goodie::PaleoIngredientCheck )], + 'are apples paleo friendly' => test_zci( + 'Yes', + structured_answer => { + input => ['apples'], + operation => 'Paleo Friendly', + result => 'Yes', + }, + ), + 'Is dairy allowed on the paleo diet?' => test_zci( + 'No', + structured_answer => { + input => ['dairy'], + operation => 'Paleo Friendly', + result => 'No', + }, + ), + 'Is sugar paleo friendly?' => test_zci( + 'No', + structured_answer => { + input => ['sugar'], + operation => 'Paleo Friendly', + result => 'No', + }, + ), + 'beans paleo safe' => test_zci( + 'No', + structured_answer => { + input => ['beans'], + operation => 'Paleo Friendly', + result => 'No', + }, + ), + 'is sugar paleo' => test_zci( + 'No', + structured_answer => { + input => ['sugar'], + operation => 'Paleo Friendly', + result => 'No', + }, + ), + 'Is foobar allowed on the paleo diet?' => undef, + 'are notarealfood paleo friendly' => undef, + 'paleo diet recipes' => undef, + 'paleo recipes' => undef, +); + +done_testing; \ No newline at end of file