OverviewFilesCommitsIssuesDocsReleasesPeers

opencog-ure / scripts / ure / extract-values-from-trace.py

61 lines · python ref:
#!/usr/bin/env python2

# Given a trace extracted from a log file prints all FCS values. This
# is convenient to feed and-BIT fitness functions like
# AndBITFitness::Trace.


import sys
import re

#############
# Constants #
#############

# Usage message
usage = "Usage: " + sys.argv[0] + " LOG_TRACE_FILE"

# Useful regex
timestamp_re = r'\[\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}:\d{3}\]'
debug_re = r'\[DEBUG\]'
ure_re = r'\[URE\]'
select_andbit_re = r'Selected and-BIT for expansion:'
from_re = r'({} )?{} {} {}'.format(timestamp_re, debug_re, ure_re, select_andbit_re)
from_cre = re.compile(from_re)
expand_andbit_re = r'Expanded forward chainer strategy:'
select_bn_re = r'Selected BIT-node for expansion:'
inter_re = r'({} )?{} {} {}'.format(timestamp_re, debug_re, ure_re, select_bn_re)
inter_cre = re.compile(inter_re)
handle_re = r'\) ; \[(\d+)\]\[\d+\]'
handle_cre = re.compile(handle_re)

########
# Main #
########

if len(sys.argv) != 2:
    print usage
    exit(1)

logtracefile = sys.argv[1]

# Display all selected and-BITs for expansion
src = ''
for l in open(logtracefile):
    ls = l.rstrip()

    # Extract from fcs handle
    m = from_cre.match(ls)
    if m:
        src = 'from'
        continue
    m = inter_cre.match(ls)
    if m:
        src = ''
        continue
    m = handle_cre.match(ls)
    if m:
        if src == 'from':
            print m.group(1)
            continue