diff --git a/naive-nlu/tree_nlu/knowledge_evaluation.py b/naive-nlu/tree_nlu/knowledge_evaluation.py index 524bd56..031fd2d 100644 --- a/naive-nlu/tree_nlu/knowledge_evaluation.py +++ b/naive-nlu/tree_nlu/knowledge_evaluation.py @@ -208,6 +208,26 @@ def property_has_value(knowledge_base, elements, subj, prop, value): element=value ) +def perform_verb_over_object(knowledge_base, elements, subj, verb, obj): + subj = resolve(knowledge_base, elements, subj) + verb = resolve(knowledge_base, elements, verb) + obj = resolve(knowledge_base, elements, obj) + + if subj not in knowledge_base: + knowledge_base[subj] = {'groups': set()} + + if 'performs-over' not in knowledge_base[subj]: + knowledge_base[subj]['performs-over'] = {} + + if verb not in knowledge_base[subj]['performs-over']: + knowledge_base[subj]['performs-over'][verb] = set() + + return modifiable_element_for_existance_in_set( + container=knowledge_base[subj]['performs-over'], + set_name=verb, + element=obj + ) + knowledge_ingestion = { "exists-property-with-value": exists_property_with_value, @@ -216,6 +236,7 @@ knowledge_ingestion = { "question": question, "implies": implies, "property-has-value": property_has_value, + "perform-verb-over-object": perform_verb_over_object, } diff --git a/naive-nlu/tree_nlu/tests/gac_100.py b/naive-nlu/tree_nlu/tests/gac_100.py index b2c31e0..7dc7b60 100644 --- a/naive-nlu/tree_nlu/tests/gac_100.py +++ b/naive-nlu/tree_nlu/tests/gac_100.py @@ -85,12 +85,13 @@ examples = [ lambda knowledge: _assert('man' in knowledge.knowledge['socrates']['groups']) ),], }), - # { - # "text": "Computers use electricity?", - # "affirmation": "Computers use electricity?", - # "parsed": (), - # "answer": None, - # }, + ('full_example',{ + "text": "Computers use electricity?", + "affirmation": "Computers use electricity", + "parsed": ("question", + ('perform-verb-over-object', 'computers', 'use', 'electricity')), + "answer": True, + }), # { # "text": "The dominant language in france is french?", # "affirmation": "The dominant language in france is french?", @@ -664,6 +665,12 @@ base_knowledge = { 'fly': { "groups": {'verb'}, }, + 'use': { + "groups": {'verb'}, + }, + 'electricity': { + "groups": {}, + }, } def main():