diff --git a/tenet/scheme/amr_master_rule/transduction/phenomena_analyzer/degree_analyzer_1.py b/tenet/scheme/amr_master_rule/transduction/phenomena_analyzer/degree_analyzer_1.py index 7bd73b086ec927ed51fa5bfe52b0f4736a5d14ed..372cd508dec424eb75d4d20acdfb5a46c4349105 100644 --- a/tenet/scheme/amr_master_rule/transduction/phenomena_analyzer/degree_analyzer_1.py +++ b/tenet/scheme/amr_master_rule/transduction/phenomena_analyzer/degree_analyzer_1.py @@ -12,8 +12,9 @@ from rdflib import Graph import transduction from transduction import net -from transduction.query_builder import generate_select_query, generate_select_distinct_query -from transduction.rdfterm_computer import produce_uriref, produce_literal +from transduction.query_builder import generate_select_distinct_query +from transduction.rdfterm_computer import produce_uriref +from transduction.naming_computer import define_restriction_naming ENTITY_CLASS_TYPE = 'base-out:Entity' FEATURE_CLASS_TYPE = 'base-out:Feature' @@ -91,6 +92,8 @@ def __search_degree_arg6(graph, degree_net_uri): # Useful Computation Method(s) #============================================================================== +# -- Methods to define naming + def __extract_naming(net, default='none'): naming = f'{default}' naming_list = net.naming @@ -108,6 +111,17 @@ def __define_composite_naming(net_1, net_2): name_2 = __extract_naming(net_2, default='something') return f'{name_2}-{name_1}' +def __define_comparison_property_naming(net_1, net_2): + name_1 = __extract_naming(net_1, default='something') + if len(name_1) == 1: name_1 = name_1[0].upper() + if len(name_1) >1: name_1 = name_1[0].upper() + name_1[1:] + name_2 = __extract_naming(net_2, default='something') + if len(name_2) == 1: name_2 = name_2[0].upper() + if len(name_2) >1: name_2 = name_2[0].upper() + name_2[1:] + return f'is{name_2}{name_1}Than' + + +# -- Methods to propagate relation def __filter_relation(relation_list, phenomena_net): result_list = [] @@ -130,6 +144,28 @@ def __propagate_relation(target_net, base_net, phenomena_net): # Construct Method(s) #============================================================================== +def __construct_restriction_net(graph, property_net, target_class_net): + + # -- Net Composition + restriction_net = net.RestrictionNet(graph) + restriction_net.compose(property_net, target_class_net) + + # -- Data Computation + restriction_net.restriction_property = property_net.uri + restriction_net.restriction_net_value = target_class_net.uri + + # -- Relation Propagation: None + + # -- Net Naming + restriction_net.naming = define_restriction_naming(property_net, target_class_net) + + # -- Finalization + restriction_net.finalize() + triple_list = restriction_net.generate_triple_definition() + + return restriction_net, triple_list + + def __construct_feature_restriction_net(graph, individual_net): restriction_net = net.RestrictionNet(graph) @@ -223,8 +259,32 @@ def __construct_feature_individual_net(graph, feature_class_net, degree_individu individual_net.finalize() result_triple_list = individual_net.generate_triple_definition() - return individual_net, result_triple_list + return individual_net, result_triple_list + + + +def __construct_comparison_property_net(graph, feature_class_net, degree_individual_net): + + # -- Net Composition + property_net = net.AtomPropertyNet(graph) + property_net.compose(feature_class_net, degree_individual_net) + # -- Relation Propagation : None + + # -- Net Naming + property_net.naming = __define_comparison_property_naming(feature_class_net, degree_individual_net) + + # -- Finalization + property_net.finalize() + result_triple_list = property_net.generate_triple_definition() + + return property_net, result_triple_list + + +def __associate_restriction_relation(graph, class_net, restriction_net): + class_net.restriction = restriction_net.uri + result_triple_list = class_net.generate_triple_definition() + return class_net, result_triple_list def __associate_mother_relation_to_refine(graph, left_class_net, right_class_net): left_class_net.mother_class_net_to_refine = right_class_net.uri @@ -275,9 +335,15 @@ def analyze_phenomena_degree91_1(graph): rule_triple_list += degree_triple_list # -- Comparison Handle (ARG4) + comparison_property_net, triple_list_4a = __construct_comparison_property_net( + graph, attribute_class_net, degree_individual_net) _, comparated_class_set = __search_degree_arg4(graph, phenomena_net.uri) for row in comparated_class_set: - pass #TODO: uri=row.comparated_class_net + comparated_class_net = net.ClassNet(graph, uri=row.comparated_class_net) + restriction_net, triple_list_4b = __construct_restriction_net( + graph, comparison_property_net, comparated_class_net) + _, triple_list_4c = __associate_restriction_relation(graph, new_entity_class_net, restriction_net) + rule_triple_list += (triple_list_4a + triple_list_4b + triple_list_4c) # -- Superlative Handle (ARG5) _, superlative_set = __search_degree_arg5(graph, phenomena_net.uri) diff --git a/tests/main_tests/test_main_owl_extraction.py b/tests/main_tests/test_main_owl_extraction.py index a89785c4312a0625fb6f3ad8634bc37a66562a5b..650ed33ca85b6b8cf86e284ad08243a29656af9a 100644 --- a/tests/main_tests/test_main_owl_extraction.py +++ b/tests/main_tests/test_main_owl_extraction.py @@ -56,7 +56,7 @@ test_data_dir = f'{INPUT_DIR_PATH}amrDocuments/' # onto_prefix = f'SimpleTest' # base_output_name = f'SimpleTest' -uuid_num = '02' +uuid_num = '03' amrld_dir_path = f'{test_data_dir}dev/solar-system-{uuid_num}/' amrld_file_path = f'{amrld_dir_path}SSC-{uuid_num}-01.stog.amr.ttl' base_output_name = f'SolarSystemDev{uuid_num}'