Skip to content
Snippets Groups Projects
Select Git revision
  • ab8355fc7199b6407d2be128939c91c8e2f637d9
  • master default protected
  • multiprocessing
  • experiment/clara
  • experiment/spec2B-poc
  • experiment/qivalio-poc
  • experiment/ertms
  • MAY-2023
  • FEB-2023
  • EGC-2023
  • 0.2.1
  • v0.2.0
  • v0.1.2
13 results

phenomena_application_or.py

Blame
  • phenomena_application_or.py 7.67 KiB
    #!/usr/bin/python3.10
    # -*-coding:Utf-8 -*
    
    #==============================================================================
    # TENET: AMR CTR at 'Net Expansion' level for phenomena application (or)
    #------------------------------------------------------------------------------
    # Module grouping compositional transduction rule_sets (CTR) for the analysis 
    # of AMR structures, at 'Net Expansion' level
    #==============================================================================
    
    import subprocess, os
    from rdflib import Graph
    from rdflib import Namespace
    from rdflib.namespace import NamespaceManager
    
    if __name__ == '__main__':
        import os, sys
        LIB_PATH = f'{os.path.dirname(os.path.abspath(__file__))}/..'
        sys.path.insert(0, os.path.abspath(LIB_PATH))
        print(sys.path[0])
    
    import febTransduction as transduction
    from febTransduction import net
    from febTransduction.query_builder import generate_select_query
    from febTransduction.naming_computer import define_composite_naming_1
    
    
    #==============================================================================
    # Rule with pattern property(class, or_phenomena)
    #==============================================================================
    
    def __select_pattern_1():
        
        # -- Select Data List
        select_data_list = ['?property_net', '?class_net', '?phenomena_net']
        
        # -- Clause List
        clause_list = []
        clause_list.append(f'?property_net a [rdfs:subClassOf* net:Property_Net].')
        clause_list.append(f'?class_net a [rdfs:subClassOf* net:Class_Net].')
        clause_list.append(f'?phenomena_net a [rdfs:subClassOf* net:Phenomena_Net].')
        clause_list.append(f'?phenomena_net net:hasPhenomenaType amr:phenomena_conjunction_or.')
        clause_list.append(f'?property_net amr:role_ARG0 ?class_net.')
        clause_list.append(f'?property_net amr:role_ARG1 ?phenomena_net.')
        
        # -- Query Generation
        query_code = transduction.query_builder.generate_select_query(select_data_list, clause_list)
        
        return query_code
    
        # pattern = transduction.Pattern('class_net', 'property_net', 'phenomena_net')
        # pattern.add_identification_pattern(phenomena_net, phenomena_type='amr:phenomena_conjunction_or')
        # pattern.add_composition_pattern(property_net, 'amr:role_ARG0', class_net_0)
        # pattern.add_composition_pattern(property_net, 'amr:role_ARG1', phenomena_net)
        # pattern_query = pattern.get_select_query()
        # return pattern_query
        
        
    def __op_pattern_1(phenomena_net_uri, num):
        
        assert 1 <= num <= 9 
        
        # -- Select Data List
        select_data_list = ['?class_net']
        
        # -- Clause List
        clause_list = []
        clause_list.append(f'?class_net a [rdfs:subClassOf* net:Class_Net].')
        clause_list.append(f'{phenomena_net_uri} amr:role_op{num} ?class_net.')
        
        # -- Query Generation
        query_code = transduction.query_builder.generate_select_query(select_data_list, clause_list)
        
        return query_code
        
    
    def __define_restriction(net, op_set): # TODO
        pass
        return net
        
        
    def analyze_phenomena_or_1(graph):
        
        # -- Rule Initialization 
        rule_label = '"or" phenomena analysis 1 [ property(class, or_phenomena) ]'
        print(f"--- *** February Transduction *** Sequence: {rule_label}")
        #logger.info(f"--- *** February Transduction *** Sequence: {rule_label}")   
    
        # -- Selection Pattern Application  
        query_code = __select_pattern_1()
        pattern_set = graph.query(query_code) 
        
        # -- New Net Computing
        new_triple_list = []
        for selection in pattern_set:
            
            # -- Net Composition
            class_net = net.ClassNet(graph, selection.class_net)
            property_net = net.PropertyNet(graph, selection.property_net)
            phenomena_net = net.PhenomenaNet(graph, selection.phenomena_net)
            composite_class_net = net.CompositeClassNet(graph)
            composite_class_net.compose(class_net, property_net, phenomena_net)
        
            # -- Data Computation
            composite_class_net.mother_class_net = class_net.uri
            # etc
        
            # -- Restriction Computation
            pass # TODO
            # for num in range(1, 9+1):
            #     query_code = __op_pattern_1(selection.phenomena_net, num)
            #     op_set = graph.query(query_code) 
            #     composite_class_net = __define_restriction(composite_class_net, op_set)
        
            # -- Relation Propagation
            pass # TODO
            # for (n1, rel, _) in class_net.input_relation_list:
            #     composite_class_net.add_input_relation(n1, rel)
                # TODO: à voir si on veut d'autres relations
        
            # -- Net Naming
            composite_class_net.naming = define_composite_naming_1(class_net, property_net, phenomena_net)
            
            # -- Finalization
            composite_class_net.finalize()
            new_triples = composite_class_net.generate_triple_definition()
            new_triple_list.append(new_triples)
        
        return rule_label, new_triple_list
    
    
    #==============================================================================
    # Rule with pattern property(property, or_phenomena)
    #==============================================================================
    
    def __select_pattern_2():
        
        # -- Select Data List
        select_data_list = ['?property_net', '?property_net_0', '?phenomena_net']
        
        # -- Clause List
        clause_list = []
        clause_list.append(f'?property_net a [rdfs:subClassOf* net:Property_Net].')
        clause_list.append(f'?property_net_0 a [rdfs:subClassOf* net:Property_Net].')
        clause_list.append(f'?phenomena_net a [rdfs:subClassOf* net:Phenomena_Net].')
        clause_list.append(f'?phenomena_net net:hasPhenomenaType amr:phenomena_conjunction_or.')
        clause_list.append(f'?property_net amr:role_ARG0 ?property_net_0.')
        clause_list.append(f'?property_net amr:role_ARG1 ?phenomena_net.')
        
        # -- Query Generation
        query_code = transduction.query_builder.generate_select_query(select_data_list, clause_list)
        
        return query_code
    
    
    def analyze_phenomena_or_2(graph):
        
        # -- Rule Initialization 
        rule_label = '"or" phenomena analysis 2 [ property(property, or_phenomena) ]'
        print(f"--- *** February Transduction *** Sequence: {rule_label}")  
    
        # -- Selection Pattern Application  
        query_code = __select_pattern_2()
        pattern_set = graph.query(query_code) 
        
        # -- New Net Computing
        new_triple_list = []
        for selection in pattern_set:
            
            # -- Net Composition
            property_net_0 = net.PropertyNet(graph, uri=selection.property_net_0) 
            property_net = net.PropertyNet(graph, uri=selection.property_net)
            phenomena_net = net.PhenomenaNet(graph, uri=selection.phenomena_net)
            composite_class_net = net.CompositeClassNet(graph)
            composite_class_net.compose(property_net_0, property_net, phenomena_net)
        
            # -- Data Computation
            composite_class_net.mother_class_net = property_net_0.uri
            # etc
        
            # -- Restriction Computation
            pass # TODO
            # for num in range(1, 9+1):
            #     query_code = __op_pattern_1(selection.phenomena_net, num)
            #     op_set = graph.query(query_code) 
            #     composite_class_net = __define_restriction(composite_class_net, op_set)
        
            # -- Relation Propagation
            pass # TODO
            # for (n1, rel, _) in class_net.input_relation_list:
            #     composite_class_net.add_input_relation(n1, rel)
                # TODO: à voir si on veut d'autres relations
        
            # -- Net Naming
            composite_class_net.naming = define_composite_naming_1(property_net_0, property_net, phenomena_net)
            
            # -- Finalization
            composite_class_net.finalize()
            new_triples = composite_class_net.generate_triple_definition()
            new_triple_list += new_triples
        
        return rule_label, new_triple_list