def evaluate_extraction(input_file, output_file): logger = logging.getLogger() parser_server = 'http://localhost:8084' count = 0 f_in = codecs.open(input_file, encoding='utf-8') f_out = open(output_file, 'w') writer = unicodecsv.writer(f_out) for line in f_in: line = line.strip() if line: logger.debug(line) try: extractor = RelationExtractor(line, parser_server, logger, entity_linking_flag=False) except: logger.error(u'Failed to parse the sentence', exc_info=True) else: count += 1 extractor.extract_spo() for relation in extractor.relations: logger.debug(relation.lemma) row = [''] * 5 row[0], row[1] = count, line row[2:5] = relation.lemma writer.writerow(row) f_in.close() f_out.close()
def process_file(filename, parser_server): logger = logging.getLogger('single_relation_extraction') parser = SafeConfigParser() parser.read('config/mysql_config.ini') mysql_config = { 'host': parser.get('MySQL', 'host'), 'user': parser.get('MySQL', 'user'), 'passwd': parser.get('MySQL', 'passwd'), 'db': 'bio-kb' } db = MySQLdb.connect(**mysql_config) cur = db.cursor() f_in = codecs.open(filename, encoding='utf-8') for line in f_in: sent = line.strip() if sent: logger.info(u'{}: {}'.format(filename, sent)) try: extractor = RelationExtractor(sent, parser_server, logger) except: logger.error(u'Failed to extract relations.', exc_info=True) else: extractor.extract_spo() for relation in extractor.relations: logger.info(u'RELATION: {}'.format(relation)) try: cur.execute(insert_relation_sql(sent, relation)) db.commit() except MySQLdb.Error, e: try: logger.error(u'MySQL Error [{}]: {}'.format(e.args[0], e.args[1]), exc_info=True) except IndexError: logger.error(u'MySQL Error: {}'.format(str(e)), exc_info=True)