Skip to content
Snippets Groups Projects
Select Git revision
  • a9b9b6d1c6878a1fab968cb30e6d31ddc0aa94fc
  • mui5-annotation-on-video-stable default
  • get_setter_canvasSizeInformations
  • fix-error-div-into-p
  • annotation-on-video-v2
  • detached
  • annotation-on-video-r17
  • mui5
  • mui5-react-18
  • jacob-test
  • annotation-on-video protected
  • master
  • test-antoinev1
  • 20-fetch-thumbnail-on-annotation
  • add-research-field
  • Save
  • add-plugin
  • 14-wip-no-seek-to
  • 14-bug-on-video-time-control
  • 9_wip_videotests
  • _upgrade_material_ui
  • latest-tetras-16
  • v3.3.0
  • v3.2.0
  • v3.1.1
  • v3.1.0
  • v3.0.0
  • v3.0.0-rc.7
  • v3.0.0-rc.6
  • v3.0.0-rc.5
  • v3.0.0-rc.4
  • v3.0.0-rc.3
  • v3.0.0-rc.2
  • v3.0.0-rc.1
  • v3.0.0-beta.10
  • v3.0.0-beta.9
  • v3.0.0-beta.8
  • v3.0.0-beta.7
  • v3.0.0-beta.6
  • v3.0.0-beta.5
  • v3.0.0-beta.3
41 results

AttributionPanel.test.js

Blame
  • test_rule_atomic_extractor.py 7.98 KiB
    #!/usr/bin/python3.10
    # -*-coding:Utf-8 -*
    
    #==============================================================================
    # TENET: Extraction Rule Test
    #------------------------------------------------------------------------------
    # Script to test rules under development
    #==============================================================================
    
    import subprocess, os
    from rdflib import Graph, Namespace
    from rdflib.namespace import NamespaceManager, FOAF, RDF
    from rdflib import URIRef, Literal, BNode
    
    FILE_PATH = f'{os.path.dirname(os.path.abspath(__file__))}'
    INPUT_DIR_PATH = f'{FILE_PATH}/test_data/'
    OUTPUT_DIR_PATH = f'{FILE_PATH}/test_data/'
    
    TEST_FILE_NAME = 'atom-extraction-devGraph-1'
    INPUT_GRAPH_PATH = f'{INPUT_DIR_PATH}{TEST_FILE_NAME}.ttl'
    OUTPUT_GRAPH_PATH = f'{OUTPUT_DIR_PATH}{TEST_FILE_NAME}.result.ttl'
    OUTPUT_GRAPH_URI = f'https://amr.tetras-libre.fr/rdf/{TEST_FILE_NAME}/result'
    
    from context import tenet
    from tenet.transduction.rdfterm_computer import __update_uri_with_prefix
    from tenet.transduction import rdfterm_computer, prefix_handle
    from tenet.transduction import net
    from tenet.scheme.amr_rule.transduction import atom_class_extractor as rule_1
    from tenet.scheme.amr_rule.transduction import atom_individual_extractor as rule_2
    from tenet.scheme.amr_rule.transduction import atom_property_extractor as rule_3
    from tenet.scheme.amr_rule.transduction import atom_value_extractor as rule_4
    from tenet.scheme.amr_rule.transduction import atom_phenomena_extractor as rule_5
    from tenet.scheme import amr_rule
    
    
    
    #==============================================================================
    # Useful Methods
    #==============================================================================
    
    def load_test_graph():
        print(f'\n -- Test Graph Loading')
        graph = Graph()
        prefix_handle.update_graph_namespacemanager(graph)
        graph.parse(INPUT_GRAPH_PATH)
        print(f" ----- Graph Loaded ({len(graph)})")
        return graph
    
    
    def print_triple(triple, num=-1):
        num_str = f'[{num}]' if num > -1 else '[-]'
        (s, p, o) = triple
        s = __update_uri_with_prefix(graph, s)
        p = __update_uri_with_prefix(graph, p)
        o = __update_uri_with_prefix(graph, o)
        print(f' {num_str} {s} {p} {o}')
        
    
    def add_triples_in_graph(graph, triple_list):
        print(f'\n -- Adding triple(s) in graph')       
        print(f" ----- Graph length before update: {len(graph)}")
        print(f" ----- Number of triples to add: {len(triple_list)}")
        
        print(f" ----- Added triples:")
        n = 0
        for triple in triple_list:
            n += 1
            print_triple(triple, num=n)
            graph.add(triple)      
            
        print(f" ----- Graph length after update: {len(graph)}")
        
        print(f'\n -- Serialize test graph to {OUTPUT_GRAPH_PATH}')
        graph.serialize(destination=OUTPUT_GRAPH_PATH, 
                        format='turtle',
                        base=OUTPUT_GRAPH_URI)
    
    
    
    #==============================================================================
    # Development Test
    #==============================================================================
            
    def test_search_pattern_1(graph):
        _, pattern_set = rule_1.__search_pattern(graph)
        print(f'\n ----- number of selection found: {len(pattern_set)}')
        for row in pattern_set: 
            result_str = f'>>> '
            result_str += f'{row.leaf.n3(graph.namespace_manager)}'
            result_str += f' {row.conceptName.n3(graph.namespace_manager)}'
            print(result_str) 
        return pattern_set
    
            
    def test_search_pattern_2(graph):
        _, pattern_set = rule_2.__search_pattern(graph)
        print(f'\n ----- number of selection found: {len(pattern_set)}')
        for row in pattern_set: 
            result_str = f'>>> '
            result_str += f'{row.baseLeaf.n3(graph.namespace_manager)}'
            result_str += f' {row.valueLabel.n3(graph.namespace_manager)}'
            result_str += f' {row.classNet.n3(graph.namespace_manager)}'
            print(result_str) 
        return pattern_set
    
            
    def test_search_pattern_3(graph):
        _, pattern_set = rule_3.__search_pattern(graph)
        print(f'\n ----- number of selection found: {len(pattern_set)}')
        for row in pattern_set: 
            result_str = f'>>> '
            result_str += f'{row.baseLeaf.n3(graph.namespace_manager)}'
            result_str += f' {row.predicateLabel.n3(graph.namespace_manager)}'
            print(result_str) 
        return pattern_set
    
            
    def test_search_pattern_4(graph):
        _, pattern_set = rule_4.__search_pattern(graph)
        print(f'\n ----- number of selection found: {len(pattern_set)}')
        for row in pattern_set: 
            result_str = f'>>> '
            result_str += f'{row.valueLabel.n3(graph.namespace_manager)}'
            print(result_str) 
        return pattern_set
    
            
    def test_search_pattern_5(graph):
        _, pattern_set = rule_5.__search_pattern(graph)
        print(f'\n ----- number of selection found: {len(pattern_set)}')
        for row in pattern_set: 
            result_str = f'>>> '
            result_str += f'{row.baseLeaf.n3(graph.namespace_manager)}'
            result_str += f' {row.phenomenaLabel.n3(graph.namespace_manager)}'
            result_str += f' {row.relationConceptPhenomena.n3(graph.namespace_manager)}'
            result_str += f' {row.relationConceptLabel.n3(graph.namespace_manager)}'
            print(result_str) 
        return pattern_set
    
            
    def test_search_structure(graph):
        result_set = rule_3.__search_structure(graph)
        print(f'\n ----- number of selection found: {len(result_set)}')
        for row in result_set: 
            result_str = f'>>> '
            result_str += f'{row.sentenceId.n3(graph.namespace_manager)}'
            print(result_str) 
        return result_set
        
    
    #==============================================================================
    # Unit Test
    #==============================================================================
    
    def test_rule_application(graph, rule):    
        print('\n -- Rule Test')
        
        rule_label, new_triple_list = rule(graph)
        print(f' ----- label: {rule_label}')
        print(f' ----- new_triple_list ({len(new_triple_list)}):')
        
        add_triples_in_graph(graph, new_triple_list)
        
    
    
    #==============================================================================
    # Test Script
    #==============================================================================
    
    if __name__ == '__main__':
          
        print('\n *** Test Preparation ***')
        graph = load_test_graph()
        print('\n \n')
        
        print('\n ///////////////////// Extraction Rule 1')
        print('\n *** Step Test ***')
        
        print('\n -- Step 1: Search Pattern')
        pattern_set = test_search_pattern_1(graph)
        test_search_structure(graph)
        
        print('\n \n')
        
        print('\n *** Unit Test ***')
        test_rule_application(graph, rule_1.extract_atom_class)
        print('\n \n')
        
        print('\n ///////////////////// Extraction Rule 2')
        print('\n *** Step Test ***')
        
        print('\n -- Step 1: Search Pattern')
        pattern_set = test_search_pattern_2(graph)
        
        print('\n \n')
        
        print('\n *** Unit Test ***')
        test_rule_application(graph, rule_2.extract_atom_individual)
        print('\n \n')
        print('\n \n')
        
        print('\n ///////////////////// Extraction Rule 3')
        print('\n *** Step Test ***')
        
        print('\n -- Step 1: Search Pattern')
        pattern_set = test_search_pattern_3(graph)
        
        print('\n \n')
        
        print('\n *** Unit Test ***')
        test_rule_application(graph, rule_3.extract_atom_property)
        print('\n \n')
        
        print('\n ///////////////////// Extraction Rule 4')
        print('\n *** Step Test ***')
        
        print('\n -- Step 1: Search Pattern')
        pattern_set = test_search_pattern_4(graph)
        
        print('\n \n')
        
        print('\n *** Unit Test ***')
        test_rule_application(graph, rule_4.extract_atom_value)
        print('\n \n')
        
        print('\n ///////////////////// Extraction Rule 5')
        print('\n *** Step Test ***')
        
        print('\n -- Step 1: Search Pattern')
        pattern_set = test_search_pattern_5(graph)
        
        print('\n \n')
        
        print('\n *** Unit Test ***')
        test_rule_application(graph, rule_5.extract_atom_phenomena)
        print('\n \n')
    
        print('\n *** - ***')