diff --git a/naive-nlu/tree_nlu/knowledge_base.py b/naive-nlu/tree_nlu/knowledge_base.py index 4c27700..e00bc0d 100644 --- a/naive-nlu/tree_nlu/knowledge_base.py +++ b/naive-nlu/tree_nlu/knowledge_base.py @@ -49,6 +49,7 @@ class KnowledgeBase(object): def process(self, row): + row = row.lower() knowledge_before = copy.deepcopy(self.knowledge) logging.info("\x1b[7;32m> {} \x1b[0m".format(row)) tokens = parsing.to_tokens(row) diff --git a/naive-nlu/tree_nlu/knowledge_evaluation.py b/naive-nlu/tree_nlu/knowledge_evaluation.py index a24c07d..ed48f85 100644 --- a/naive-nlu/tree_nlu/knowledge_evaluation.py +++ b/naive-nlu/tree_nlu/knowledge_evaluation.py @@ -41,17 +41,32 @@ def get_subquery_type(knowledge_base, atom): def property_for_value(knowledge_base, value): - return knowledge_base[value]['as_property'] + if 'as_property' in knowledge_base[value]: + return knowledge_base[value]['as_property'] + + return knowledge_base[value].get('groups', set(['noun'])) def modifiable_property_from_property(prop, path, value): def getter(): nonlocal prop, path, value - return (path in prop) and prop[path] == value + if isinstance(path, set): + # If the property is from a set, it's true if any possible + # path has a element as true + return any(map(lambda possible_path: ((possible_path in prop) + and + (prop[possible_path] == value)), + path)) + else: + return (path in prop) and prop[path] == value def setter(): nonlocal prop, path, value - prop[path] = value + if isinstance(path, set): + for possible_path in path: + prop[possible_path] = value + else: + prop[path] = value return ModifiableProperty( getter=getter,