From d3b604efca6599fe1cdaf154b596747807e3368f Mon Sep 17 00:00:00 2001 From: kenkeiras Date: Mon, 29 May 2017 23:23:53 +0200 Subject: [PATCH] Visualize & use more data. * Visualize more steps in the process. * Collect more possibilities in get_fit(). --- naive-nlu/tree_nlu/parsing.py | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/naive-nlu/tree_nlu/parsing.py b/naive-nlu/tree_nlu/parsing.py index c5b71fb..f164d0b 100644 --- a/naive-nlu/tree_nlu/parsing.py +++ b/naive-nlu/tree_nlu/parsing.py @@ -297,6 +297,14 @@ def get_similar_tree(knowledge_base, atom, tokens): if len(sorted_possibilities) < 1: return None + for i, possibility in enumerate(sorted_possibilities): + logging.debug('---- POSSIBILITY #{} ----'.format(i)) + similar_matcher, similar_result, similar_result_resolved, _, _ = possibility + logging.debug('AST: {}'.format(similar_result)) + logging.debug('Based on: {}'.format(similar_matcher)) + logging.debug('Results on: {}'.format(similar_result_resolved)) + logging.debug('---------------------') + return sorted_possibilities[0] @@ -356,7 +364,7 @@ def reverse_remix(tree_section, remix): offset = 0 for origin in remix: if isinstance(origin, int): - if origin >= len(tree_section): + if (origin + offset) >= len(tree_section): return None result_section.append(copy.deepcopy(tree_section[origin + offset])) @@ -367,13 +375,18 @@ def reverse_remix(tree_section, remix): def get_fit(knowledge, tokens, remaining_recursions=parameters.MAX_RECURSIONS): + results = [] for matcher, ast in knowledge.trained: result = match_fit(knowledge, tokens, matcher, ast, remaining_recursions) - if result is not None: - return result - return None + if result is not None: + results.append(result) + print("XXX", result) + + print(' - ' + '\n - '.join(map(str, results))) + if len(results) > 0: + return results[0] def is_definite_minisegment(minisegment): @@ -424,6 +437,7 @@ def resolve_fit(knowledge, fit, remaining_recursions): def match_fit(knowledge, tokens, matcher, ast, remaining_recursions): segment_possibilities = [([], tokens)] # Matched tokens, remaining tokens + indent = ' ' * (parameters.MAX_RECURSIONS - remaining_recursions) for minisegment in matcher: possibilities_after_round = [] for matched_tokens, remaining_tokens in segment_possibilities: @@ -453,7 +467,11 @@ def match_fit(knowledge, tokens, matcher, ast, remaining_recursions): resolved_fits = [] for fit, _ in fully_matched_segments: - print(":::", fit) + print(indent + ":::", fit) # REMIXES HAVE TO BE APPLIED BEFORE!!! + + print(indent + '*' * 20) + for fit, _ in fully_matched_segments: + print(indent + ":::", fit) # REMIXES HAVE TO BE APPLIED BEFORE!!! resolved_fit = resolve_fit(knowledge, fit, remaining_recursions) if resolved_fit is not None: resolved_fits.append(resolved_fit)