From 3209003675ae160a38e4f9c6597160ff6710d2ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Lamercerie?= <aurelien.lamercerie@tetras-libre.fr> Date: Tue, 4 Apr 2023 18:43:50 +0200 Subject: [PATCH] New AMR Rule: transduction.atom_relation_propagator --- tenet/scheme/amr_rule/__init__.py | 1 + .../transduction/atom_class_extractor.py | 2 +- .../transduction/atom_individual_extractor.py | 2 +- .../transduction/atom_phenomena_extractor.py | 2 +- .../transduction/atom_property_extractor.py | 2 +- .../transduction/atom_relation_propagator.py | 92 ++++++++++ tenet/scheme/amr_scheme_1.py | 6 +- tenet/tenet.log | 165 ++++++++++++++++++ tenet/transduction/net/net.py | 12 +- .../atom-extraction-devGraph-1.result.ttl | 50 +++--- tests/dev_tests/test_rule_atomic_extractor.py | 20 ++- 11 files changed, 315 insertions(+), 39 deletions(-) create mode 100644 tenet/scheme/amr_rule/transduction/atom_relation_propagator.py diff --git a/tenet/scheme/amr_rule/__init__.py b/tenet/scheme/amr_rule/__init__.py index a1d62cb4..90dc32bd 100644 --- a/tenet/scheme/amr_rule/__init__.py +++ b/tenet/scheme/amr_rule/__init__.py @@ -6,6 +6,7 @@ from scheme.amr_rule.transduction.atom_individual_extractor import * from scheme.amr_rule.transduction.atom_property_extractor import * from scheme.amr_rule.transduction.atom_value_extractor import * from scheme.amr_rule.transduction.atom_phenomena_extractor import * +from scheme.amr_rule.transduction.atom_relation_propagator import * from scheme.amr_rule.transduction.composite_class_extractor_1 import * diff --git a/tenet/scheme/amr_rule/transduction/atom_class_extractor.py b/tenet/scheme/amr_rule/transduction/atom_class_extractor.py index b1b4c07c..f40fc45f 100644 --- a/tenet/scheme/amr_rule/transduction/atom_class_extractor.py +++ b/tenet/scheme/amr_rule/transduction/atom_class_extractor.py @@ -114,7 +114,7 @@ def __construct_atom_class_net(graph, leaf, concept_name): atom_class_net.naming = concept_name # -- Relation Propagation - __propagate_relation(graph, atom_class_net, leaf) + # __propagate_relation(graph, atom_class_net, leaf) # -- Finalization atom_class_net.finalize() diff --git a/tenet/scheme/amr_rule/transduction/atom_individual_extractor.py b/tenet/scheme/amr_rule/transduction/atom_individual_extractor.py index 9fcf81ac..e6380174 100644 --- a/tenet/scheme/amr_rule/transduction/atom_individual_extractor.py +++ b/tenet/scheme/amr_rule/transduction/atom_individual_extractor.py @@ -135,7 +135,7 @@ def __construct_individual_net( individual_net.naming = __define_naming(value_label) # -- Relation Propagation - __propagate_relation(graph, individual_net, base_leaf) + # __propagate_relation(graph, individual_net, base_leaf) # -- Finalization individual_net.finalize() diff --git a/tenet/scheme/amr_rule/transduction/atom_phenomena_extractor.py b/tenet/scheme/amr_rule/transduction/atom_phenomena_extractor.py index dce87eb6..83be091f 100644 --- a/tenet/scheme/amr_rule/transduction/atom_phenomena_extractor.py +++ b/tenet/scheme/amr_rule/transduction/atom_phenomena_extractor.py @@ -119,7 +119,7 @@ def __construct_phenomena_net( phenomena_net.naming = phenomena_label # -- Relation Propagation - __propagate_relation(graph, phenomena_net, base_leaf) + # __propagate_relation(graph, phenomena_net, base_leaf) # -- Finalization phenomena_net.finalize() diff --git a/tenet/scheme/amr_rule/transduction/atom_property_extractor.py b/tenet/scheme/amr_rule/transduction/atom_property_extractor.py index f01e638b..4cf2466b 100644 --- a/tenet/scheme/amr_rule/transduction/atom_property_extractor.py +++ b/tenet/scheme/amr_rule/transduction/atom_property_extractor.py @@ -148,7 +148,7 @@ def __construct_atom_property_net(graph, base_leaf, predicate_label): atom_property_net.property_name12 = f'{naming}-of' # -- Relation Propagation - __propagate_relation(graph, atom_property_net, base_leaf) + # __propagate_relation(graph, atom_property_net, base_leaf) # -- Finalization atom_property_net.finalize() diff --git a/tenet/scheme/amr_rule/transduction/atom_relation_propagator.py b/tenet/scheme/amr_rule/transduction/atom_relation_propagator.py new file mode 100644 index 00000000..459a12fa --- /dev/null +++ b/tenet/scheme/amr_rule/transduction/atom_relation_propagator.py @@ -0,0 +1,92 @@ +#!/usr/bin/python3.10 +# -*-coding:Utf-8 -* + +#============================================================================== +# TENET: Rule to extract atomic individuals +#------------------------------------------------------------------------------ +# Net Expansion AMR rule to extract atomic individuals +# Rule: leaf{variable, concept} => atomicClass +#============================================================================== + +from rdflib import Graph + +import transduction +from transduction import net +from transduction.query_builder import generate_select_query +from transduction.naming_computer import define_composite_naming_1, define_restriction_naming + + +#============================================================================== +# Pattern Search: Leaf{variable, concept} corresponding to individual +#============================================================================== + +def __search_pattern(graph): + select_data_list = ['?net'] + clause_list = [f'?net a [rdfs:subClassOf* net:Net].'] + query_code = generate_select_query(graph, select_data_list, clause_list) + result_set = graph.query(query_code) + return query_code, result_set + + +#============================================================================== +# Useful Additional Search +#============================================================================== + +def __search_leaf_in_relation(graph, base_leaf_uri): + select_data_list = ['?inRelationRole', '?inNet'] + clause_list = [f'?inNet a [rdfs:subClassOf* net:Net].', + f'?inNet net:coverBaseNode ?inLeaf.', + ('?inLeaf', '?relation', base_leaf_uri), + f'?relation amr:hasAmrRole ?inRelationRole.'] + query_code = generate_select_query(graph, select_data_list, clause_list) + result_set = graph.query(query_code) + return query_code, result_set + + +def __search_leaf_out_relation(graph, base_leaf_uri): + select_data_list = ['?outRelationRole', '?outNet'] + clause_list = [f'?outNet a [rdfs:subClassOf* net:Net].', + f'?outNet net:coverBaseNode ?outLeaf.', + (base_leaf_uri, '?relation', '?outLeaf'), + f'?relation amr:hasAmrRole ?outRelationRole.'] + query_code = generate_select_query(graph, select_data_list, clause_list) + result_set = graph.query(query_code) + return query_code, result_set + + + +#============================================================================== +# Useful Computation Method(s) +#============================================================================== + +def __propagate_relation(graph, target_net, base_leaf): + _, in_relation_set = __search_leaf_in_relation(graph, base_leaf) + for row in in_relation_set: + target_net.input_relation_list += [(row.inNet, row.inRelationRole, _)] + _, out_relation_set = __search_leaf_out_relation(graph, base_leaf) + for row in out_relation_set: + target_net.output_relation_list += [(_, row.outRelationRole, row.outNet)] + + + +#============================================================================== +# Main Method +#============================================================================== + +def propagate_atom_relation(graph): + + # -- Rule Initialization + rule_label = 'propagate atom relations' + + # -- Search for patterns + _, pattern_set = __search_pattern(graph) + + # -- Selection Analyzing (1) + rule_triple_list = [] + for pattern in pattern_set: + target_net = net.Net(graph, pattern.net) + if len(target_net.base_node) > 0: + __propagate_relation(graph, target_net, target_net.base_node[0]) + rule_triple_list += target_net.generate_net_relation_triples() + + return rule_label, rule_triple_list \ No newline at end of file diff --git a/tenet/scheme/amr_scheme_1.py b/tenet/scheme/amr_scheme_1.py index 4ce4dd22..9075b58d 100644 --- a/tenet/scheme/amr_scheme_1.py +++ b/tenet/scheme/amr_scheme_1.py @@ -231,7 +231,8 @@ atomic_extraction_sequence = ['atomic-extraction-sequence', rule.extract_atom_individual, rule.extract_atom_property, rule.extract_atom_value, - rule.extract_atom_phenomena] + rule.extract_atom_phenomena, + rule.propagate_atom_relation] phenomena_polarity_analyze_sequence = ['phenomena_polarity_analyze_sequence', rule.analyze_phenomena_polarity_1] @@ -298,6 +299,9 @@ scheme = { 'transduction': [transduction_refinement_sequence, atomic_extraction_sequence], + # 'transduction': [transduction_refinement_sequence, + # old_atomic_extraction_sequence], + # 'transduction': [transduction_refinement_sequence, # old_atomic_extraction_sequence, # old_atomic_extraction_sequence, diff --git a/tenet/tenet.log b/tenet/tenet.log index e69de29b..417668d5 100644 --- a/tenet/tenet.log +++ b/tenet/tenet.log @@ -0,0 +1,165 @@ +- INFO - [TENET] Extraction Processing +- INFO - + === Process Initialization === +- INFO - -- Process Setting +- INFO - ----- Corpus source: /home/lamenji/Workspace/Tetras/tenet/tests/input/amrDocuments/dev/solar-system-01/SSC-01-01.stog.amr.ttl (amr) +- INFO - ----- Base output dir: /home/lamenji/Workspace/Tetras/tenet/tests/output/SolarSystemDev01-20230404/SolarSystemDev01_factoid.ttl +- INFO - ----- technical dir path: /home/lamenji/Workspace/Tetras/tenet/tests/output/SolarSystemDev01-20230404/technical-data/ +- INFO - ----- Ontology target (id): https://tenet.tetras-libre.fr/demo/01/ +- INFO - ----- Current path: /home/lamenji/Workspace/Tetras/tenet/tenet +- DEBUG - ----- Config file: /home/lamenji/Workspace/Tetras/tenet/tenet/config.xml +- DEBUG - + *** Config (Full Parameters) *** + -- Base Parameters + ----- config file: /home/lamenji/Workspace/Tetras/tenet/tenet/config.xml + ----- uuid: https://tenet.tetras-libre.fr/demo/01/ + ----- technical base name: tenet.tetras-libre.fr_demo_01 + ----- source corpus: /home/lamenji/Workspace/Tetras/tenet/tests/input/amrDocuments/dev/solar-system-01/SSC-01-01.stog.amr.ttl + ----- target reference: base + ----- process level: sentence + ----- source type: amr + -- Compositional Transduction Scheme (CTS) + ----- CTS reference: amr_scheme_1 + -- Directories + ----- base directory: ./ + ----- structure directory: ./structure/ + ----- CTS directory: ./scheme/ + ----- target frame directory: ./../input/targetFrameStructure/ + ----- input document directory: + ----- base output dir: /home/lamenji/Workspace/Tetras/tenet/tests/output/SolarSystemDev01-20230404/SolarSystemDev01_factoid.ttl + ----- output directory: /home/lamenji/Workspace/Tetras/tenet/tests/output/SolarSystemDev01-20230404/SolarSystemDev01_factoid.ttltenet.tetras-libre.fr_demo_01-20230404/ + ----- sentence output directory: /home/lamenji/Workspace/Tetras/tenet/tests/output/SolarSystemDev01-20230404/technical-data/ + ----- technical dir path: /home/lamenji/Workspace/Tetras/tenet/tests/output/SolarSystemDev01-20230404/technical-data/ + -- Config File Definition + ----- schema file: ./structure/amr-rdf-schema.ttl + ----- semantic net file: ./structure/semantic-net.ttl + ----- config param file: ./structure/config-parameters.ttl + ----- base ontology file: ./structure/base-ontology.ttl + ----- CTS file: ./scheme/amr_scheme_1.py + -- Useful References for Ontology + ----- base URI: https://tenet.tetras-libre.fr/working + ----- ontology suffix: -ontology.ttl + ----- ontology seed suffix: -ontology-seed.ttl + -- Source File Definition + ----- source sentence file: /home/lamenji/Workspace/Tetras/tenet/tests/input/amrDocuments/dev/solar-system-01/SSC-01-01.stog.amr.ttl**/*.ttl + -- Target File Definition + ----- frame ontology file: ./../input/targetFrameStructure/base-ontology.ttl + ----- frame ontology seed file: ./../input/targetFrameStructure/base-ontology-seed.ttl + -- Output + ----- ontology namespace: https://tenet.tetras-libre.fr/base-ontology/ + ----- output file: /home/lamenji/Workspace/Tetras/tenet/tests/output/SolarSystemDev01-20230404/technical-data/tenet.tetras-libre.fr_demo_01.ttl + *** - *** +- INFO - + === Extraction Processing === +- INFO - -- Work Structure Preparation +- DEBUG - --- Graph Initialization +- DEBUG - ----- Configuration Loading +- DEBUG - -------- RDF Schema (302) +- DEBUG - -------- Semantic Net Definition (513) +- DEBUG - -------- Config Parameter Definition (547) +- DEBUG - ----- Frame Ontology Loading +- DEBUG - -------- Base Ontology produced as output (577) +- DEBUG - --- Source Data Import +- DEBUG - ----- Sentence Loading +- DEBUG - -------- /home/lamenji/Workspace/Tetras/tenet/tests/input/amrDocuments/dev/solar-system-01/SSC-01-01.stog.amr.ttl (625) +- DEBUG - --- Export work graph as turtle +- DEBUG - ----- Work graph file: /home/lamenji/Workspace/Tetras/tenet/tests/output/SolarSystemDev01-20230404/technical-data/tenet.tetras-libre.fr_demo_01-0/tenet.tetras-libre.fr_demo_01.ttl +- INFO - ----- Sentence (id): SSC-01-01 +- INFO - ----- Sentence (text): The Solar System is the gravitationally bound system of the Sun and the objects that orbit it, either directly or indirectly. +- INFO - -- Loading Extraction Scheme (amr_scheme_1) +- DEBUG - ----- Step number: 3 +- INFO - -- Loading Extraction Rules (amr_rule/*) +- DEBUG - ----- Total rule number: 87 +- INFO - -- Applying extraction step: preprocessing +- INFO - --- *** November Transduction *** Sequence: amrld-correcting-sequence +- INFO - ----- fix-amr-bug-about-system-solar-planet: 5/5 new triples (630, 0:00:00.026421) +- INFO - --- *** November Transduction *** Sequence: amr-reification-sequence +- INFO - ----- reclassify-concept-1: 10/10 new triples (640, 0:00:00.114925) +- DEBUG - ----- reclassify-concept-2: 0/0 new triple (640, 0:00:00.067262) +- INFO - ----- reclassify-concept-3: 12/12 new triples (652, 0:00:00.048916) +- INFO - ----- reclassify-concept-4: 16/16 new triples (668, 0:00:00.061935) +- INFO - ----- reclassify-concept-5: 2/4 new triples (670, 0:00:00.065744) +- INFO - ----- reify-roles-as-concept: 10/10 new triples (680, 0:00:00.069138) +- INFO - ----- reclassify-existing-variable: 45/45 new triples (725, 0:00:00.049915) +- INFO - ----- add-new-variable-for-reified-concept: 8/8 new triples (733, 0:00:00.079857) +- INFO - ----- add-amr-leaf-for-reclassified-concept: 33/33 new triples (766, 0:00:00.062893) +- INFO - ----- add-amr-leaf-for-reified-concept: 8/8 new triples (774, 0:00:00.045088) +- INFO - ----- add-amr-edge-for-core-relation: 27/27 new triples (801, 0:00:00.164098) +- INFO - ----- add-amr-edge-for-reified-concept: 12/12 new triples (813, 0:00:00.147240) +- INFO - ----- add-amr-edge-for-name-relation: 5/5 new triples (818, 0:00:00.072179) +- DEBUG - ----- add-value-for-quant-relation: 0/0 new triple (818, 0:00:00.165758) +- INFO - ----- add-amr-edge-for-polarity-relation: 5/5 new triples (823, 0:00:00.073797) +- INFO - ----- update-amr-edge-role-1: 15/15 new triples (838, 0:00:00.092753) +- INFO - ----- add-amr-root: 5/5 new triples (843, 0:00:00.034398) +- DEBUG - --- Serializing graph to tenet.tetras-libre.fr_demo_01_preprocessing +- DEBUG - ----- step: preprocessing +- DEBUG - ----- id: https://tenet.tetras-libre.fr/demo/01/ +- DEBUG - ----- work_file: /home/lamenji/Workspace/Tetras/tenet/tests/output/SolarSystemDev01-20230404/technical-data/tenet.tetras-libre.fr_demo_01-0/tenet.tetras-libre.fr_demo_01_preprocessing.ttl +- DEBUG - ----- base: http://https://tenet.tetras-libre.fr/demo/01//preprocessing +- INFO - ----- 218 triples extracted during preprocessing step +- INFO - -- Applying extraction step: transduction +- INFO - --- *** February Transduction *** Sequence: atomic-extraction-sequence +- INFO - ----- extract atom classes: 30/30 new triples (873, 0:00:00.161525) +- INFO - ----- extract atom individuals: 7/7 new triples (880, 0:00:00.045482) +- INFO - ----- extract atomic properties: 75/75 new triples (955, 0:00:00.213663) +- INFO - ----- extract atom values: 8/8 new triples (963, 0:00:00.045969) +- INFO - ----- extract atom phenomena: 14/14 new triples (977, 0:00:00.066710) +- INFO - ----- propagate atom relations: 19/56 new triples (996, 0:00:00.559967) +- DEBUG - --- Serializing graph to tenet.tetras-libre.fr_demo_01_transduction +- DEBUG - ----- step: transduction +- DEBUG - ----- id: https://tenet.tetras-libre.fr/demo/01/ +- DEBUG - ----- work_file: /home/lamenji/Workspace/Tetras/tenet/tests/output/SolarSystemDev01-20230404/technical-data/tenet.tetras-libre.fr_demo_01-0/tenet.tetras-libre.fr_demo_01_transduction.ttl +- DEBUG - ----- base: http://https://tenet.tetras-libre.fr/demo/01//transduction +- INFO - ----- 153 triples extracted during transduction step +- INFO - -- Applying extraction step: generation +- INFO - --- *** November Transduction *** Sequence: main-generation-sequence +- INFO - ----- compute-uri-for-owl-declaration-1: 5/5 new triples (1001, 0:00:00.023486) +- DEBUG - ----- compute-uri-for-owl-declaration-2: 0/0 new triple (1001, 0:00:00.018719) +- INFO - ----- compute-uri-for-owl-declaration-3: 1/1 new triple (1002, 0:00:00.037601) +- DEBUG - ----- compute-uri-for-owl-declaration-4: 0/0 new triple (1002, 0:00:00.021797) +- INFO - ----- compute-uri-for-owl-declaration-5: 6/6 new triples (1008, 0:00:00.022662) +- INFO - ----- compute-uri-for-owl-declaration-6: 6/6 new triples (1014, 0:00:00.033197) +- DEBUG - ----- compute-uri-for-owl-declaration-7: 0/0 new triple (1014, 0:00:00.020214) +- INFO - ----- generate-atom-class: 12/12 new triples (1026, 0:00:00.010894) +- DEBUG - ----- classify-atom-class-1: 0/0 new triple (1026, 0:00:00.010684) +- INFO - ----- classify-atom-class-2: 4/4 new triples (1030, 0:00:00.013890) +- INFO - ----- generate-individual: 3/3 new triples (1033, 0:00:00.008628) +- DEBUG - ----- classify-individual-1: 0/0 new triple (1033, 0:00:00.007893) +- INFO - ----- classify-individual-2: 1/1 new triple (1034, 0:00:00.009806) +- INFO - ----- generate-atom-property-1: 20/20 new triples (1054, 0:00:00.014649) +- INFO - ----- generate-atom-property-12: 20/20 new triples (1074, 0:00:00.014222) +- DEBUG - ----- generate-inverse-relation: 0/0 new triple (1074, 0:00:00.007821) +- DEBUG - ----- generate-composite-class: 0/0 new triple (1074, 0:00:00.008743) +- DEBUG - ----- add-restriction-to-class-1: 0/0 new triple (1074, 0:00:00.015881) +- DEBUG - ----- add-restriction-to-class-2: 0/0 new triple (1074, 0:00:00.029840) +- DEBUG - ----- add-restriction-to-class-3: 0/0 new triple (1074, 0:00:00.060334) +- DEBUG - ----- add-restriction-to-class-4: 0/0 new triple (1074, 0:00:00.021008) +- DEBUG - ----- add-restriction-to-class-5: 0/0 new triple (1074, 0:00:00.018702) +- DEBUG - ----- add-restriction-to-class-6: 0/0 new triple (1074, 0:00:00.015892) +- INFO - --- *** February Transduction *** Sequence: property_generation_sequence +- DEBUG - ----- generate OWL property: 0/24 new triple (1074, 0:00:00.154135) +- DEBUG - --- Serializing graph to tenet.tetras-libre.fr_demo_01_generation +- DEBUG - ----- step: generation +- DEBUG - ----- id: https://tenet.tetras-libre.fr/demo/01/ +- DEBUG - ----- work_file: /home/lamenji/Workspace/Tetras/tenet/tests/output/SolarSystemDev01-20230404/technical-data/tenet.tetras-libre.fr_demo_01-0/tenet.tetras-libre.fr_demo_01_generation.ttl +- DEBUG - ----- base: http://https://tenet.tetras-libre.fr/demo/01//generation +- INFO - ----- 78 triples extracted during generation step +- DEBUG - --- Serializing graph to factoid file (/home/lamenji/Workspace/Tetras/tenet/tests/output/SolarSystemDev01-20230404/technical-data/tenet.tetras-libre.fr_demo_01-0/tenet.tetras-libre.fr_demo_01_factoid.ttl) +- DEBUG - ----- Number of factoids: 102 +- DEBUG - ----- Graph base: http://https://tenet.tetras-libre.fr/demo/01//factoid +- INFO - + === Final Ontology Generation === +- INFO - -- Making complete factoid graph by merging the result factoids +- INFO - ----- Total factoid number: 102 +- INFO - -- Serializing graph to factoid string +- INFO - ----- Graph base: http://https://tenet.tetras-libre.fr/demo/01//factoid +- INFO - -- Serializing graph to factoid file +- INFO - ----- Ontology Turtle File: /home/lamenji/Workspace/Tetras/tenet/tests/output/SolarSystemDev01-20230404/SolarSystemDev01_factoid.ttl +- INFO - + === Done === +- INFO - + *** Execution Time *** +----- Function: create_ontology_from_amrld_file (tenet.main) +----- Total Time: 0:00:03.591400 +----- Process Time: 0:00:03.536007 + *** - *** diff --git a/tenet/transduction/net/net.py b/tenet/transduction/net/net.py index 495735a4..f5b2ddcd 100644 --- a/tenet/transduction/net/net.py +++ b/tenet/transduction/net/net.py @@ -381,7 +381,7 @@ class Net: # -- Net Declaration - def __generate_net_declaration_triple(self): + def generate_net_declaration_triple(self): triple_list = [] @@ -421,7 +421,7 @@ class Net: return attr_triple_list - def __generate_net_attribute_triples(self): + def generate_net_attribute_triples(self): triple_list = [] @@ -434,7 +434,7 @@ class Net: # -- Net Relation(s) - def __generate_net_relation_triples(self): + def generate_net_relation_triples(self): triple_list = [] @@ -455,9 +455,9 @@ class Net: triple_list = [] if self.uri is not None: - triple_list += self.__generate_net_declaration_triple() - triple_list += self.__generate_net_attribute_triples() - triple_list += self.__generate_net_relation_triples() + triple_list += self.generate_net_declaration_triple() + triple_list += self.generate_net_attribute_triples() + triple_list += self.generate_net_relation_triples() return triple_list diff --git a/tests/dev_tests/test_data/atom-extraction-devGraph-1.result.ttl b/tests/dev_tests/test_data/atom-extraction-devGraph-1.result.ttl index 1109e650..aa5bf91e 100644 --- a/tests/dev_tests/test_data/atom-extraction-devGraph-1.result.ttl +++ b/tests/dev_tests/test_data/atom-extraction-devGraph-1.result.ttl @@ -466,6 +466,7 @@ net:atomProperty_bind_b a net:Atom_Property_Net ; :leaf_system_s . net:atomProperty_hasManner_m9 a net:Atom_Property_Net ; + :role_ARG0 net:atomProperty_orbit_o2 ; :role_ARG1 net:phenomena_conjunction-OR_o3 ; net:coverBaseNode :leaf_hasManner_m9 ; net:coverNode :leaf_hasManner_m9 ; @@ -496,22 +497,6 @@ net:atomProperty_hasPart_p9 a net:Atom_Property_Net ; net:targetArgumentNode :leaf_and_a, :leaf_system_s . -net:atomProperty_orbit_o2 a net:Atom_Property_Net ; - :role_ARG0 net:atomClass_object_o ; - :role_ARG1 net:atomClass_sun_s2 ; - net:coverBaseNode :leaf_orbit-01_o2 ; - net:coverNode :leaf_orbit-01_o2 ; - net:hasNaming "orbit" ; - net:hasPropertyName "orbit" ; - net:hasPropertyName01 "orbiting" ; - net:hasPropertyName10 "orbit-by" ; - net:hasPropertyName12 "orbit-of" ; - net:hasPropertyType owl:ObjectProperty ; - net:hasStructure "SSC-01-01" ; - net:isCoreRoleLinked "true" ; - net:targetArgumentNode :leaf_object_o, - :leaf_sun_s2 . - net:atomType a owl:AnnotationProperty ; rdfs:label "atom type" ; rdfs:subPropertyOf net:objectType . @@ -865,13 +850,6 @@ net:atomClass_gravitation_g a net:Atom_Class_Net ; net:hasNaming "gravitation" ; net:hasStructure "SSC-01-01" . -net:atomClass_system_p a net:Atom_Class_Net ; - net:coverBaseNode :leaf_system_p ; - net:coverNode :leaf_system_p ; - net:hasClassName "system" ; - net:hasNaming "system" ; - net:hasStructure "SSC-01-01" . - net:atomProperty_direct_d a net:Atom_Property_Net ; net:coverBaseNode :leaf_direct-02_d ; net:coverNode :leaf_direct-02_d ; @@ -897,6 +875,22 @@ net:atomProperty_direct_d2 a net:Atom_Property_Net ; net:isCoreRoleLinked "true" ; net:targetArgumentNode :value_negative . +net:atomProperty_orbit_o2 a net:Atom_Property_Net ; + :role_ARG0 net:atomClass_object_o ; + :role_ARG1 net:atomClass_sun_s2 ; + net:coverBaseNode :leaf_orbit-01_o2 ; + net:coverNode :leaf_orbit-01_o2 ; + net:hasNaming "orbit" ; + net:hasPropertyName "orbit" ; + net:hasPropertyName01 "orbiting" ; + net:hasPropertyName10 "orbit-by" ; + net:hasPropertyName12 "orbit-of" ; + net:hasPropertyType owl:ObjectProperty ; + net:hasStructure "SSC-01-01" ; + net:isCoreRoleLinked "true" ; + net:targetArgumentNode :leaf_object_o, + :leaf_sun_s2 . + net:class_list a owl:Class ; rdfs:label "classList" ; rdfs:subClassOf net:Type . @@ -1101,8 +1095,16 @@ net:atomClass_sun_s2 a net:Atom_Class_Net ; net:hasNaming "sun" ; net:hasStructure "SSC-01-01" . +net:atomClass_system_p a net:Atom_Class_Net ; + net:coverBaseNode :leaf_system_p ; + net:coverNode :leaf_system_p ; + net:hasClassName "system" ; + net:hasNaming "system" ; + net:hasStructure "SSC-01-01" . + net:atomClass_system_s a net:Atom_Class_Net ; - :role_domain net:individual_SolarSystem_p ; + :role_domain net:atomClass_system_p, + net:individual_SolarSystem_p ; net:coverBaseNode :leaf_system_s ; net:coverNode :leaf_system_s ; net:hasClassName "system" ; diff --git a/tests/dev_tests/test_rule_atomic_extractor.py b/tests/dev_tests/test_rule_atomic_extractor.py index 7ef13a90..a8564749 100644 --- a/tests/dev_tests/test_rule_atomic_extractor.py +++ b/tests/dev_tests/test_rule_atomic_extractor.py @@ -30,6 +30,7 @@ from tenet.scheme.amr_rule.transduction import atom_individual_extractor as rule from tenet.scheme.amr_rule.transduction import atom_property_extractor as rule_3 from tenet.scheme.amr_rule.transduction import atom_value_extractor as rule_4 from tenet.scheme.amr_rule.transduction import atom_phenomena_extractor as rule_5 +from tenet.scheme.amr_rule.transduction import atom_relation_propagator as rule_6 from tenet.scheme import amr_rule @@ -63,10 +64,13 @@ def add_triples_in_graph(graph, triple_list): print(f" ----- Added triples:") n = 0 + graph_length = len(graph) for triple in triple_list: - n += 1 - print_triple(triple, num=n) - graph.add(triple) + graph.add(triple) + if graph_length < len(graph): + n += 1 + graph_length = len(graph) + print_triple(triple, num=n) print(f" ----- Graph length after update: {len(graph)}") @@ -157,7 +161,9 @@ def test_rule_application(graph, rule): rule_label, new_triple_list = rule(graph) print(f' ----- label: {rule_label}') - print(f' ----- new_triple_list ({len(new_triple_list)}):') + print(f' ----- new_triple_list length: ({len(new_triple_list)})') + # for triple in new_triple_list: + # print_triple(triple) add_triples_in_graph(graph, new_triple_list) @@ -234,5 +240,11 @@ if __name__ == '__main__': print('\n *** Unit Test ***') test_rule_application(graph, rule_5.extract_atom_phenomena) print('\n \n') + + print('\n ///////////////////// Additional Tests') + print('\n *** Unit Test ***') + # test_rule_application(graph, rule_1.extract_atom_class) + # test_rule_application(graph, rule_3.extract_atom_property) + test_rule_application(graph, rule_6.propagate_atom_relation) print('\n *** - ***') \ No newline at end of file -- GitLab