Work in progress.
* Test * More debugging * Base concept
This commit is contained in:
parent
aa7bee4c8b
commit
9d49d00688
4 changed files with 62 additions and 10 deletions
|
@ -20,6 +20,9 @@ def to_tokens(text):
|
|||
def make_template(knowledge_base, tokens, parsed):
|
||||
matcher = list(tokens)
|
||||
template = list(parsed)
|
||||
logging.debug(" -- MK TEMPLATE --")
|
||||
logging.debug("MATCHR: {}".format(matcher))
|
||||
logging.debug("TEMPLT: {}".format(template))
|
||||
for i in range(len(matcher)):
|
||||
word = matcher[i]
|
||||
if word in template:
|
||||
|
@ -56,6 +59,11 @@ def get_lower_levels(parsed):
|
|||
|
||||
# TODO: probably optimize this, it creates lots of unnecessary tuples
|
||||
def replace_position(tree, position, new_element):
|
||||
logging.debug("REPLACE POSITIONS:")
|
||||
logging.debug(" TREE : {}".format(tree))
|
||||
logging.debug("POSITION: {}".format(position))
|
||||
logging.debug("NEW ELEM: {}".format(new_element))
|
||||
logging.debug("------------------")
|
||||
|
||||
def aux(current_tree, remaining_route):
|
||||
if len(remaining_route) == 0:
|
||||
|
@ -69,7 +77,9 @@ def replace_position(tree, position, new_element):
|
|||
+ tree[step + 2:]
|
||||
)
|
||||
|
||||
return aux(tree, position)
|
||||
result = aux(tree, position)
|
||||
logging.debug("-RESULT: {}".format(result))
|
||||
return result
|
||||
|
||||
|
||||
def integrate_language(knowledge_base, example):
|
||||
|
@ -90,15 +100,23 @@ def integrate_language(knowledge_base, example):
|
|||
logging.debug("\x1b[1mSelecting\x1b[0m: {}".format(atom))
|
||||
similar = get_similar_tree(knowledge_base, atom, tokens)
|
||||
remix, (start_bounds, end_bounds) = build_remix_matrix(knowledge_base, tokens, atom, similar)
|
||||
_, matcher, result = make_template(knowledge_base, tokens, atom)
|
||||
logging.debug("Tx: {}".format(tokens))
|
||||
|
||||
after_remix = apply_remix(tokens[len(start_bounds):-len(end_bounds)], remix)
|
||||
logging.debug("--FIND MIX--")
|
||||
logging.debug("-MIX- | {}".format(remix))
|
||||
logging.debug("-FRM- | {}".format(tokens))
|
||||
logging.debug("-AFT- | {}".format(after_remix))
|
||||
|
||||
print()
|
||||
|
||||
_, matcher, result = make_template(knowledge_base, after_remix, atom)
|
||||
logging.debug("Tx: {}".format(after_remix))
|
||||
logging.debug("Mx: {}".format(matcher))
|
||||
logging.debug("Rx: {}".format(result))
|
||||
logging.debug("Remix: {}".format(remix))
|
||||
logging.debug("Sx: {}".format(start_bounds))
|
||||
logging.debug("Ex: {}".format(end_bounds))
|
||||
|
||||
after_remix = apply_remix(tokens[len(start_bounds):-len(end_bounds)], remix)
|
||||
|
||||
assert(len(after_remix) + len(start_bounds) + len(end_bounds) == len(tokens))
|
||||
logging.debug( " +-> {}".format(after_remix))
|
||||
subquery_type = knowledge_evaluation.get_subquery_type(knowledge_base.knowledge, atom)
|
||||
|
@ -115,6 +133,8 @@ def integrate_language(knowledge_base, example):
|
|||
tokens = new_tokens
|
||||
|
||||
resolved_parsed = replace_position(resolved_parsed, position, offset)
|
||||
logging.debug("RP: {}".format(resolved_parsed))
|
||||
logging.debug("AT: {}".format(atom))
|
||||
logging.debug("#########")
|
||||
|
||||
|
||||
|
@ -382,11 +402,20 @@ def resolve_fit(knowledge, fit, remaining_recursions):
|
|||
if remixed_tokens is None:
|
||||
return None
|
||||
|
||||
# if len(tokens) == 3 and tokens[2] == 'electricity':
|
||||
# logging.debug("--UNMIX--")
|
||||
# logging.debug("-MIX- | {}".format(remixer))
|
||||
# logging.debug("REMIX | {}".format(tokens))
|
||||
# logging.debug(" T O | {}".format(remixed_tokens))
|
||||
# if remixer != [0, 1, 2]:
|
||||
# return None
|
||||
|
||||
minifit = get_fit(knowledge, remixed_tokens, remaining_recursions - 1)
|
||||
if minifit is None:
|
||||
return None
|
||||
|
||||
minitokens, miniast = minifit
|
||||
logging.debug(" AST | {}".format(miniast))
|
||||
subproperty = knowledge_evaluation.resolve(knowledge.knowledge, minitokens, miniast)
|
||||
fitted.append(subproperty)
|
||||
|
||||
|
@ -424,6 +453,7 @@ def match_fit(knowledge, tokens, matcher, ast, remaining_recursions):
|
|||
|
||||
resolved_fits = []
|
||||
for fit, _ in fully_matched_segments:
|
||||
print(":::", fit)
|
||||
resolved_fit = resolve_fit(knowledge, fit, remaining_recursions)
|
||||
if resolved_fit is not None:
|
||||
resolved_fits.append(resolved_fit)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue