Added PaleoIngredientCheck IA
parent
deaee77a11
commit
b533ceca4c
|
@ -0,0 +1,70 @@
|
||||||
|
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;
|
||||||
|
use List::MoreUtils 'any';
|
||||||
|
|
||||||
|
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"];
|
||||||
|
attribuion github => ["javathunderman", "Thomas Denizou"];
|
||||||
|
attribution twitter => ["javathunderman", "Thomas Denizou"];
|
||||||
|
my @safe_keywords = share('safe.txt')->slurp;
|
||||||
|
my @unsafe_keywords = share('unsafe.txt')->slurp;
|
||||||
|
|
||||||
|
handle remainder => sub {
|
||||||
|
|
||||||
|
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($result);
|
||||||
|
|
||||||
|
if (any {/$item/} @safe_keywords) {
|
||||||
|
# If we know the item is safe, append the appropriate positive result.
|
||||||
|
if ($is_plural) {
|
||||||
|
$result = "are";
|
||||||
|
} else {
|
||||||
|
$result = "is";
|
||||||
|
}
|
||||||
|
} elsif (any {/$item/} @unsafe_keywords) {
|
||||||
|
# If we know the item is unsafe, append the appropriate negative result.
|
||||||
|
if ($is_plural) {
|
||||||
|
$result = "are not";
|
||||||
|
} else {
|
||||||
|
$result = "is not";
|
||||||
|
}
|
||||||
|
} elsif (!$is_plural) {
|
||||||
|
# If nothing was found and the query was not plural, try it pluralized.
|
||||||
|
if (any {/$item."s"/} @safe_keywords) {
|
||||||
|
$result = "is";
|
||||||
|
} elsif (any {/$item."s"/} @unsafe_keywords) {
|
||||||
|
$result = "is not";
|
||||||
|
}
|
||||||
|
} elsif ($is_plural) {
|
||||||
|
# If nothing was found and the query was plural, try it depluralized.
|
||||||
|
my $depluralized = substr($item, 0, -1);
|
||||||
|
if (any {/$depluralized/} @safe_keywords) {
|
||||||
|
$result = "are";
|
||||||
|
} elsif (any {/$depluralized/} @unsafe_keywords) {
|
||||||
|
$result = "are not";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return unless $result;
|
||||||
|
return sprintf("%s %s allowed on the paleo diet.", ucfirst($item), $result);
|
||||||
|
};
|
||||||
|
|
||||||
|
1;
|
|
@ -0,0 +1,24 @@
|
||||||
|
#!/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('Apples are allowed on the paleo diet.'),
|
||||||
|
'Is dairy allowed on the paleo diet?' => test_zci('Dairy is not allowed on the paleo diet.'),
|
||||||
|
'Is sugar paleo friendly?' => test_zci('Sugar is not allowed on the paleo diet.'),
|
||||||
|
'beans paleo safe' => test_zci('Beans are not allowed on the paleo diet.'),
|
||||||
|
'is sugar paleo' => test_zci('Sugar is not allowed on the paleo diet.'),
|
||||||
|
'Is foobar allowed on the paleo diet?' => undef,
|
||||||
|
'are notarealfood paleo friendly' => undef,
|
||||||
|
'paleo diet recipes' => undef,
|
||||||
|
'paleo recipes' => undef,
|
||||||
|
);
|
||||||
|
|
||||||
|
done_testing;
|
Loading…
Reference in New Issue