Added concept 'isa' other_concept functionality
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
import core.builtin_helpers
|
||||
from core.builtin_concepts import ParserResultConcept, BuiltinConcepts
|
||||
from evaluators.BaseEvaluator import OneReturnValueEvaluator
|
||||
from parsers.DefaultParser import IsaConceptNode
|
||||
|
||||
ALL_STEPS = [
|
||||
BuiltinConcepts.BEFORE_PARSING,
|
||||
BuiltinConcepts.PARSING,
|
||||
BuiltinConcepts.EVALUATION,
|
||||
BuiltinConcepts.AFTER_EVALUATION
|
||||
]
|
||||
|
||||
|
||||
class AddConceptInSetEvaluator(OneReturnValueEvaluator):
|
||||
"""
|
||||
Tells that a concept is a part of a set
|
||||
"""
|
||||
NAME = "AddConceptInSet"
|
||||
|
||||
def __init__(self):
|
||||
super().__init__(self.NAME, 50)
|
||||
|
||||
def matches(self, context, return_value):
|
||||
return return_value.status and \
|
||||
isinstance(return_value.value, ParserResultConcept) and \
|
||||
isinstance(return_value.value.value, IsaConceptNode)
|
||||
|
||||
def eval(self, context, return_value):
|
||||
|
||||
def _resolve(name_node):
|
||||
ret_val = sheerka.ret(
|
||||
self.name,
|
||||
True,
|
||||
sheerka.new(BuiltinConcepts.USER_INPUT, body=name_node.tokens, user_name="N/A"))
|
||||
sub_context = context.push(desc=f"Recognizing '{name_node}'")
|
||||
r = sheerka.execute(sub_context, ret_val, ALL_STEPS, self.verbose_log)
|
||||
return core.builtin_helpers.expect_one(context, r)
|
||||
|
||||
isa_node = return_value.value.value
|
||||
sheerka = context.sheerka
|
||||
context.log(self.log, f"Adding a concept {isa_node.concept} to set {isa_node.set}", self.name)
|
||||
|
||||
# Try to recognize the concept
|
||||
res = _resolve(isa_node.concept)
|
||||
if not res.status:
|
||||
return sheerka.ret(
|
||||
self.name,
|
||||
False,
|
||||
sheerka.new(BuiltinConcepts.UNKNOWN_CONCEPT, body=str(isa_node.concept)),
|
||||
parents=[return_value])
|
||||
concept = res.value
|
||||
|
||||
res = _resolve(isa_node.set)
|
||||
if not res.status:
|
||||
return sheerka.ret(
|
||||
self.name,
|
||||
False,
|
||||
sheerka.new(BuiltinConcepts.UNKNOWN_CONCEPT, body=str(isa_node.set)),
|
||||
parents=[return_value])
|
||||
concept_set = res.value
|
||||
|
||||
res = sheerka.add_concept_to_set(context, concept, concept_set, self.verbose_log)
|
||||
if not res.status:
|
||||
context.log(self.log, f"Failed. Reason: {sheerka.value(res.body)}.", self.name)
|
||||
else:
|
||||
context.log(self.log, f"Concept added.", self.name)
|
||||
|
||||
return res
|
||||
|
||||
|
||||
Reference in New Issue
Block a user