Example #1
0
def test_assignment_within_disjunction():
    vars = {}
    natex = NatexNLU("{$A=hello, $A=hi}")
    assert natex.match("hello", vars=vars)
    assert vars["A"] == "hello"
    vars = {}
    assert natex.match("hi", vars=vars, debugging=False)
    assert vars["A"] == "hi"
Example #2
0
def test_reference():
    v1 = {"A": "apple", "B": "brown", "C": "charlie"}
    v2 = {"C": "candice"}
    natex = NatexNLU("[!i saw $C today]")
    assert natex.match("i saw charlie today", vars=v1, debugging=False)
    assert natex.match("i saw charlie today", debugging=False) is None
    assert not natex.match("i saw candice today", vars=v1)
    assert natex.match("i saw candice today", vars=v2)
Example #3
0
def test_reference():
    v1 = {'A': 'apple', 'B': 'brown', 'C': 'charlie'}
    v2 = {'C': 'candice'}
    natex = NatexNLU('[!i saw $C today]')
    assert natex.match('i saw charlie today', vars=v1, debugging=False)
    assert natex.match('i saw charlie today', debugging=False) is None
    assert not natex.match('i saw candice today', vars=v1)
    assert natex.match('i saw candice today', vars=v2)
Example #4
0
def test_assignment_within_disjunction():
    vars = {}
    natex = NatexNLU('{$A=hello, $A=hi}')
    assert natex.match('hello', vars=vars)
    assert vars['A'] == 'hello'
    vars = {}
    assert natex.match('hi', vars=vars, debugging=False)
    assert vars['A'] == 'hi'
Example #5
0
def test_simple_macro():
    natex = NatexNLU("[!i #SIMPLE]", macros=macros)
    assert natex.match("i foo")
    assert natex.match("i bar")
    assert not natex.match("i err")
    natex = NatexNLU("[!i #SIMPLE()]", macros=macros)
    assert natex.match("i foo")
    assert natex.match("i bar")
    assert not natex.match("i err")
Example #6
0
def test_simple_macro():
    natex = NatexNLU('[!i #SIMPLE]', macros=macros)
    assert natex.match('i foo')
    assert natex.match('i bar')
    assert not natex.match('i err')
    natex = NatexNLU('[!i #SIMPLE()]', macros=macros)
    assert natex.match('i foo')
    assert natex.match('i bar')
    assert not natex.match('i err')
Example #7
0
def test_backreference():
    natex = NatexNLU("[!$A good eat $A={apple, banana}]")
    v = {"A": "apple"}
    assert natex.match("apple good eat banana", vars=v, debugging=False)
    assert v["A"] == "banana"
    natex = NatexNLU("[!$A={apple, banana} good eat $A]")
    v = {"A": "apple"}
    assert natex.match("banana good eat banana", vars=v, debugging=False)
    assert v["A"] == "banana"
    assert not natex.match("apple good eat banana", debugging=False)
    assert v["A"] != "apple"
Example #8
0
def test_backreference():
    natex = NatexNLU('[!$A good eat $A={apple, banana}]')
    v = {'A': 'apple'}
    assert natex.match('apple good eat banana', vars=v, debugging=False)
    assert v['A'] == 'banana'
    natex = NatexNLU('[!$A={apple, banana} good eat $A]')
    v = {'A': 'apple'}
    assert natex.match('banana good eat banana', vars=v, debugging=False)
    assert v['A'] == 'banana'
    assert not natex.match('apple good eat banana', debugging=False)
    assert v['A'] != 'apple'
Example #9
0
def test_assignment():
    v = {"A": "apple"}
    natex = NatexNLU("[!i ate a $A={orange, raddish} today]")
    assert natex.match("i ate a orange today", vars=v, debugging=True)
    assert v["A"] == "orange"
    assert natex.match("i ate a raddish today", vars=v)
    assert v["A"] == "raddish"
    assert natex.match("i ate a raddish today")
    assert not natex.match("i ate a carrot today", vars=v)
    natex = NatexNLU("[!i ate a $B={orange, raddish} today]")
    assert natex.match("i ate a raddish today", vars=v)
    assert v["B"] == "raddish"
Example #10
0
def test_assignment():
    v = {'A': 'apple'}
    natex = NatexNLU('[!i ate a $A={orange, raddish} today]')
    assert natex.match('i ate a orange today', vars=v, debugging=True)
    assert v['A'] == 'orange'
    assert natex.match('i ate a raddish today', vars=v)
    assert v['A'] == 'raddish'
    assert natex.match('i ate a raddish today')
    assert not natex.match('i ate a carrot today', vars=v)
    natex = NatexNLU('[!i ate a $B={orange, raddish} today]')
    assert natex.match('i ate a raddish today', vars=v)
    assert v['B'] == 'raddish'
Example #11
0
def test_negation():
    natex = NatexNLU("-[{bad, horrible, not}]")
    assert natex.match("i am good")
    assert natex.match("good")
    assert not natex.match("i am not good")
    assert not natex.match("i am horrible")
    assert not natex.match("bad")
    natex = NatexNLU("[!-bad [good]]")
    assert natex.match("good")
    assert not natex.match("bad but good", debugging=False)
    assert not natex.match("good but bad")
    assert natex.match("im good sort of")
    assert not natex.match("im good sort of but bad")
    assert not natex.match("im bad but also good")
Example #12
0
def test_negation():
    natex = NatexNLU('-[{bad, horrible, not}]')
    assert natex.match('i am good')
    assert natex.match('good')
    assert not natex.match('i am not good')
    assert not natex.match('i am horrible')
    assert not natex.match('bad')
    natex = NatexNLU('[!-bad [good]]')
    assert natex.match('good')
    assert not natex.match('bad but good', debugging=False)
    assert not natex.match('good but bad')
    assert natex.match('im good sort of')
    assert not natex.match('im good sort of but bad')
    assert not natex.match('im bad but also good')
Example #13
0
class UpdateRule:
    def __init__(self, precondition, postcondition='', vars=None, macros=None):
        self.precondition = None
        self.precondition_score = 1.0
        self.postcondition = None
        self.postcondition_score = None
        self.is_repeating = len(precondition) > 0 and precondition[0] == '*'
        if self.is_repeating:
            precondition = precondition[1:]
        if macros is None:
            macros = {}
        if vars is None:
            vars = {}
        self.vars = vars
        self.macros = macros
        self.set_precondition(precondition)
        if postcondition:
            self.set_postcondition(postcondition)

    def set_precondition(self, natex_string):
        natex, score = self._natex_string_score(natex_string)
        self.precondition = NatexNLU(natex, macros=self.macros)
        if score:
            self.precondition_score = score

    def set_postcondition(self, natex_string):
        natex, score = self._natex_string_score(natex_string)
        self.postcondition = NatexNLG(natex, macros=self.macros)
        self.postcondition_score = score

    def _natex_string_score(self, natex_string):
        i = natex_string.rfind(' (')
        if i != -1:
            for c in natex_string[i + len(' ('):-1]:
                if c not in set('0123456789.'):
                    return natex_string, None
            return natex_string[:i], float(natex_string[i + len(' ('):-1])
        return natex_string, None

    def satisfied(self, user_input, vars, debugging=False):
        return self.precondition.match(user_input,
                                       vars=vars,
                                       debugging=debugging)

    def apply(self, vars, debugging=False):
        if self.postcondition is not None:
            return self.postcondition.generate(vars=vars, debugging=debugging)
        else:
            return ''

    def set_vars(self, vars):
        self.vars = vars

    def __str__(self):
        return '{} ==> {}'.format(self.precondition, self.postcondition)

    def __repr__(self):
        return str(self)
Example #14
0
    class _CommonNatex(Macro):
        def __init__(self, macro_dependencies=None):
            if macro_dependencies is None:
                macro_dependencies = {}
            self.natex = NatexNLU(natex_string, macros={**macro_dependencies})
            self.natex.precache()

        def run(self, ngrams: Ngrams, vars: Dict[str, Any], args: List[Any]):
            match = self.natex.match(ngrams.text(), vars=vars)
            return bool(match)
Example #15
0
class Unexpected(Macro):
    def __init__(self):
        self.question_natex = NatexNLU(question)

    def run(self, ngrams: Ngrams, vars: Dict[str, Any], args: List[Any]):
        statement_only = 's' in args or 'state' in args or 'statement' in args
        vars['__score__'] = 0.0
        if '__previous_unx_response__' not in vars:
            vars['__previous_unx_response__'] = 'Gotcha.'
        if '__previous_unx_answer__' not in vars:
            vars['__previous_unx_answer__'] = 'None'

        is_question = self.question_natex.match(ngrams.text())
        if is_question and statement_only:
            return False
        elif is_question:
            if '_explained_stupidity_' in vars and vars[
                    '_explained_stupidity_'] == 'True':
                options = {
                    'I\'m not sure.', 'I don\'t know.',
                    'I\'m not sure about that.', ''
                } - {vars['__previous_unx_response__']}
                question_response = random.choice(list(options))
                vars['__previous_unx_answer__'] = question_response
                vars['__response_prefix__'] = question_response
            else:
                vars['_explained_stupidity_'] = 'True'
                vars['__response_prefix__'] = 'I\'m not sure.'
        elif len(ngrams.text().split()) < 3 and len(args) == 0:
            vars['__response_prefix__'] = ''
            return True
        else:
            options = {'Yeah.', 'For sure.', 'Right.', 'Uh-huh.'
                       } - {vars['__previous_unx_response__']}
            statement_response = random.choice(list(options))
            if len(args) > 0:
                statement_response = ', '.join([
                    arg
                    for arg in args if arg not in {'s', 'state', 'statement'}
                ]) + ', '
                if args[0] == 'None':
                    statement_response = ''
            vars['__previous_unx_response__'] = statement_response
            vars['__response_prefix__'] = statement_response
        return True
Example #16
0
class Unexpected(Macro):
    def __init__(self):
        self.question_natex = NatexNLU(question)

    def run(self, ngrams: Ngrams, vars: Dict[str, Any], args: List[Any]):
        statement_only = "s" in args or "state" in args or "statement" in args
        vars["__score__"] = 0.0
        if "__previous_unx_response__" not in vars:
            vars["__previous_unx_response__"] = "Gotcha."
        if "__previous_unx_answer__" not in vars:
            vars["__previous_unx_answer__"] = "None"

        is_question = self.question_natex.match(ngrams.text())
        if is_question and statement_only:
            return False
        elif is_question:
            if "_explained_stupidity_" in vars and vars[
                    "_explained_stupidity_"] == "True":
                options = {
                    "I'm not sure.", "I don't know.",
                    "I'm not sure about that.", ""
                } - {vars["__previous_unx_response__"]}
                question_response = random.choice(list(options))
                vars["__previous_unx_answer__"] = question_response
                vars["__response_prefix__"] = question_response
            else:
                vars["_explained_stupidity_"] = "True"
                vars["__response_prefix__"] = "I'm not sure."
        elif len(ngrams.text().split()) < 3 and len(args) == 0:
            vars["__response_prefix__"] = ""
            return True
        else:
            options = {"Yeah.", "For sure.", "Right.", "Uh-huh."
                       } - {vars["__previous_unx_response__"]}
            statement_response = random.choice(list(options))
            if len(args) > 0:
                statement_response = ", ".join([
                    arg
                    for arg in args if arg not in {"s", "state", "statement"}
                ]) + ", "
                if args[0] == "None":
                    statement_response = ""
            vars["__previous_unx_response__"] = statement_response
            vars["__response_prefix__"] = statement_response
        return True
Example #17
0
def test_sigdial_natex1():
    natex = NatexNLU(
        "[{have, did} you {seen, watch} $MOVIE={avengers, star wars}]",
        macros=macros)
    assert natex.match("so have you seen avengers", debugging=True)
Example #18
0
def test_flexible_sequence():
    natex = NatexNLU("[quick, fox, brown, dog]")
    assert natex.match("the quick fox jumped over the brown dog")
    assert not natex.match("fox quick brown dog")
    assert not natex.match("")
Example #19
0
def test_macro_with_args():
    v = {"X": "carrot"}
    natex = NatexNLU("#FIRSTS(apple, banana, $X)", macros=macros)
    assert natex.match("abc", vars=v, debugging=False)
    assert natex.match("cba", vars=v)
Example #20
0
def test_regex():
    natex = NatexNLU("/[a-c]+/")
    assert natex.match("abccba", debugging=False)
    assert not natex.match("abcdabcd", debugging=False)
Example #21
0
def test_rigid_sequence():
    natex = NatexNLU("[!quick, fox, brown, dog]")
    assert natex.match("quick fox brown dog")
    assert not natex.match("the quick fox brown dog")
Example #22
0
def test_kleene_plus():
    natex = NatexNLU("[!i, really+, love, sports]")
    assert natex.match("i really love sports")
    assert natex.match("i really really really love sports")
    assert not natex.match("i love sports")
Example #23
0
def test_macro_with_assignment():
    v = {}
    natex = NatexNLU("#HAPPY", macros=macros)
    assert natex.match("i am good today", vars=v, debugging=False)
    assert v["SENTIMENT"] == "happy"
    assert not natex.match("i am bad")
Example #24
0
def test_optional():
    natex = NatexNLU("[!i, really?, love sports]")
    assert natex.match("i really love sports", debugging=False)
    assert natex.match("i love sports")
    assert not natex.match("i sports")
Example #25
0
def test_kleene_star():
    natex = NatexNLU("[!i, really*, love, sports]")
    assert natex.match("i really love sports")
    assert natex.match("i love sports")
    assert natex.match("i really really really love sports", debugging=False)
    assert not natex.match("i sports")
Example #26
0
def test_conjunction():
    natex = NatexNLU("<quick, fox, brown, dog>")
    assert natex.match("the quick fox and the brown dog", debugging=False)
    assert natex.match("the brown fox and the quick dog")
    assert not natex.match("the fox and the quick dog")
Example #27
0
def test_integration_opening_component():

    kb = KnowledgeBase()
    kb.load_json_file("opening_database.json")

    receive_how_are_you = ("{"
                           "[how are you],"
                           "[how you doing],"
                           "[what about you],"
                           "[whats up with you],"
                           "[how you are],"
                           "[how about you]"
                           "}")

    feelings_pos_and_not_received_how_are_you = (
        "{"
        "[!#ONT_NEG(ont_negation), -%s, [#ONT(ont_feelings_positive)]],"
        "[! -%s, [#ONT(ont_negation)], [#ONT(ont_feelings_negative)]],"
        "#IsPositiveSentiment"
        "}" % (receive_how_are_you, receive_how_are_you))

    nlu = NatexNLU(
        feelings_pos_and_not_received_how_are_you,
        macros={
            "ONT": ONTE(kb),
            "ONT_NEG": ONT_NEG(kb)
        },
    )

    m = nlu.match("im not too bad", debugging=False)
    assert m
    m = nlu.match("great i guess", debugging=False)
    assert m
    m = nlu.match("great", debugging=False)
    assert m
    m = nlu.match("i seem to be pretty great thanks", debugging=False)
    assert m
    m = nlu.match("not bad", debugging=False)
    assert m
    m = nlu.match("thanks im not bad dude", debugging=False)
    assert m
    m = nlu.match("well how are you", debugging=False)
    assert not m
    m = nlu.match("pretty well how are you", debugging=False)
    assert not m
    m = nlu.match("not well how are you", debugging=False)
    assert not m
    m = nlu.match("how are you im not well", debugging=False)
    assert not m
    m = nlu.match("im bad", debugging=False)
    assert not m
    m = nlu.match("bad", debugging=False)
    assert not m
    m = nlu.match("im doing ok", debugging=False)
    assert not m
    feelings_neg_and_not_received_how_are_you = (
        "{"
        "[!#ONT_NEG(ont_negation), -%s, [#ONT(ont_feelings_negative)]],"
        "[! -%s, [#ONT(ont_negation)], [{#ONT(ont_feelings_positive),#ONT(ont_feelings_neutral)}]],"
        "#IsNegativeSentiment"
        "}" % (receive_how_are_you, receive_how_are_you))
    nlu = NatexNLU(
        feelings_neg_and_not_received_how_are_you,
        macros={
            "ONT": ONTE(kb),
            "ONT_NEG": ONT_NEG(kb)
        },
    )
    m = nlu.match("bad i guess", debugging=False)
    assert m
    m = nlu.match("bad", debugging=False)
    assert m
    m = nlu.match("i seem to be pretty bad thanks", debugging=False)
    assert m
    m = nlu.match("not good", debugging=False)
    assert m
    m = nlu.match("thanks im not ok dude", debugging=False)
    assert m
    m = nlu.match("great i guess", debugging=False)
    assert not m
    m = nlu.match("great", debugging=False)
    assert not m
    m = nlu.match("i seem to be pretty great thanks", debugging=False)
    assert not m
    m = nlu.match("not bad", debugging=False)
    assert not m
    m = nlu.match("thanks im not bad dude", debugging=False)
    assert not m
    m = nlu.match("ok how are you", debugging=False)
    assert not m
    m = nlu.match("pretty well how are you", debugging=False)
    assert not m
    m = nlu.match("not well how are you", debugging=False)
    assert not m
    m = nlu.match("how are you im not well", debugging=False)
    assert not m
    feelings_neutral_and_not_received_how_are_you = (
        "[!#ONT_NEG(ont_negation), -%s, [#ONT(ont_feelings_neutral)]]" %
        (receive_how_are_you))
    nlu = NatexNLU(
        feelings_neutral_and_not_received_how_are_you,
        macros={
            "ONT": ONTE(kb),
            "ONT_NEG": ONT_NEG(kb)
        },
    )
    m = nlu.match("ok i guess", debugging=False)
    assert m
    m = nlu.match("ok", debugging=False)
    assert m
    m = nlu.match("i seem to be ok thanks", debugging=False)
    assert m
    m = nlu.match("great i guess", debugging=False)
    assert not m
    m = nlu.match("great", debugging=False)
    assert not m
    m = nlu.match("i seem to be pretty great thanks", debugging=False)
    assert not m
    m = nlu.match("not bad", debugging=False)
    assert not m
    m = nlu.match("thanks im not bad dude", debugging=False)
    assert not m
    m = nlu.match("ok how are you", debugging=False)
    assert not m
    m = nlu.match("pretty well how are you", debugging=False)
    assert not m
    m = nlu.match("not well how are you", debugging=False)
    assert not m
    m = nlu.match("how are you im not well", debugging=False)
    assert not m
    m = nlu.match("bad i guess", debugging=False)
    assert not m
    m = nlu.match("bad", debugging=False)
    assert not m
    m = nlu.match("i seem to be pretty bad thanks", debugging=False)
    assert not m
    m = nlu.match("not good", debugging=False)
    assert not m
    m = nlu.match("thanks im not ok dude", debugging=False)
    assert not m
    feelings_pos_and_received_how_are_you = (
        "{"
        "[!#ONT_NEG(ont_negation), [#ONT(ont_feelings_positive)], [%s]],"
        "[#ONT(ont_negation), #ONT(ont_feelings_negative), %s],"
        "<#IsPositiveSentiment, %s>"
        "}" % (receive_how_are_you, receive_how_are_you, receive_how_are_you))
    nlu = NatexNLU(
        feelings_pos_and_received_how_are_you,
        macros={
            "ONT": ONTE(kb),
            "ONT_NEG": ONT_NEG(kb)
        },
    )
    m = nlu.match("pretty well how are you", debugging=False)
    assert m
    m = nlu.match("great how are you", debugging=False)
    assert m
    m = nlu.match("not too bad how are you", debugging=False)
    assert m
    m = nlu.match("not bad how are you", debugging=False)
    assert m
    m = nlu.match("ok i guess", debugging=False)
    assert not m
    m = nlu.match("ok", debugging=False)
    assert not m
    m = nlu.match("i seem to be ok thanks", debugging=False)
    assert not m
    m = nlu.match("great i guess", debugging=False)
    assert not m
    m = nlu.match("great", debugging=False)
    assert not m
    m = nlu.match("i seem to be pretty great thanks", debugging=False)
    assert not m
    m = nlu.match("not bad", debugging=False)
    assert not m
    m = nlu.match("thanks im not bad dude", debugging=False)
    assert not m
    m = nlu.match("ok how are you", debugging=False)
    assert not m
    m = nlu.match("not well how are you", debugging=False)
    assert not m
    m = nlu.match("how are you im not well", debugging=False)
    assert not m
    m = nlu.match("bad i guess", debugging=False)
    assert not m
    m = nlu.match("bad", debugging=False)
    assert not m
    m = nlu.match("i seem to be pretty bad thanks", debugging=False)
    assert not m
    m = nlu.match("not good", debugging=False)
    assert not m
    m = nlu.match("thanks im not ok dude", debugging=False)
    assert not m
    feelings_neg_and_received_how_are_you = (
        "{"
        "[!#ONT_NEG(ont_negation), [#ONT(ont_feelings_negative)], [%s]],"
        "[#ONT(ont_negation), {#ONT(ont_feelings_positive),#ONT(ont_feelings_neutral)}, %s],"
        "<#IsNegativeSentiment, %s>"
        "}" % (receive_how_are_you, receive_how_are_you, receive_how_are_you))
    nlu = NatexNLU(
        feelings_neg_and_received_how_are_you,
        macros={
            "ONT": ONTE(kb),
            "ONT_NEG": ONT_NEG(kb)
        },
    )
    m = nlu.match("not well how are you", debugging=False)
    assert m
    m = nlu.match("bad how are you", debugging=False)
    assert m
    m = nlu.match("im bad how are you", debugging=False)
    assert m
    m = nlu.match("ok i guess", debugging=False)
    assert not m
    m = nlu.match("ok", debugging=False)
    assert not m
    m = nlu.match("i seem to be ok thanks", debugging=False)
    assert not m
    m = nlu.match("great i guess", debugging=False)
    assert not m
    m = nlu.match("great", debugging=False)
    assert not m
    m = nlu.match("i seem to be pretty great thanks", debugging=False)
    assert not m
    m = nlu.match("not bad", debugging=False)
    assert not m
    m = nlu.match("thanks im not bad dude", debugging=False)
    assert not m
    m = nlu.match("ok how are you", debugging=False)
    assert not m
    m = nlu.match("bad i guess", debugging=False)
    assert not m
    m = nlu.match("bad", debugging=False)
    assert not m
    m = nlu.match("i seem to be pretty bad thanks", debugging=False)
    assert not m
    m = nlu.match("not good", debugging=False)
    assert not m
    m = nlu.match("thanks im not ok dude", debugging=False)
    assert not m
    m = nlu.match("pretty well how are you", debugging=False)
    assert not m
    m = nlu.match("great how are you", debugging=False)
    assert not m
    feelings_neutral_and_received_how_are_you = (
        "[!#ONT_NEG(ont_negation), [#ONT(ont_feelings_neutral)], [%s]]" %
        (receive_how_are_you))
    nlu = NatexNLU(
        feelings_neutral_and_received_how_are_you,
        macros={
            "ONT": ONTE(kb),
            "ONT_NEG": ONT_NEG(kb)
        },
    )
    m = nlu.match("ok but how are you", debugging=False)
    assert m
    m = nlu.match("not ok how are you", debugging=False)
    assert not m
    m = nlu.match("im not ok how are you", debugging=False)
    assert not m
    m = nlu.match("not well how are you", debugging=False)
    assert not m
    m = nlu.match("bad how are you", debugging=False)
    assert not m
    m = nlu.match("im bad how are you", debugging=False)
    assert not m
    m = nlu.match("ok i guess", debugging=False)
    assert not m
    m = nlu.match("ok", debugging=False)
    assert not m
    m = nlu.match("i seem to be ok thanks", debugging=False)
    assert not m
    m = nlu.match("great i guess", debugging=False)
    assert not m
    m = nlu.match("great", debugging=False)
    assert not m
    m = nlu.match("i seem to be pretty great thanks", debugging=False)
    assert not m
    m = nlu.match("not bad", debugging=False)
    assert not m
    m = nlu.match("thanks im not bad dude", debugging=False)
    assert not m
    m = nlu.match("bad i guess", debugging=False)
    assert not m
    m = nlu.match("bad", debugging=False)
    assert not m
    m = nlu.match("i seem to be pretty bad thanks", debugging=False)
    assert not m
    m = nlu.match("not good", debugging=False)
    assert not m
    m = nlu.match("thanks im not ok dude", debugging=False)
    assert not m
    m = nlu.match("pretty well how are you", debugging=False)
    assert not m
    m = nlu.match("great how are you", debugging=False)
    assert not m
    decline_share = (
        "{"
        "[#ONT(ont_negation), {talk, talking, discuss, discussing, share, sharing, tell, telling, say, saying}],"
        "[#ONT(ont_fillers), #ONT(ont_negative)],"
        "[#ONT(ont_negative)]"
        "<{dont,do not}, know>,"
        "<not, sure>"
        "}")
    nlu = NatexNLU(decline_share,
                   macros={
                       "ONT": ONTE(kb),
                       "ONT_NEG": ONT_NEG(kb)
                   })
    m = nlu.match("i dont know", debugging=False)
    assert m
    m = nlu.match("im not sure", debugging=False)
    assert m
    m = nlu.match("i dont want to tell you", debugging=False)
    assert m
    m = nlu.match("no", debugging=False)
    assert m
    m = nlu.match("i dont want to talk about it", debugging=False)
    assert m
    m = nlu.match("ok but how are you", debugging=False)
    assert not m
    m = nlu.match("not ok how are you", debugging=False)
    assert not m
    m = nlu.match("im not ok how are you", debugging=False)
    assert not m
    m = nlu.match("not well how are you", debugging=False)
    assert not m
    m = nlu.match("bad how are you", debugging=False)
    assert not m
    m = nlu.match("im bad how are you", debugging=False)
    assert not m
    m = nlu.match("ok i guess", debugging=False)
    assert not m
    m = nlu.match("ok", debugging=False)
    assert not m
    m = nlu.match("i seem to be ok thanks", debugging=False)
    assert not m
    m = nlu.match("great i guess", debugging=False)
    assert not m
    m = nlu.match("great", debugging=False)
    assert not m
    m = nlu.match("i seem to be pretty great thanks", debugging=False)
    assert not m
    m = nlu.match("not bad", debugging=False)
    assert not m
    m = nlu.match("thanks im not bad dude", debugging=False)
    assert not m
    m = nlu.match("bad i guess", debugging=False)
    assert not m
    m = nlu.match("bad", debugging=False)
    assert not m
    m = nlu.match("i seem to be pretty bad thanks", debugging=False)
    assert not m
    m = nlu.match("not good", debugging=False)
    assert not m
    m = nlu.match("thanks im not ok dude", debugging=False)
    assert not m
    m = nlu.match("pretty well how are you", debugging=False)
    assert not m
    m = nlu.match("great how are you", debugging=False)
    assert not m
Example #28
0
def test_disjunction():
    natex = NatexNLU("{quick, fox, brown, dog}")
    assert natex.match("fox", debugging=False)
    assert natex.match("dog")
    assert not natex.match("the dog")
Example #29
0
def test_sigdial_natex2():
    natex = NatexNLU("[I {watched, saw} $MOVIE={avengers, star wars}]",
                     macros=macros)
    assert natex.match("last night I saw avengers", debugging=True)
Example #30
0
def test_nested_macro():
    natex = NatexNLU("#INTER(#SET(apple, banana), #SET(apple, orange))",
                     macros=macros)
    assert natex.match("apple", debugging=False)
    assert not natex.match("orange")