def main(): import argparse parser = argparse.ArgumentParser() parser.add_argument('traintsv') parser.add_argument('generalintentscsv') parser.add_argument('testtsv') args = parser.parse_args() data = read_tsv(args.testtsv) # initialize engine engine = Engine(args.traintsv, args.generalintentscsv) correct_entities = 0. correct_intents = 0. correct_response = 0. from fuzzywuzzy import fuzz # Begin evaluation for i, line in enumerate(data): print "Query ", i query = line[0] response = line[1] intent = line[2] entities = underscore_entities(line[3].split(',')) result = engine.process_message(i, query) pprint(line) pprint(result) if len(result['entities']) >= 1 and set(entities).issubset( result['entities']): correct_entities += 1 else: print "Entities mismatch" print set(entities) print result['entities'] if intent == result['intent']: correct_intents += 1 else: print "Intent mismatch" if result['response'] is not None and \ fuzz.partial_ratio(response, result['response']) > 50: correct_response += 1 else: print "Response mismatch" print "Entity score {} Intent score {} Response score {}".format( correct_entities / len(data), correct_intents / len(data), correct_response / len(data)) sys.stdout.flush()