diff --git a/tenet/scheme/amr_rule/transduction/atomic_class_extractor.py b/tenet/scheme/amr_rule/transduction/atomic_class_extractor.py index b6f44e65b1ef098eafb12ebabfab909b05305d00..b5b52f205df6eb19eafb4a8869f359bafbea65a3 100644 --- a/tenet/scheme/amr_rule/transduction/atomic_class_extractor.py +++ b/tenet/scheme/amr_rule/transduction/atomic_class_extractor.py @@ -54,33 +54,34 @@ def __search_structure(graph): query_code = __structure_query_code(graph) result_set = graph.query(query_code) return result_set + +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 -#============================================================================== -# Relation Propagation -#============================================================================== - -def __filter_relation(relation_list): - result_list = [] - for relation in relation_list: - check = True - (s, p, o) = relation - if s == o: check = False - if check: result_list.append(relation) - return result_list -def __propagate_relation(target_net, leaf): - # TODO - #target_net.output_relation_list = None - pass - - - #============================================================================== -# Construct Method(s) -#============================================================================== +# Useful Computation Method(s) +#============================================================================== def __get_structure(graph): structure = 'unknown' @@ -90,9 +91,19 @@ def __get_structure(graph): return structure -def __define_naming(todo): - pass - +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)] + + + +#============================================================================== +# Construct Method(s) +#============================================================================== def __construct_atom_class_net(graph, leaf, concept_name): @@ -109,7 +120,7 @@ def __construct_atom_class_net(graph, leaf, concept_name): atom_class_net.naming = concept_name # -- Relation Propagation - __propagate_relation(atom_class_net, leaf) + __propagate_relation(graph, atom_class_net, leaf) # -- Finalization atom_class_net.finalize() diff --git a/tenet/scheme/amr_rule/transduction/atomic_individual_extractor.py b/tenet/scheme/amr_rule/transduction/atomic_individual_extractor.py index 2d4a579df2d6093a801ceb2dfd4573afb8a5422e..d8e85e1d16cb5f75c9d217d35690a2f1a3750069 100644 --- a/tenet/scheme/amr_rule/transduction/atomic_individual_extractor.py +++ b/tenet/scheme/amr_rule/transduction/atomic_individual_extractor.py @@ -60,32 +60,33 @@ def __search_structure(graph): query_code = __structure_query_code(graph) result_set = graph.query(query_code) return result_set + +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 -#============================================================================== -# Relation Propagation -#============================================================================== - -def __filter_relation(relation_list): - result_list = [] - for relation in relation_list: - check = True - (s, p, o) = relation - if s == o: check = False - if check: result_list.append(relation) - return result_list - - -def __propagate_relation(target_net, leaf): - # TODO - #target_net.output_relation_list = None - pass - - + #============================================================================== -# Construct Method(s) +# Useful Computation Method(s) #============================================================================== def __get_structure(graph): @@ -96,10 +97,20 @@ def __get_structure(graph): return structure -def __define_naming(todo): - pass +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)] + +#============================================================================== +# Construct Method(s) +#============================================================================== + def __construct_individual_net( graph, base_leaf, concept_name, value_label, mother_class_net): @@ -117,7 +128,7 @@ def __construct_individual_net( individual_net.naming = concept_name # -- Relation Propagation - __propagate_relation(individual_net, base_leaf) + __propagate_relation(graph, individual_net, base_leaf) # -- Finalization individual_net.finalize() diff --git a/tenet/scheme/amr_rule/transduction/atomic_property_extractor.py b/tenet/scheme/amr_rule/transduction/atomic_property_extractor.py index 48162b57fa39e2d13b836ca3b70d429fb47ddfcb..3304ed06cb86c0d7557f60b3376207ee47a6e2ff 100644 --- a/tenet/scheme/amr_rule/transduction/atomic_property_extractor.py +++ b/tenet/scheme/amr_rule/transduction/atomic_property_extractor.py @@ -70,32 +70,34 @@ def __search_target_argument(graph, base_leaf_uri): query_code = __target_argument_pattern_query_code(graph, base_leaf_uri) result_set = graph.query(query_code) return result_set + +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 + -#============================================================================== -# Relation Propagation -#============================================================================== +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 -def __filter_relation(relation_list): - result_list = [] - for relation in relation_list: - check = True - (s, p, o) = relation - if s == o: check = False - if check: result_list.append(relation) - return result_list -def __propagate_relation(target_net, leaf): - # TODO - #target_net.output_relation_list = None - pass - - - #============================================================================== -# Construct Method(s) -#============================================================================== +# Useful Computation Method(s) +#============================================================================== def __get_structure(graph): structure = 'unknown' @@ -110,6 +112,22 @@ def __define_naming(predicate_label): return naming +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)] + + + +#============================================================================== +# Construct Method(s) +#============================================================================== + def __construct_atom_property_net(graph, base_leaf, predicate_label): # -- Net Composition @@ -136,7 +154,7 @@ def __construct_atom_property_net(graph, base_leaf, predicate_label): atom_property_net.property_name12 = f'{naming}-of' # -- Relation Propagation - __propagate_relation(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/phenomena_or_analyzer_1.py b/tenet/scheme/amr_rule/transduction/phenomena_or_analyzer_1.py index d9132ed2dbb2fc897ef0aa465dec9b0bf3f0b72c..6d8809d45f6ebb5bd9a5fb9774d4f8afc1f93452 100644 --- a/tenet/scheme/amr_rule/transduction/phenomena_or_analyzer_1.py +++ b/tenet/scheme/amr_rule/transduction/phenomena_or_analyzer_1.py @@ -17,7 +17,7 @@ from transduction.naming_computer import define_composite_naming_1, define_restr #============================================================================== -# Select Pattern: property(class, or_phenomena) +# Pattern Search: property(class, or_phenomena) #============================================================================== def __rule_pattern_query_code(graph): @@ -41,7 +41,7 @@ def __search_pattern(graph): #============================================================================== -# Search for phenomena operators +# Useful Additional Search #============================================================================== def __class_op_pattern_query_code(graph, phenomena_net_uri, num): @@ -63,8 +63,8 @@ def __search_class_phenomena_operator(graph, phenomena_net_uri): #============================================================================== -# Relation Propagation -#============================================================================== +# Useful Computation Method(s) +#============================================================================== def __filter_relation(relation_list): result_list = [] @@ -84,7 +84,7 @@ def __propagate_relation(target_net, base_net): #============================================================================== -# Construct Methods: construction of composite class net +# Construct Method(s) #============================================================================== def __construct_restriction_net(graph, property_net_1, property_net_2): diff --git a/tenet/transduction/net/net.py b/tenet/transduction/net/net.py index 1010995ccce9b8f7acff52d19902fe6e9458f0ba..b1ab0264d6f796d6e16b28ad346cf1230b87d542 100644 --- a/tenet/transduction/net/net.py +++ b/tenet/transduction/net/net.py @@ -248,10 +248,11 @@ class Net: def input_relation_list(self): if self._input_relation_list is None: self._input_relation_list = [] - query_result = self.__find_input_relations_in_graph() - for row in query_result: - relation = (row.in_net, row.in_rel, self.uri) - self._input_relation_list.append(relation) + if self.uri is not None: + query_result = self.__find_input_relations_in_graph() + for row in query_result: + relation = (row.in_net, row.in_rel, self.uri) + self._input_relation_list.append(relation) return self._input_relation_list @input_relation_list.setter @@ -279,10 +280,11 @@ class Net: def output_relation_list(self): if self._output_relation_list is None: self._output_relation_list = [] - query_result = self.__find_output_relations_in_graph() - for row in query_result: - relation = (self.uri, row.out_rel, row.out_net) - self._output_relation_list.append(relation) + if self.uri is not None: + query_result = self.__find_output_relations_in_graph() + for row in query_result: + relation = (self.uri, row.out_rel, row.out_net) + self._output_relation_list.append(relation) return self._output_relation_list @output_relation_list.setter @@ -375,7 +377,24 @@ class Net: #-------------------------------------------------------------------------- # Triple Generation Method - #-------------------------------------------------------------------------- + #-------------------------------------------------------------------------- + + # -- Net Declaration + + def __generate_net_declaration_triple(self): + + triple_list = [] + + rdf_type_uri = produce_uriref(self.support_graph, RDF.type) + triple_list.append((self.uri, rdf_type_uri, self.type_uri)) + + if self.is_deprecated(): + triple_list.append(self.__define_deprecated_clause()) + + return triple_list + + + # -- Net Attribute(s) def __get_attr_value_list(self, attr_key): attr_value_list = [] @@ -413,23 +432,23 @@ class Net: return triple_list - def __generate_net_declaration_triple(self): + # -- Net Relation(s) + + def __generate_net_relation_triples(self): triple_list = [] - rdf_type_uri = produce_uriref(self.support_graph, RDF.type) - triple_list.append((self.uri, rdf_type_uri, self.type_uri)) - - if self.is_deprecated(): - triple_list.append(self.__define_deprecated_clause()) - + rdf_type_uri = produce_uriref(self.support_graph, RDF.type) + net_relation_uri = produce_uriref(self.support_graph, 'net:Relation') + for triple in self.input_relation_list + self.output_relation_list: + _, relation, _ = triple + triple_list.append((relation, rdf_type_uri, net_relation_uri)) + triple_list.append(triple) + return triple_list - def __generate_net_relation_triples(self): - triple_list = self.input_relation_list + self.output_relation_list - return triple_list - + # -- Generation Triple Definition def generate_triple_definition(self): 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 ccdb03d15d4fc0948c504a255c379855f60e31fa..fdb2da5df4db64c030398d6aaf834ddffe7de998 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 @@ -437,9 +437,6 @@ net:Property_Axiom_Net a owl:Class ; net:Property_Direction a owl:Class ; rdfs:subClassOf net:Feature . -net:Relation a owl:Class ; - rdfs:subClassOf net:Net_Structure . - net:Restriction_Net a owl:Class ; rdfs:subClassOf net:Net . @@ -454,39 +451,13 @@ net:atom a owl:Class ; rdfs:label "atom" ; rdfs:subClassOf net:Type . -net:atomClass_gravitation_g a net:Atom_Class_Net ; - net:coverBaseNode :leaf_gravitation_g ; - net:coverNode :leaf_gravitation_g ; - net:hasClassName "gravitation" ; - net:hasNaming "gravitation" ; - net:hasStructure "SSC-01-01" . - -net:atomClass_object_o a net:Atom_Class_Net ; - net:coverBaseNode :leaf_object_o ; - net:coverNode :leaf_object_o ; - net:hasClassName "object" ; - net:hasNaming "object" ; - net:hasStructure "SSC-01-01" . - -net:atomClass_sun_s2 a net:Atom_Class_Net ; - net:coverBaseNode :leaf_sun_s2 ; - net:coverNode :leaf_sun_s2 ; - net:hasClassName "sun" ; - net:hasNaming "sun" ; - net:hasStructure "SSC-01-01" . - -net:atomClass_system_s a net:Atom_Class_Net ; - net:coverBaseNode :leaf_system_s ; - net:coverNode :leaf_system_s ; - net:hasClassName "system" ; - net:hasNaming "system" ; - net:hasStructure "SSC-01-01" . - net:atomOf a owl:AnnotationProperty ; rdfs:label "atom of" ; rdfs:subPropertyOf net:typeProperty . net:atomProperty_bind_b a net:Atom_Property_Net ; + :role_ARG0 net:atomClass_gravitation_g ; + :role_ARG1 net:atomClass_system_s ; net:coverBaseNode :leaf_bind-01_b ; net:coverNode :leaf_bind-01_b ; net:hasNaming "bind" ; @@ -540,6 +511,7 @@ net:atomProperty_hasManner_m9 a net:Atom_Property_Net ; :leaf_orbit-01_o2 . net:atomProperty_hasPart_p9 a net:Atom_Property_Net ; + :role_ARG0 net:atomClass_system_s ; net:coverBaseNode :leaf_hasPart_p9 ; net:coverNode :leaf_hasPart_p9 ; net:hasNaming "hasPart" ; @@ -554,6 +526,8 @@ net:atomProperty_hasPart_p9 a net:Atom_Property_Net ; :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" ; @@ -690,14 +664,6 @@ net:has_target a owl:AnnotationProperty ; rdfs:label "has target" ; rdfs:subPropertyOf net:has_relation_value . -net:individual_system_p a net:Individual_Net ; - net:coverBaseNode :leaf_system_p ; - net:coverNode :leaf_system_p ; - net:hasIndividualLabel "Solar System" ; - net:hasMotherClassNet net:atomClass_system_p ; - net:hasNaming "system" ; - net:hasStructure "SSC-01-01" . - net:inverse_direction a owl:NamedIndividual . net:listBy a owl:AnnotationProperty ; @@ -826,7 +792,8 @@ ns2:AMR a owl:Class ; :hasConceptLink "or" ; :label "conjunction-OR" . -:role_domain a owl:Class ; +:role_domain a owl:Class, + net:Relation ; rdfs:subClassOf :AMR_NonCore_Role ; :hasRelationName "domain" ; :label "domain" ; @@ -920,6 +887,27 @@ net:Feature a owl:Class ; net:Individual_Net a owl:Class ; rdfs:subClassOf net:Net . +net:atomClass_gravitation_g a net:Atom_Class_Net ; + net:coverBaseNode :leaf_gravitation_g ; + net:coverNode :leaf_gravitation_g ; + net:hasClassName "gravitation" ; + net:hasNaming "gravitation" ; + net:hasStructure "SSC-01-01" . + +net:atomClass_object_o a net:Atom_Class_Net ; + net:coverBaseNode :leaf_object_o ; + net:coverNode :leaf_object_o ; + net:hasClassName "object" ; + net:hasNaming "object" ; + net:hasStructure "SSC-01-01" . + +net:atomClass_sun_s2 a net:Atom_Class_Net ; + net:coverBaseNode :leaf_sun_s2 ; + net:coverNode :leaf_sun_s2 ; + net:hasClassName "sun" ; + 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 ; @@ -934,6 +922,14 @@ net:class_list a owl:Class ; net:has_value a owl:AnnotationProperty ; rdfs:subPropertyOf net:netProperty . +net:individual_system_p a net:Individual_Net ; + net:coverBaseNode :leaf_system_p ; + net:coverNode :leaf_system_p ; + net:hasIndividualLabel "Solar System" ; + net:hasMotherClassNet net:atomClass_system_p ; + net:hasNaming "system" ; + net:hasStructure "SSC-01-01" . + net:objectType a owl:AnnotationProperty ; rdfs:label "object type" ; rdfs:subPropertyOf net:objectProperty . @@ -1083,6 +1079,14 @@ net:Class_Net a owl:Class ; net:Property_Net a owl:Class ; rdfs:subClassOf net:Net . +net:atomClass_system_s a net:Atom_Class_Net ; + :role_domain net:individual_system_p ; + net:coverBaseNode :leaf_system_s ; + net:coverNode :leaf_system_s ; + net:hasClassName "system" ; + net:hasNaming "system" ; + net:hasStructure "SSC-01-01" . + net:objectProperty a owl:AnnotationProperty ; rdfs:label "object attribute" . @@ -1134,6 +1138,9 @@ ns2:Frame a ns2:Concept, :toReify a owl:AnnotationProperty ; rdfs:subPropertyOf :AMR_AnnotationProperty . +net:Relation a owl:Class ; + rdfs:subClassOf net:Net_Structure . + net:has_relation_value a owl:AnnotationProperty ; rdfs:label "has relation value" ; rdfs:subPropertyOf net:has_object . @@ -1164,11 +1171,13 @@ ns3:FrameRole a ns2:Role, :hasConcept :concept_orbit-01 ; :hasVariable :variable_o2 . -:role_ARG0 a owl:Class ; +:role_ARG0 a owl:Class, + net:Relation ; rdfs:subClassOf :AMR_Core_Role ; :label "ARG0" . -:role_ARG1 a owl:Class ; +:role_ARG1 a owl:Class, + net:Relation ; rdfs:subClassOf :AMR_Core_Role ; :label "ARG1" .