Add session context, increase logging.

This commit is contained in:
kenkeiras 2017-10-01 17:10:50 +02:00
parent 359f858c39
commit bb7d438e0d
7 changed files with 103 additions and 77 deletions

2
.gitignore vendored
View File

@ -3,4 +3,4 @@
*.ba?k *.ba?k
*.pyc *.pyc
__pycache__ __pycache__
treeNLU-*session-*.org treeNLU-*session*.org

View File

@ -34,7 +34,6 @@ def main():
while True: while True:
try: try:
data = input("> ").strip() data = input("> ").strip()
session().log_step(data, 0)
except EOFError: except EOFError:
print("bye") print("bye")
break break
@ -50,6 +49,7 @@ def main():
show_samples(knowledge) show_samples(knowledge)
continue continue
with session().log(data):
ret = knowledge.process(data) ret = knowledge.process(data)
if ret: if ret:
result, _, _ = ret result, _, _ = ret

View File

@ -97,6 +97,7 @@ def integrate_language(knowledge_base, example):
break break
for position, atom in lower_levels: for position, atom in lower_levels:
with session().log(atom):
session().annotate("\x1b[1mSelecting\x1b[0m: {}".format(atom)) session().annotate("\x1b[1mSelecting\x1b[0m: {}".format(atom))
similar = get_similar_tree(knowledge_base, atom, tokens) similar = get_similar_tree(knowledge_base, atom, tokens)
remix, (start_bounds, end_bounds) = build_remix_matrix(knowledge_base, tokens, atom, similar) remix, (start_bounds, end_bounds) = build_remix_matrix(knowledge_base, tokens, atom, similar)
@ -298,7 +299,7 @@ def get_similar_tree(knowledge_base, atom, tokens):
return None return None
for i, possibility in enumerate(sorted_possibilities): for i, possibility in enumerate(sorted_possibilities):
session().annotate('---- POSSIBILITY #{} ----'.format(i)) with session().log(possibility):
similar_matcher, similar_result, similar_result_resolved, _, _ = possibility similar_matcher, similar_result, similar_result_resolved, _, _ = possibility
session().annotate('AST: {}'.format(similar_result)) session().annotate('AST: {}'.format(similar_result))
session().annotate('Based on: {}'.format(similar_matcher)) session().annotate('Based on: {}'.format(similar_matcher))

View File

@ -25,21 +25,40 @@ def global_session():
return 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: class OrgModeSession:
def __init__(self, fname): def __init__(self, fname):
self.f = open(fname, 'wt') self.f = open(fname, 'wt')
self.last_level = 0 self.level = 0
def annotate(self, annotation): def annotate(self, annotation):
self.f.write("{indentation} {data}\n".format( self.f.write("{indentation} {data}\n".format(
indentation=' ' * (self.last_level + 2 + 1), indentation=' ' * (self.level + 2 + 1),
data=annotation)) data=annotation))
def log_step(self, string, level): def log(self, string):
self.f.write("{indentation} {data}\n".format( self.f.write("{indentation} {data}\n".format(
indentation='*' * (level + 1), indentation='*' * (self.level + 1),
data=string)) 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): def close(self):
self.f.close() self.f.close()

View File

@ -16,13 +16,15 @@ tests = (
def gen_session_name(): def gen_session_name():
now = datetime.datetime.utcnow() return "treeNLU-test-session.org"
return "treeNLU-test-session-{}.org".format(
now.strftime("%y_%m_%d %H:%M:%S_%f"))
def main(): def main():
org_mode.create_global_session(gen_session_name()) 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 failed = False
for test_name, test_module in tests: for test_name, test_module in tests:
try: try:
@ -39,6 +41,7 @@ def main():
failed = True failed = True
traceback.print_exc() traceback.print_exc()
raise raise
org_mode.global_session().close()
if failed: if failed:
exit(1) exit(1)

View File

@ -125,7 +125,9 @@ def main():
knowledge=base_knowledge, knowledge=base_knowledge,
) )
differences = knowledge.train(examples) for example in examples:
with session().log(example['text']):
differences = knowledge.train([example])
session().annotate("----") session().annotate("----")
session().annotate(differences()) session().annotate(differences())

View File

@ -696,16 +696,17 @@ def main():
for i, (example_type, data) in enumerate(examples): for i, (example_type, data) in enumerate(examples):
if example_type == 'full_example': if example_type == 'full_example':
session().log_step(data['affirmation'], 0)
affirmation = { affirmation = {
'text': data['affirmation'], 'text': data['affirmation'],
'parsed': data['parsed'][1], 'parsed': data['parsed'][1],
} }
question = data question = data
with session().log(data['affirmation']):
show_progbar(i, total, data['affirmation']) show_progbar(i, total, data['affirmation'])
differences = knowledge.train([affirmation]) differences = knowledge.train([affirmation])
with session().log(data['text']):
show_progbar(i, total, data['text']) show_progbar(i, total, data['text'])
differences = knowledge.train([question]) differences = knowledge.train([question])
session().annotate(differences()) session().annotate(differences())
@ -720,13 +721,13 @@ def main():
raise AssertionError('{} is not {}'.format(result, data['answer'])) raise AssertionError('{} is not {}'.format(result, data['answer']))
elif example_type == 'text_example': elif example_type == 'text_example':
session().log_step(data['affirmation'], 0) with session().log(data['affirmation']):
show_progbar(i, total, data['affirmation']) show_progbar(i, total, data['affirmation'])
affirmation = data['affirmation'] affirmation = data['affirmation']
session().annotate("Processing affirmation: {}".format(affirmation)) session().annotate("Processing affirmation: {}".format(affirmation))
_, _, _ = knowledge.process(affirmation) _, _, _ = knowledge.process(affirmation)
with session().log(data['question']):
show_progbar(i, total, data['question']) show_progbar(i, total, data['question'])
question = data['question'] question = data['question']
session().annotate("Processing question : {}".format(question)) session().annotate("Processing question : {}".format(question))