diff --git a/tenet/scheme/amr_rule/transduction/atomic_class_extractor.py b/tenet/scheme/amr_rule/transduction/atomic_class_extractor.py index fafe16712ead3ed012e0876ada3912f66a9eb0e0..b6f44e65b1ef098eafb12ebabfab909b05305d00 100644 --- a/tenet/scheme/amr_rule/transduction/atomic_class_extractor.py +++ b/tenet/scheme/amr_rule/transduction/atomic_class_extractor.py @@ -37,6 +37,25 @@ def __search_pattern(graph): return rule_pattern_set +#============================================================================== +# Useful Additional Search +#============================================================================== + +def __structure_query_code(graph): + select_data_list = ['?sentenceId'] + clause_list = [] + clause_list.append(f'?root a amr:AMR_Root.') + clause_list.append(f'?root amr:hasSentenceID ?sentenceId.') + query_code = generate_select_query(graph, select_data_list, clause_list) + return query_code + + +def __search_structure(graph): + query_code = __structure_query_code(graph) + result_set = graph.query(query_code) + return result_set + + #============================================================================== # Relation Propagation @@ -63,6 +82,14 @@ def __propagate_relation(target_net, leaf): # Construct Method(s) #============================================================================== +def __get_structure(graph): + structure = 'unknown' + structure_set = __search_structure(graph) + for row in structure_set: + structure = row.sentenceId + return structure + + def __define_naming(todo): pass @@ -76,14 +103,14 @@ def __construct_atom_class_net(graph, leaf, concept_name): atom_class_net.base_node = leaf atom_class_net.node = leaf atom_class_net.class_name = concept_name - # TODO: atom_class_net.class_name = get_structure(graph) - - # -- Relation Propagation - __propagate_relation(atom_class_net, leaf) + atom_class_net.structure = __get_structure(graph) # -- Net Naming atom_class_net.naming = concept_name + # -- Relation Propagation + __propagate_relation(atom_class_net, leaf) + # -- Finalization atom_class_net.finalize() triple_definition = atom_class_net.generate_triple_definition() diff --git a/tenet/scheme/amr_rule/transduction/atomic_individual_extractor.py b/tenet/scheme/amr_rule/transduction/atomic_individual_extractor.py index d67bf67b98735e75bebd544fbf6d74766e505e3b..2d4a579df2d6093a801ceb2dfd4573afb8a5422e 100644 --- a/tenet/scheme/amr_rule/transduction/atomic_individual_extractor.py +++ b/tenet/scheme/amr_rule/transduction/atomic_individual_extractor.py @@ -43,6 +43,25 @@ def __search_pattern(graph): return rule_pattern_set +#============================================================================== +# Useful Additional Search +#============================================================================== + +def __structure_query_code(graph): + select_data_list = ['?sentenceId'] + clause_list = [] + clause_list.append(f'?root a amr:AMR_Root.') + clause_list.append(f'?root amr:hasSentenceID ?sentenceId.') + query_code = generate_select_query(graph, select_data_list, clause_list) + return query_code + + +def __search_structure(graph): + query_code = __structure_query_code(graph) + result_set = graph.query(query_code) + return result_set + + #============================================================================== # Relation Propagation @@ -67,7 +86,15 @@ def __propagate_relation(target_net, leaf): #============================================================================== # Construct Method(s) -#============================================================================== +#============================================================================== + +def __get_structure(graph): + structure = 'unknown' + structure_set = __search_structure(graph) + for row in structure_set: + structure = row.sentenceId + return structure + def __define_naming(todo): pass @@ -84,14 +111,14 @@ def __construct_individual_net( individual_net.node = base_leaf individual_net.individual_label = value_label individual_net.mother_class_net = mother_class_net - # TODO: individual_net.class_name = get_structure(graph) - - # -- Relation Propagation - __propagate_relation(individual_net, base_leaf) + individual_net.structure = __get_structure(graph) # -- Net Naming individual_net.naming = concept_name + # -- Relation Propagation + __propagate_relation(individual_net, base_leaf) + # -- Finalization individual_net.finalize() triple_definition = individual_net.generate_triple_definition() diff --git a/tenet/scheme/amr_rule/transduction/atomic_property_extractor.py b/tenet/scheme/amr_rule/transduction/atomic_property_extractor.py index b658a3a9b52ddaaccb73105ccf6ecf39fa2d3a8c..48162b57fa39e2d13b836ca3b70d429fb47ddfcb 100644 --- a/tenet/scheme/amr_rule/transduction/atomic_property_extractor.py +++ b/tenet/scheme/amr_rule/transduction/atomic_property_extractor.py @@ -42,7 +42,19 @@ def __search_pattern(graph): # Useful Additional Search #============================================================================== +def __structure_query_code(graph): + select_data_list = ['?sentenceId'] + clause_list = [] + clause_list.append(f'?root a amr:AMR_Root.') + clause_list.append(f'?root amr:hasSentenceID ?sentenceId.') + query_code = generate_select_query(graph, select_data_list, clause_list) + return query_code + +def __search_structure(graph): + query_code = __structure_query_code(graph) + result_set = graph.query(query_code) + return result_set def __target_argument_pattern_query_code(graph, base_leaf_uri): @@ -85,8 +97,13 @@ def __propagate_relation(target_net, leaf): # Construct Method(s) #============================================================================== +def __get_structure(graph): + structure = 'unknown' + structure_set = __search_structure(graph) + for row in structure_set: + structure = row.sentenceId + return structure - def __define_naming(predicate_label): naming = predicate_label.split('-')[0] @@ -103,15 +120,12 @@ def __construct_atom_property_net(graph, base_leaf, predicate_label): atom_property_net.node = base_leaf atom_property_net.property_type = 'owl:ObjectProperty' atom_property_net.core_role = 'true' - # atom_property_net.structure = __get_structure(graph) + atom_property_net.structure = __get_structure(graph) # -- Target Argument target_argument_set = __search_target_argument(graph, base_leaf) for data in target_argument_set: atom_property_net.target_argument_node += [data.argLeaf] - - # -- Relation Propagation - __propagate_relation(atom_property_net, base_leaf) # -- Net Naming naming = __define_naming(predicate_label) @@ -121,6 +135,9 @@ def __construct_atom_property_net(graph, base_leaf, predicate_label): atom_property_net.property_name10 = f'{naming}-by' atom_property_net.property_name12 = f'{naming}-of' + # -- Relation Propagation + __propagate_relation(atom_property_net, base_leaf) + # -- Finalization atom_property_net.finalize() triple_definition = atom_property_net.generate_triple_definition() 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 50faaa362a34b9f8f3c64f30e4b12230d92e4945..ccdb03d15d4fc0948c504a255c379855f60e31fa 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 @@ -458,25 +458,29 @@ 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: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: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: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:hasNaming "system" ; + net:hasStructure "SSC-01-01" . net:atomOf a owl:AnnotationProperty ; rdfs:label "atom of" ; @@ -491,6 +495,7 @@ net:atomProperty_bind_b a net:Atom_Property_Net ; net:hasPropertyName10 "bind-by" ; net:hasPropertyName12 "bind-of" ; net:hasPropertyType owl:ObjectProperty ; + net:hasStructure "SSC-01-01" ; net:isCoreRoleLinked "true" ; net:targetArgumentNode :leaf_gravitation_g, :leaf_system_s . @@ -504,6 +509,7 @@ net:atomProperty_direct_d a net:Atom_Property_Net ; net:hasPropertyName10 "direct-by" ; net:hasPropertyName12 "direct-of" ; net:hasPropertyType owl:ObjectProperty ; + net:hasStructure "SSC-01-01" ; net:isCoreRoleLinked "true" . net:atomProperty_direct_d2 a net:Atom_Property_Net ; @@ -515,6 +521,7 @@ net:atomProperty_direct_d2 a net:Atom_Property_Net ; net:hasPropertyName10 "direct-by" ; net:hasPropertyName12 "direct-of" ; net:hasPropertyType owl:ObjectProperty ; + net:hasStructure "SSC-01-01" ; net:isCoreRoleLinked "true" ; net:targetArgumentNode :value_negative . @@ -527,6 +534,7 @@ net:atomProperty_hasManner_m9 a net:Atom_Property_Net ; net:hasPropertyName10 "hasManner-by" ; net:hasPropertyName12 "hasManner-of" ; net:hasPropertyType owl:ObjectProperty ; + net:hasStructure "SSC-01-01" ; net:isCoreRoleLinked "true" ; net:targetArgumentNode :leaf_or_o3, :leaf_orbit-01_o2 . @@ -540,6 +548,7 @@ net:atomProperty_hasPart_p9 a net:Atom_Property_Net ; net:hasPropertyName10 "hasPart-by" ; net:hasPropertyName12 "hasPart-of" ; net:hasPropertyType owl:ObjectProperty ; + net:hasStructure "SSC-01-01" ; net:isCoreRoleLinked "true" ; net:targetArgumentNode :leaf_and_a, :leaf_system_s . @@ -553,6 +562,7 @@ net:atomProperty_orbit_o2 a net:Atom_Property_Net ; 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 . @@ -685,7 +695,8 @@ net:individual_system_p a net:Individual_Net ; net:coverNode :leaf_system_p ; net:hasIndividualLabel "Solar System" ; net:hasMotherClassNet net:atomClass_system_p ; - net:hasNaming "system" . + net:hasNaming "system" ; + net:hasStructure "SSC-01-01" . net:inverse_direction a owl:NamedIndividual . @@ -913,7 +924,8 @@ 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:hasNaming "system" ; + net:hasStructure "SSC-01-01" . net:class_list a owl:Class ; rdfs:label "classList" ; diff --git a/tests/dev_tests/test_rule_atomic_extractor.py b/tests/dev_tests/test_rule_atomic_extractor.py index ae661dd47dba420b39b26fe92d3ce563e6e76942..46c56859f664ae1f0cda4badb6fbb807e2a43850 100644 --- a/tests/dev_tests/test_rule_atomic_extractor.py +++ b/tests/dev_tests/test_rule_atomic_extractor.py @@ -112,6 +112,16 @@ def test_search_pattern_3(graph): result_str += f' {selection.predicateLabel.n3(graph.namespace_manager)}' print(result_str) return pattern_result_set + + +def test_search_structure(graph): + result_set = rule_3.__search_structure(graph) + print(f'\n ----- number of selection found: {len(result_set)}') + for selection in result_set: + result_str = f'>>> ' + result_str += f'{selection.sentenceId.n3(graph.namespace_manager)}' + print(result_str) + return result_set #============================================================================== @@ -169,6 +179,7 @@ if __name__ == '__main__': print('\n -- Step 1: Search Pattern') pattern_set = test_search_pattern_3(graph) + test_search_structure(graph) print('\n \n')