diff --git a/tenet/scheme/amr_master_rule/transduction/phenomena_analyzer/mod_analyzer_1.py b/tenet/scheme/amr_master_rule/transduction/phenomena_analyzer/mod_analyzer_1.py index b3b2cfc455cace089c88972828de6fa547c59833..58ce68cece95d79671bd6c4c7fef394d6af4ee4b 100644 --- a/tenet/scheme/amr_master_rule/transduction/phenomena_analyzer/mod_analyzer_1.py +++ b/tenet/scheme/amr_master_rule/transduction/phenomena_analyzer/mod_analyzer_1.py @@ -13,7 +13,7 @@ from rdflib import Graph import transduction from transduction import net -from transduction.query_builder import generate_select_query +from transduction.query_builder import generate_select_distinct_query from transduction.rdfterm_computer import produce_uriref, produce_literal ENTITY_CLASS_TYPE = 'base-out:Entity' @@ -33,7 +33,21 @@ def __search_pattern(graph): clause_list = [f'?class_net_1 a [rdfs:subClassOf* net:Class_Net].', f'?class_net_2 a [rdfs:subClassOf* net:Class_Net].', f'?class_net_1 {MOD_RELATION} ?class_net_2.'] - query_code = generate_select_query(graph, select_data_list, clause_list) + query_code = generate_select_distinct_query(graph, select_data_list, clause_list) + result_set = graph.query(query_code) + return query_code, result_set + + +#============================================================================== +# Useful Additional Search +#============================================================================== + +def __search_mod(graph, class_net_uri): + select_data_list = ['?mod_class_net'] + clause_list = [(class_net_uri, MOD_RELATION, '?mod_class_net'), + '?mod_class_net a [rdfs:subClassOf* net:Class_Net].', + 'FILTER NOT EXISTS {{ ?mod_class_net a net:Deprecated_Net. }}'] + query_code = generate_select_distinct_query(graph, select_data_list, clause_list) result_set = graph.query(query_code) return query_code, result_set @@ -55,10 +69,13 @@ def __define_feature_restriction_naming(class_net): name = __extract_naming(class_net, default='something') return f'{name}-feature' -def __define_composite_naming(class_net_1, class_net_2): +def __define_composite_naming(class_net_1, class_net_2_set): name_1 = __extract_naming(class_net_1, default='something') - name_2 = __extract_naming(class_net_2, default='something') - return f'{name_2}-{name_1}' + result_name = f'{name_1}' + for class_net_2 in class_net_2_set: + name_2 = __extract_naming(class_net_2, default='something') + result_name = f'{name_2}-{result_name}' + return result_name def __filter_relation(relation_list): @@ -104,11 +121,12 @@ def __construct_feature_restriction_net(graph, individual_net): -def __construct_composite_class_net(graph, class_net_1, individual_net): +def __construct_composite_class_net(graph, class_net_1, feature_individual_net_list): # -- Net Composition composite_class_net = net.CompositeClassNet(graph) - composite_class_net.compose(class_net_1, individual_net) + composing_net_list = [class_net_1] + feature_individual_net_list + composite_class_net.compose(*composing_net_list) # -- Data Computation composite_class_net.mother_class_net = class_net_1.uri @@ -116,11 +134,15 @@ def __construct_composite_class_net(graph, class_net_1, individual_net): # -- Restriction Computation triple_list_1 = [] - restriction_net, triple_list_1 = __construct_feature_restriction_net(graph, individual_net) - composite_class_net.restriction = restriction_net.uri + restriction_list = [] + for feature_individual_net in feature_individual_net_list: + restriction_net, triple_list = __construct_feature_restriction_net(graph, feature_individual_net) + restriction_list.append(restriction_net.uri) + triple_list_1 += triple_list + composite_class_net.restriction = restriction_list # -- Net Naming - composite_class_net.naming = __define_composite_naming(class_net_1, individual_net) + composite_class_net.naming = __define_composite_naming(class_net_1, feature_individual_net_list) # -- Relation Propagation __propagate_relation(composite_class_net, class_net_1) @@ -134,7 +156,7 @@ def __construct_composite_class_net(graph, class_net_1, individual_net): -def __construct_individual_net(graph, class_net): +def __construct_feature_individual_net(graph, class_net): # -- Net Composition individual_net = net.IndividualNet(graph) @@ -172,17 +194,20 @@ def analyze_phenomena_mod_1(graph): rule_triple_list = [] for pattern in pattern_set: class_net_1 = net.ClassNet(graph, uri=pattern.class_net_1) - class_net_2 = net.ClassNet(graph, uri=pattern.class_net_2) - # -- New Net Construction(s) - individual_net, triple_list_1 = __construct_individual_net(graph, class_net_2) - _, triple_list_2 = __construct_composite_class_net(graph, class_net_1, individual_net) + # -- Feature Handle (MOD) + _, mod_class_net_set = __search_mod(graph, class_net_1.uri) + feature_individual_net_list = [] + for row in mod_class_net_set: + mod_class_net = net.ClassNet(graph, uri=row.mod_class_net) + individual_net, triple_list_1 = __construct_feature_individual_net(graph, mod_class_net) + feature_individual_net_list.append(individual_net) + rule_triple_list += triple_list_1 + rule_triple_list += mod_class_net.deprecate() - # -- Resulting List Update - rule_triple_list += triple_list_1 + triple_list_2 - - # -- Deprecation: Origin Class Nets + # -- New Net Construction(s) + _, triple_list_2 = __construct_composite_class_net(graph, class_net_1, feature_individual_net_list) + rule_triple_list += triple_list_2 rule_triple_list += class_net_1.deprecate() - rule_triple_list += class_net_2.deprecate() return rule_label, rule_triple_list \ No newline at end of file diff --git a/tests/main_tests/test_main_owl_extraction.py b/tests/main_tests/test_main_owl_extraction.py index 650ed33ca85b6b8cf86e284ad08243a29656af9a..a89785c4312a0625fb6f3ad8634bc37a66562a5b 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 = '03' +uuid_num = '02' 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}'