Add session context, increase logging.
This commit is contained in:
parent
359f858c39
commit
bb7d438e0d
2
.gitignore
vendored
2
.gitignore
vendored
@ -3,4 +3,4 @@
|
||||
*.ba?k
|
||||
*.pyc
|
||||
__pycache__
|
||||
treeNLU-*session-*.org
|
||||
treeNLU-*session*.org
|
||||
|
@ -34,7 +34,6 @@ def main():
|
||||
while True:
|
||||
try:
|
||||
data = input("> ").strip()
|
||||
session().log_step(data, 0)
|
||||
except EOFError:
|
||||
print("bye")
|
||||
break
|
||||
@ -50,16 +49,17 @@ def main():
|
||||
show_samples(knowledge)
|
||||
continue
|
||||
|
||||
ret = knowledge.process(data)
|
||||
if ret:
|
||||
result, _, _ = ret
|
||||
if not is_modifiable_property(result):
|
||||
print("<", result)
|
||||
with session().log(data):
|
||||
ret = knowledge.process(data)
|
||||
if ret:
|
||||
result, _, _ = ret
|
||||
if not is_modifiable_property(result):
|
||||
print("<", result)
|
||||
else:
|
||||
result.setter()
|
||||
print("OK")
|
||||
elif ret is None:
|
||||
print("- Couldn't understand that, oops... -")
|
||||
else:
|
||||
result.setter()
|
||||
print("OK")
|
||||
elif ret is None:
|
||||
print("- Couldn't understand that, oops... -")
|
||||
else:
|
||||
print("Unhandled response:", ret)
|
||||
print("Unhandled response:", ret)
|
||||
print("< Bye!")
|
||||
|
@ -97,45 +97,46 @@ def integrate_language(knowledge_base, example):
|
||||
break
|
||||
|
||||
for position, atom in lower_levels:
|
||||
session().annotate("\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)
|
||||
with session().log(atom):
|
||||
session().annotate("\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)
|
||||
|
||||
after_remix = apply_remix(tokens[len(start_bounds):-len(end_bounds)], remix)
|
||||
session().annotate("--FIND MIX--")
|
||||
session().annotate("-MIX- | {}".format(remix))
|
||||
session().annotate("-FRM- | {}".format(tokens))
|
||||
session().annotate("-AFT- | {}".format(after_remix))
|
||||
after_remix = apply_remix(tokens[len(start_bounds):-len(end_bounds)], remix)
|
||||
session().annotate("--FIND MIX--")
|
||||
session().annotate("-MIX- | {}".format(remix))
|
||||
session().annotate("-FRM- | {}".format(tokens))
|
||||
session().annotate("-AFT- | {}".format(after_remix))
|
||||
|
||||
session().annotate("--- TEMPLATE ---")
|
||||
session().annotate("--- TEMPLATE ---")
|
||||
|
||||
_, matcher, result = make_template(knowledge_base, after_remix, atom)
|
||||
session().annotate("Tx: {}".format(after_remix))
|
||||
session().annotate("Mx: {}".format(matcher))
|
||||
session().annotate("Rx: {}".format(result))
|
||||
session().annotate("Sx: {}".format(start_bounds))
|
||||
session().annotate("Ex: {}".format(end_bounds))
|
||||
_, matcher, result = make_template(knowledge_base, after_remix, atom)
|
||||
session().annotate("Tx: {}".format(after_remix))
|
||||
session().annotate("Mx: {}".format(matcher))
|
||||
session().annotate("Rx: {}".format(result))
|
||||
session().annotate("Sx: {}".format(start_bounds))
|
||||
session().annotate("Ex: {}".format(end_bounds))
|
||||
|
||||
|
||||
assert(len(after_remix) + len(start_bounds) + len(end_bounds) == len(tokens))
|
||||
session().annotate( " +-> {}".format(after_remix))
|
||||
subquery_type = knowledge_evaluation.get_subquery_type(knowledge_base.knowledge, atom)
|
||||
session().annotate(r" \-> <{}>".format(subquery_type))
|
||||
assert(len(after_remix) + len(start_bounds) + len(end_bounds) == len(tokens))
|
||||
session().annotate( " +-> {}".format(after_remix))
|
||||
subquery_type = knowledge_evaluation.get_subquery_type(knowledge_base.knowledge, atom)
|
||||
session().annotate(r" \-> <{}>".format(subquery_type))
|
||||
|
||||
# Clean remaining tokens
|
||||
new_tokens = list(tokens)
|
||||
offset = len(start_bounds)
|
||||
for _ in range(len(remix)):
|
||||
new_tokens.pop(offset)
|
||||
# Clean remaining tokens
|
||||
new_tokens = list(tokens)
|
||||
offset = len(start_bounds)
|
||||
for _ in range(len(remix)):
|
||||
new_tokens.pop(offset)
|
||||
|
||||
# TODO: Get a specific types for... types
|
||||
new_tokens.insert(offset, (subquery_type, remix))
|
||||
tokens = new_tokens
|
||||
# TODO: Get a specific types for... types
|
||||
new_tokens.insert(offset, (subquery_type, remix))
|
||||
tokens = new_tokens
|
||||
|
||||
resolved_parsed = replace_position(resolved_parsed, position, offset)
|
||||
session().annotate("RP: {}".format(resolved_parsed))
|
||||
session().annotate("AT: {}".format(atom))
|
||||
session().annotate("#########")
|
||||
resolved_parsed = replace_position(resolved_parsed, position, offset)
|
||||
session().annotate("RP: {}".format(resolved_parsed))
|
||||
session().annotate("AT: {}".format(atom))
|
||||
session().annotate("#########")
|
||||
|
||||
|
||||
tokens, matcher, result = make_template(knowledge_base, tokens, resolved_parsed)
|
||||
@ -298,12 +299,12 @@ def get_similar_tree(knowledge_base, atom, tokens):
|
||||
return None
|
||||
|
||||
for i, possibility in enumerate(sorted_possibilities):
|
||||
session().annotate('---- POSSIBILITY #{} ----'.format(i))
|
||||
similar_matcher, similar_result, similar_result_resolved, _, _ = possibility
|
||||
session().annotate('AST: {}'.format(similar_result))
|
||||
session().annotate('Based on: {}'.format(similar_matcher))
|
||||
session().annotate('Results on: {}'.format(similar_result_resolved))
|
||||
session().annotate('---------------------')
|
||||
with session().log(possibility):
|
||||
similar_matcher, similar_result, similar_result_resolved, _, _ = possibility
|
||||
session().annotate('AST: {}'.format(similar_result))
|
||||
session().annotate('Based on: {}'.format(similar_matcher))
|
||||
session().annotate('Results on: {}'.format(similar_result_resolved))
|
||||
session().annotate('---------------------')
|
||||
|
||||
return sorted_possibilities[0]
|
||||
|
||||
|
@ -25,21 +25,40 @@ def global_session():
|
||||
return SESSION
|
||||
|
||||
|
||||
class LevelContext:
|
||||
def __init__(self, increaser, decreaser):
|
||||
self.increaser = increaser
|
||||
self.decreaser = decreaser
|
||||
|
||||
def __enter__(self):
|
||||
self.increaser()
|
||||
|
||||
def __exit__(self, _type, _value, _traceback):
|
||||
self.decreaser()
|
||||
|
||||
|
||||
class OrgModeSession:
|
||||
def __init__(self, fname):
|
||||
self.f = open(fname, 'wt')
|
||||
self.last_level = 0
|
||||
self.level = 0
|
||||
|
||||
def annotate(self, annotation):
|
||||
self.f.write("{indentation} {data}\n".format(
|
||||
indentation=' ' * (self.last_level + 2 + 1),
|
||||
indentation=' ' * (self.level + 2 + 1),
|
||||
data=annotation))
|
||||
|
||||
def log_step(self, string, level):
|
||||
def log(self, string):
|
||||
self.f.write("{indentation} {data}\n".format(
|
||||
indentation='*' * (level + 1),
|
||||
indentation='*' * (self.level + 1),
|
||||
data=string))
|
||||
self.last_level = level
|
||||
|
||||
return LevelContext(self.inc_level, self.dec_level)
|
||||
|
||||
def inc_level(self):
|
||||
self.level += 1
|
||||
|
||||
def dec_level(self):
|
||||
self.level -= 1
|
||||
|
||||
def close(self):
|
||||
self.f.close()
|
||||
|
@ -16,13 +16,15 @@ tests = (
|
||||
|
||||
|
||||
def gen_session_name():
|
||||
now = datetime.datetime.utcnow()
|
||||
return "treeNLU-test-session-{}.org".format(
|
||||
now.strftime("%y_%m_%d %H:%M:%S_%f"))
|
||||
return "treeNLU-test-session.org"
|
||||
|
||||
|
||||
def main():
|
||||
org_mode.create_global_session(gen_session_name())
|
||||
|
||||
now = datetime.datetime.utcnow()
|
||||
org_mode.global_session().annotate("Ran on {}".format(
|
||||
now.strftime("%y_%m_%d %H:%M:%S_%f")))
|
||||
failed = False
|
||||
for test_name, test_module in tests:
|
||||
try:
|
||||
@ -39,6 +41,7 @@ def main():
|
||||
failed = True
|
||||
traceback.print_exc()
|
||||
raise
|
||||
org_mode.global_session().close()
|
||||
|
||||
if failed:
|
||||
exit(1)
|
||||
|
@ -125,7 +125,9 @@ def main():
|
||||
knowledge=base_knowledge,
|
||||
)
|
||||
|
||||
differences = knowledge.train(examples)
|
||||
for example in examples:
|
||||
with session().log(example['text']):
|
||||
differences = knowledge.train([example])
|
||||
|
||||
session().annotate("----")
|
||||
session().annotate(differences())
|
||||
|
@ -696,19 +696,20 @@ def main():
|
||||
|
||||
for i, (example_type, data) in enumerate(examples):
|
||||
if example_type == 'full_example':
|
||||
session().log_step(data['affirmation'], 0)
|
||||
affirmation = {
|
||||
'text': data['affirmation'],
|
||||
'parsed': data['parsed'][1],
|
||||
}
|
||||
question = data
|
||||
|
||||
show_progbar(i, total, data['affirmation'])
|
||||
differences = knowledge.train([affirmation])
|
||||
with session().log(data['affirmation']):
|
||||
show_progbar(i, total, data['affirmation'])
|
||||
differences = knowledge.train([affirmation])
|
||||
|
||||
show_progbar(i, total, data['text'])
|
||||
differences = knowledge.train([question])
|
||||
session().annotate(differences())
|
||||
with session().log(data['text']):
|
||||
show_progbar(i, total, data['text'])
|
||||
differences = knowledge.train([question])
|
||||
session().annotate(differences())
|
||||
|
||||
result, _, _ = knowledge.process(data['text'])
|
||||
|
||||
@ -720,20 +721,20 @@ def main():
|
||||
raise AssertionError('{} is not {}'.format(result, data['answer']))
|
||||
|
||||
elif example_type == 'text_example':
|
||||
session().log_step(data['affirmation'], 0)
|
||||
with session().log(data['affirmation']):
|
||||
show_progbar(i, total, data['affirmation'])
|
||||
affirmation = data['affirmation']
|
||||
session().annotate("Processing affirmation: {}".format(affirmation))
|
||||
_, _, _ = knowledge.process(affirmation)
|
||||
|
||||
show_progbar(i, total, data['affirmation'])
|
||||
affirmation = data['affirmation']
|
||||
session().annotate("Processing affirmation: {}".format(affirmation))
|
||||
_, _, _ = knowledge.process(affirmation)
|
||||
with session().log(data['question']):
|
||||
show_progbar(i, total, data['question'])
|
||||
question = data['question']
|
||||
session().annotate("Processing question : {}".format(question))
|
||||
result, _, _ = knowledge.process(question)
|
||||
|
||||
show_progbar(i, total, data['question'])
|
||||
question = data['question']
|
||||
session().annotate("Processing question : {}".format(question))
|
||||
result, _, _ = knowledge.process(question)
|
||||
|
||||
if result != data['answer']:
|
||||
raise AssertionError('{} is not {}'.format(result, data['answer']))
|
||||
if result != data['answer']:
|
||||
raise AssertionError('{} is not {}'.format(result, data['answer']))
|
||||
|
||||
else:
|
||||
raise NotImplementedError('Example type: {}'.format(example_type))
|
||||
|
Loading…
Reference in New Issue
Block a user