def value_for_text(self, t, rp=default_rp): engine = rp.idd3_engine() graphs = rp.dep_trees(t) raw_words = rp.raw_words(t) total_nprops = 0 for index in range(len(graphs)): relations = [] for relation in graphs[index].nodes.values(): relations.append(idd3.Relation(**relation)) # print('Propositions:') try: engine.analyze(relations) # for i, prop in enumerate(engine.props): # print(str(i + 1) + ' ' + str(prop)) n_props = len(engine.props) except Exception as e: n_props = 0 # print(len(sents[index]), n_props / len(sents[index]) ) total_nprops += n_props return total_nprops / len(raw_words) if raw_words else 0
def value_for_text(self, t, rp=default_rp): engine = rp.idd3_engine() graphs = rp.dep_trees(t) sents = rp.tagged_words_in_sents(t) id_values = [] for index in range(len(graphs)): relations = [] for relation in graphs[index].nodes.values(): relations.append(idd3.Relation(**relation)) # print('Propositions:') try: engine.analyze(relations) # for i, prop in enumerate(engine.props): # print(str(i + 1) + ' ' + str(prop)) except Exception as e: LOGGER.error('{0} in engine.analyze: {1}'.format( e.__class__.__name__, e)) n_props = len(engine.props) if hasattr(engine, 'props') else 0 # print(len(sents[index]), n_props / len(sents[index]) ) id_values.append(n_props / len(sents[index]) if sents[index] else 0) return sum(id_values) / len(id_values) if id_values else 0
def test(): with open('expected.txt', mode='r') as expected_file: expected = expected_file.readlines() up_to_index = len(expected) graphs = nltk.parse.dependencygraph.DependencyGraph.load('corpus.conll') engine = idd3.Engine(idd3.rules.all_rulesets, idd3.transform.all_transformations) for i in range(up_to_index): relations = [] for relation in graphs[i].nodelist: relations.append(idd3.Relation(**relation)) engine.analyze(relations) props = [prop.content for prop in engine.props] exp = eval(expected[i]) # Propositions should be equal to their expected values. assert props == exp unprocessed_relations = engine.get_unprocessed_relations(relations) # No relation should be left unprocessed. assert unprocessed_relations == [] kinds = [prop.kind for prop in engine.props] # Relations must have a specific kind. assert 'PROP' not in kinds