diff --git a/tenet/scheme/amr_master_rule/owl_generation/owl_class_generator.py b/tenet/scheme/amr_master_rule/owl_generation/owl_class_generator.py index f537832eb04523e5a3e286f18e4097b8971938ab..ba0123eabd53f03d5a2c82c1a8a9f76e9c4dc45a 100644 --- a/tenet/scheme/amr_master_rule/owl_generation/owl_class_generator.py +++ b/tenet/scheme/amr_master_rule/owl_generation/owl_class_generator.py @@ -14,31 +14,83 @@ from rdflib.namespace import FOAF, RDF, RDFS, OWL import transduction from transduction import net -from transduction.rdfterm_computer import produce_uriref, produce_literal -from transduction.query_builder import generate_select_query +from transduction.rdfterm_computer import ( produce_uriref, produce_literal ) + +from transduction.query_builder import ( + generate_select_query, + generate_ask_query +) DEFAULT_CLASS_TYPE = 'base-out:Undetermined_Thing' #============================================================================== -# Select Pattern: Atom / Composite Class Net +# Methods to search for patterns: Atom / Composite Class Net #============================================================================== def __search_pattern_1(graph): + + # SPARQL query construction select_data_list = ['?class_net'] clause_list = [(f'?class_net a net:Atom_Class_Net.')] query_code = generate_select_query(graph, select_data_list, clause_list) + + # SPARQL query execution rule_pattern_set = graph.query(query_code) + + # Result (pattern set) return rule_pattern_set def __search_pattern_2(graph): + + # SPARQL query construction select_data_list = ['?class_net'] clause_list = [(f'?class_net a net:Composite_Class_Net.')] query_code = generate_select_query(graph, select_data_list, clause_list) + + # SPARQL query execution rule_pattern_set = graph.query(query_code) + + # Result (pattern set) return rule_pattern_set - + + + +#============================================================================== +# Methods to ask about net (using SPARQL ASK query) +#============================================================================== + +def is_class_net(graph, net_uri): + + # SPARQL query construction + clause_list = ['?classUri a [rdfs:subClassOf* net:Class_Net].'] + query_code = generate_ask_query(graph, clause_list) + + # SPARQL query execution + result = graph.query(query_code, initBindings={'classUri': net_uri}) + + # Result (True or False) + return query_code, bool(result) + + +def is_individual_net(graph, net_uri): + + # SPARQL query construction + clause_list = ['?classUri a [rdfs:subClassOf* net:Individual_Net].'] + query_code = generate_ask_query(graph, clause_list) + + # SPARQL query execution + result = graph.query(query_code, initBindings={'classUri': net_uri}) + + # Result (True or False) + return query_code, bool(result) + + + +#============================================================================== +# Methods to get useful net list +#============================================================================== def __get_atom_class_net_list(graph): @@ -83,7 +135,7 @@ def __get_mother_class_net_list(atom_class_net_list, composite_class_net_list): #============================================================================== -# Check Methods +# Check Method(s) #============================================================================== def __is_class_to_generate(class_net): @@ -165,6 +217,22 @@ def __generate_restriction_with_some_values( return triple_list +def __generate_restriction_with_specific_value( + graph, class_uri, on_property_uri, value_individual_uri): + + # -- namespace = Namespace("https://tenet.tetras-libre.fr/semantic-net#") + restriction = BNode() + + triple_list = [ + (class_uri, RDFS.subClassOf, restriction), + (restriction, RDF.type, OWL.Restriction), + (restriction, OWL.onProperty, on_property_uri), + (restriction, OWL.hasValue, value_individual_uri) + ] + + return triple_list + + # -- Methods to generate OWL triple # ----------------------------------- @@ -199,16 +267,30 @@ def __generate_logical_restriction(graph, new_class_uri, restriction_net_uri): if (restriction_net.has_restriction_property and restriction_net.has_restriction_net_value): + # OnProperty URI property_net_uri = restriction_net.restriction_property[0] property_net = net.PropertyNet(graph, uri=property_net_uri) on_property_uri = __compute_property_uri(property_net) + # ValueNet URI value_net_uri = restriction_net.restriction_net_value[0] - value_net = net.ClassNet(graph, uri=value_net_uri) - values_class_uri = __compute_class_uri(value_net) - triple_list += __generate_restriction_with_some_values( - graph, new_class_uri, on_property_uri, values_class_uri) + # Restriction generation depending of value net type + if (is_class_net(graph, value_net_uri)): # Case 1: Class Net + + value_net = net.ClassNet(graph, uri=value_net_uri) + values_class_uri = __compute_class_uri(value_net) + + triple_list += __generate_restriction_with_some_values( + graph, new_class_uri, on_property_uri, values_class_uri) + + elif (is_individual_net(graph, value_net_uri)): # Case 2: Individual Net + + value_net = net.IndividualNet(graph, uri=value_net_uri) + value_individual_uri = __compute_class_uri(value_net) + + triple_list += __generate_restriction_with_specific_value( + graph, new_class_uri, on_property_uri, value_individual_uri) return triple_list diff --git a/tenet/tenet.log b/tenet/tenet.log index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..48e850eea0cef12b809741ca42825a32d11a8494 100644 --- a/tenet/tenet.log +++ b/tenet/tenet.log @@ -0,0 +1,180 @@ +- INFO - [TENET] Extraction Processing +- INFO - + === Process Initialization === +- INFO - -- Process Setting +- INFO - ----- Corpus source: /home/lamenji/Workspace/Tetras/tenet/tests/main_tests/test_data/amrDocuments/dev/solar-system-01/ (amr) +- INFO - ----- Base output dir: /home/lamenji/Workspace/Tetras/tenet/tests/main_tests/test_owl_output/SolarSystemDev01-20230607/SolarSystemDev01_factoid.ttl +- INFO - ----- technical dir path: /home/lamenji/Workspace/Tetras/tenet/tests/main_tests/test_owl_output/SolarSystemDev01-20230607/technical-data/ +- INFO - ----- Ontology target (id): https://tenet.tetras-libre.fr/demo/01/ +- INFO - ----- Current path: /home/lamenji/Workspace/Tetras/tenet/tenet +- DEBUG - ----- Config file: /home/lamenji/Workspace/Tetras/tenet/tenet/owl_amr_config.xml +- DEBUG - + *** Config (Full Parameters) *** + -- Base Parameters + ----- config file: /home/lamenji/Workspace/Tetras/tenet/tenet/owl_amr_config.xml + ----- uuid: https://tenet.tetras-libre.fr/demo/01/ + ----- technical base name: tenet.tetras-libre.fr_demo_01 + ----- source corpus: /home/lamenji/Workspace/Tetras/tenet/tests/main_tests/test_data/amrDocuments/dev/solar-system-01/ + ----- target reference: base + ----- process level: sentence + ----- source type: amr + ----- extraction scheme: owl_amr_scheme_1 + -- Directories + ----- base directory: ./ + ----- structure directory: ./structure/ + ----- CTS directory: ./scheme/ + ----- target frame directory: ./../input/targetFrameStructure/ + ----- input document directory: + ----- base output dir: /home/lamenji/Workspace/Tetras/tenet/tests/main_tests/test_owl_output/SolarSystemDev01-20230607/SolarSystemDev01_factoid.ttl + ----- output directory: /home/lamenji/Workspace/Tetras/tenet/tests/main_tests/test_owl_output/SolarSystemDev01-20230607/SolarSystemDev01_factoid.ttltenet.tetras-libre.fr_demo_01-20230607/ + ----- sentence output directory: /home/lamenji/Workspace/Tetras/tenet/tests/main_tests/test_owl_output/SolarSystemDev01-20230607/technical-data/ + ----- technical dir path: /home/lamenji/Workspace/Tetras/tenet/tests/main_tests/test_owl_output/SolarSystemDev01-20230607/technical-data/ + -- Config File Definition + ----- schema file: ./structure/amr-rdf-schema.ttl + ----- semantic net file: ./structure/owl-snet-schema.ttl + ----- config param file: ./structure/config-parameters.ttl + ----- base ontology file: ./structure/base-ontology.ttl + ----- CTS file: ./scheme/owl_amr_scheme_1.py + -- Useful References for Ontology + ----- base URI: https://tenet.tetras-libre.fr/working + ----- ontology suffix: -ontology.ttl + ----- ontology seed suffix: -ontology-seed.ttl + -- Source File Definition + ----- source sentence file: /home/lamenji/Workspace/Tetras/tenet/tests/main_tests/test_data/amrDocuments/dev/solar-system-01/**/*.ttl + -- Target File Definition + ----- frame ontology file: ./../input/targetFrameStructure/base-ontology.ttl + ----- frame ontology seed file: ./../input/targetFrameStructure/base-ontology-seed.ttl + -- Output + ----- ontology namespace: https://tenet.tetras-libre.fr/base-ontology/ + ----- output file: /home/lamenji/Workspace/Tetras/tenet/tests/main_tests/test_owl_output/SolarSystemDev01-20230607/technical-data/tenet.tetras-libre.fr_demo_01.ttl + *** - *** +- DEBUG - -- Counting number of graph files (sentences) +- INFO - ----- Number of Graphs: 1 +- INFO - + === Extraction Processing === +- INFO - *** sentence 1 *** +- INFO - -- Work Structure Preparation +- DEBUG - --- Graph Initialization +- DEBUG - ----- Configuration Loading +- DEBUG - -------- RDF Schema (320) +- DEBUG - -------- Semantic Net Definition (486) +- DEBUG - -------- Config Parameter Definition (520) +- DEBUG - ----- Frame Ontology Loading +- DEBUG - -------- Base Ontology produced as output (550) +- DEBUG - --- Source Data Import +- DEBUG - ----- Sentence Loading +- DEBUG - -------- /home/lamenji/Workspace/Tetras/tenet/tests/main_tests/test_data/amrDocuments/dev/solar-system-01/SSC-01-01.stog.amr.ttl (598) +- DEBUG - --- Export work graph as turtle +- DEBUG - ----- Work graph file: /home/lamenji/Workspace/Tetras/tenet/tests/main_tests/test_owl_output/SolarSystemDev01-20230607/technical-data/tenet.tetras-libre.fr_demo_01-1/tenet.tetras-libre.fr_demo_01.ttl +- INFO - ----- Sentence (id): SSC-01-01 +- INFO - ----- Sentence (text): The Solar System is the gravitationally bound system of the Sun and the objects that orbit it, either directly or indirectly. +- INFO - -- Loading Extraction Scheme (owl_amr_scheme_1) +- DEBUG - ----- Step number: 3 +- INFO - -- Loading Extraction Rules (amr_master_rule/*) +- DEBUG - ----- Total rule number: 87 +- INFO - -- Step 1: Preprocessing +- INFO - --- *** November Transduction *** Sequence: amrld-correcting-sequence +- INFO - ----- fix-amr-bug-about-system-solar-planet: 5/5 new triples (603, 0:00:00.027404) +- INFO - --- *** November Transduction *** Sequence: amr-reification-sequence +- INFO - ----- reclassify-concept-1: 10/10 new triples (613, 0:00:00.130204) +- DEBUG - ----- reclassify-concept-2: 0/0 new triple (613, 0:00:00.050778) +- INFO - ----- reclassify-concept-3: 12/12 new triples (625, 0:00:00.039706) +- INFO - ----- reclassify-concept-4: 16/16 new triples (641, 0:00:00.050183) +- INFO - ----- reclassify-concept-5: 2/4 new triples (643, 0:00:00.054968) +- INFO - ----- reify-roles-as-concept: 10/10 new triples (653, 0:00:00.049645) +- INFO - ----- reclassify-existing-variable: 45/45 new triples (698, 0:00:00.035618) +- INFO - ----- add-new-variable-for-reified-concept: 8/8 new triples (706, 0:00:00.052706) +- INFO - ----- add-amr-leaf-for-reclassified-concept: 33/33 new triples (739, 0:00:00.058790) +- INFO - ----- add-amr-leaf-for-reified-concept: 8/8 new triples (747, 0:00:00.030476) +- INFO - ----- add-amr-edge-for-core-relation: 27/27 new triples (774, 0:00:00.130285) +- INFO - ----- add-amr-edge-for-reified-concept: 12/12 new triples (786, 0:00:00.137288) +- INFO - ----- add-amr-edge-for-name-relation: 5/5 new triples (791, 0:00:00.071310) +- DEBUG - ----- add-value-for-quant-relation: 0/0 new triple (791, 0:00:00.063266) +- INFO - ----- add-amr-edge-for-polarity-relation: 5/5 new triples (796, 0:00:00.079597) +- INFO - ----- update-amr-edge-role-1: 15/15 new triples (811, 0:00:00.105109) +- INFO - ----- add-amr-root: 5/5 new triples (816, 0:00:00.022981) +- DEBUG - --- Serializing graph to tenet.tetras-libre.fr_demo_01_Preprocessing +- DEBUG - ----- step: Preprocessing +- DEBUG - ----- id: https://tenet.tetras-libre.fr/demo/01/ +- DEBUG - ----- work_file: /home/lamenji/Workspace/Tetras/tenet/tests/main_tests/test_owl_output/SolarSystemDev01-20230607/technical-data/tenet.tetras-libre.fr_demo_01-1/tenet.tetras-libre.fr_demo_01_Preprocessing.ttl +- DEBUG - ----- base: http://https://tenet.tetras-libre.fr/demo/01//Preprocessing +- INFO - ----- 218 triples extracted during Preprocessing step +- INFO - -- Step 2: Transduction +- INFO - --- Sequence: atomic extraction sequence +- INFO - ----- extract atom classes: 30/30 new triples (846, 0:00:00.168814) +- INFO - ----- extract atom individuals: 8/8 new triples (854, 0:00:00.048612) +- INFO - ----- extract atomic properties: 75/75 new triples (929, 0:00:00.217111) +- INFO - ----- extract atom values: 10/10 new triples (939, 0:00:00.058854) +- INFO - ----- extract atom phenomena: 14/14 new triples (953, 0:00:00.075223) +- INFO - ----- propagate atom relations: 24/68 new triples (977, 0:00:01.085414) +- INFO - --- Sequence: classification sequence (1) +- DEBUG - ----- classify modality phenomena: 0/0 new triple (977, 0:00:00.022418) +- INFO - ----- reclassify argument property to class: 11/14 new triples (988, 0:00:00.068087) +- INFO - --- Sequence: phenomena analyze sequence (1) +- INFO - ----- analyze "polarity" phenomena (1): 32/36 new triples (1020, 0:00:00.094644) +- DEBUG - ----- analyze "polarity" phenomena (2): 0/0 new triple (1020, 0:00:00.016775) +- DEBUG - ----- analyze "polarity" phenomena (3): 0/0 new triple (1020, 0:00:00.013501) +- DEBUG - ----- analyze "polarity" phenomena (4): 0/0 new triple (1020, 0:00:00.028878) +- DEBUG - ----- analyze "polarity" phenomena (5): 0/0 new triple (1020, 0:00:00.030895) +- DEBUG - ----- analyze modifier phenomena (mod): 0/0 new triple (1020, 0:00:00.012143) +- DEBUG - ----- classify modality phenomena: 0/0 new triple (1020, 0:00:00.018754) +- INFO - --- Sequence: phenomena analyze sequence (2) +- INFO - ----- analyze "or" phenomena (1): 1/1 new triple (1021, 0:00:00.068259) +- INFO - ----- analyze "or" phenomena (2): 55/82 new triples (1076, 0:00:00.265417) +- INFO - ----- analyze "and" phenomena (1): 2/14 new triples (1078, 0:00:00.154309) +- DEBUG - ----- analyze "and" phenomena (2): 0/0 new triple (1078, 0:00:00.009720) +- INFO - --- Sequence: composite class extraction sequence +- INFO - ----- extract composite classes (1): 127/138 new triples (1205, 0:00:00.483677) +- DEBUG - ----- extract composite classes (2): 0/0 new triple (1205, 0:00:00.031429) +- INFO - --- Sequence: classification sequence (2) +- INFO - ----- classify class net as entity from core arguments: 10/181 new triples (1215, 0:00:00.266924) +- DEBUG - ----- classify class net as entity from :part relation: 0/0 new triple (1215, 0:00:00.009020) +- DEBUG - ----- classify class net as entity from degree arguments: 0/0 new triple (1215, 0:00:00.016216) +- INFO - ----- Associate mother to class net from :domain relation: 5/34 new triples (1220, 0:00:00.082572) +- DEBUG - ----- Propagate individuals to net with same base node: 0/10 new triple (1220, 0:00:00.025169) +- INFO - ----- Propagate individuals to net with domain link: 3/60 new triples (1223, 0:00:00.110614) +- DEBUG - --- Serializing graph to tenet.tetras-libre.fr_demo_01_Transduction +- DEBUG - ----- step: Transduction +- DEBUG - ----- id: https://tenet.tetras-libre.fr/demo/01/ +- DEBUG - ----- work_file: /home/lamenji/Workspace/Tetras/tenet/tests/main_tests/test_owl_output/SolarSystemDev01-20230607/technical-data/tenet.tetras-libre.fr_demo_01-1/tenet.tetras-libre.fr_demo_01_Transduction.ttl +- DEBUG - ----- base: http://https://tenet.tetras-libre.fr/demo/01//Transduction +- INFO - ----- 407 triples extracted during Transduction step +- INFO - -- Step 3: Generation +- INFO - --- Sequence: OWL Generation Sequence +- INFO - ----- generate OWL class: 52/55 new triples (1275, 0:00:00.550302) +- INFO - ----- generate OWL property: 29/29 new triples (1304, 0:00:00.278730) +- INFO - --- *** November Transduction *** Sequence: main-generation-sequence +- DEBUG - ----- generate-individual: 0/0 new triple (1304, 0:00:00.012292) +- DEBUG - ----- classify-individual-1: 0/0 new triple (1304, 0:00:00.008140) +- DEBUG - ----- classify-individual-2: 0/0 new triple (1304, 0:00:00.009686) +- DEBUG - ----- add-restriction-to-class-1: 0/0 new triple (1304, 0:00:00.024252) +- DEBUG - ----- add-restriction-to-class-2: 0/0 new triple (1304, 0:00:00.013201) +- DEBUG - ----- add-restriction-to-class-3: 0/0 new triple (1304, 0:00:00.017938) +- DEBUG - ----- add-restriction-to-class-4: 0/0 new triple (1304, 0:00:00.012958) +- DEBUG - ----- add-restriction-to-class-5: 0/0 new triple (1304, 0:00:00.015493) +- DEBUG - ----- add-restriction-to-class-6: 0/0 new triple (1304, 0:00:00.012323) +- DEBUG - --- Serializing graph to tenet.tetras-libre.fr_demo_01_Generation +- DEBUG - ----- step: Generation +- DEBUG - ----- id: https://tenet.tetras-libre.fr/demo/01/ +- DEBUG - ----- work_file: /home/lamenji/Workspace/Tetras/tenet/tests/main_tests/test_owl_output/SolarSystemDev01-20230607/technical-data/tenet.tetras-libre.fr_demo_01-1/tenet.tetras-libre.fr_demo_01_Generation.ttl +- DEBUG - ----- base: http://https://tenet.tetras-libre.fr/demo/01//Generation +- INFO - ----- 81 triples extracted during Generation step +- DEBUG - --- Serializing graph to factoid file (/home/lamenji/Workspace/Tetras/tenet/tests/main_tests/test_owl_output/SolarSystemDev01-20230607/technical-data/tenet.tetras-libre.fr_demo_01-1/tenet.tetras-libre.fr_demo_01_factoid.ttl) +- DEBUG - ----- Number of factoids: 84 +- DEBUG - ----- Graph base: http://https://tenet.tetras-libre.fr/demo/01//factoid +- INFO - + === Final Ontology Generation === +- INFO - -- Making complete factoid graph by merging the result factoids +- INFO - ----- Total factoid number: 84 +- INFO - -- Serializing graph to factoid string +- INFO - ----- Graph base: http://https://tenet.tetras-libre.fr/demo/01//factoid +- INFO - -- Serializing graph to factoid file +- INFO - ----- Ontology Turtle File: /home/lamenji/Workspace/Tetras/tenet/tests/main_tests/test_owl_output/SolarSystemDev01-20230607/SolarSystemDev01_factoid.ttl +- INFO - + === Done === +- INFO - + *** Execution Time *** +----- Function: create_ontology_from_amrld_dir (tenet.main) +----- Total Time: 0:00:06.155432 +----- Process Time: 0:00:06.124055 + *** - *** diff --git a/tenet/transduction/query_builder.py b/tenet/transduction/query_builder.py index 70833c32acd913e2d85efc7d190785b691085707..44a186207af5c8543378ef4bb6b43dff6be10f4f 100644 --- a/tenet/transduction/query_builder.py +++ b/tenet/transduction/query_builder.py @@ -124,34 +124,3 @@ def generate_ask_query(graph, clause_list): query_code += f'\n ASK {{ {clause_part} \n }}' return query_code - - - -#============================================================================== -# Method(s) to run specific SPARQL ASK query -#============================================================================== - -def is_class_net(graph, net_uri): - - # SPARQL query construction - clause_list = ['?classUri a [rdfs:subClassOf* net:Class_Net].'] - query_code = generate_ask_query(graph, clause_list) - - # SPARQL query execution - result = graph.query(query_code, initBindings={'classUri': net_uri}) - - # Result (True or False) - return query_code, bool(result) - - -def is_individual_net(graph, net_uri): - - # SPARQL query construction - clause_list = ['?classUri a [rdfs:subClassOf* net:Individual_Net].'] - query_code = generate_ask_query(graph, clause_list) - - # SPARQL query execution - result = graph.query(query_code, initBindings={'classUri': net_uri}) - - # Result (True or False) - return query_code, bool(result) \ No newline at end of file diff --git a/tests/dev_owl_rule_tests/test_data/devGraph-classes-to-generate-2.result.ttl b/tests/dev_owl_rule_tests/test_data/devGraph-classes-to-generate-2.result.ttl index a98bfc85a5f8d2087c20f58d923ef860a8be3218..d14b9d2dc47ef1b624ebf62b486f9528219aeb9b 100644 --- a/tests/dev_owl_rule_tests/test_data/devGraph-classes-to-generate-2.result.ttl +++ b/tests/dev_owl_rule_tests/test_data/devGraph-classes-to-generate-2.result.ttl @@ -427,28 +427,38 @@ cprm:targetOntologyURI a rdf:Property ; rdfs:subPropertyOf cprm:configParamProperty . ext-out:gravitation-bind-system a owl:Class ; - rdfs:subClassOf ext-out:gravitation ; + rdfs:subClassOf [ a owl:Restriction ; + owl:onProperty ext-out:bind ; + owl:someValuesFrom ext-out:system ], + ext-out:gravitation ; sys:fromStructure "SSC-01-01" . ext-out:object-orbit-hasManner-direct-sun a owl:Class ; - rdfs:subClassOf ext-out:object ; + rdfs:subClassOf [ a owl:Restriction ; + owl:onProperty ext-out:orbit-hasManner-direct ; + owl:someValuesFrom ext-out:sun ], + ext-out:object ; sys:fromStructure "SSC-01-01" . ext-out:object-orbit-hasManner-not-direct-sun a owl:Class ; - rdfs:subClassOf ext-out:object ; - sys:fromStructure "SSC-01-01" . - -ext-out:sun a owl:Class ; - rdfs:label "sun" ; - rdfs:subClassOf sys:Entity ; + rdfs:subClassOf [ a owl:Restriction ; + owl:onProperty ext-out:orbit-hasManner-not-direct ; + owl:someValuesFrom ext-out:sun ], + ext-out:object ; sys:fromStructure "SSC-01-01" . ext-out:system-hasPart-object a owl:Class ; - rdfs:subClassOf ext-out:system ; + rdfs:subClassOf [ a owl:Restriction ; + owl:onProperty ext-out:hasPart ; + owl:someValuesFrom ext-out:object ], + ext-out:system ; sys:fromStructure "SSC-01-01" . ext-out:system-hasPart-sun a owl:Class ; - rdfs:subClassOf ext-out:system ; + rdfs:subClassOf [ a owl:Restriction ; + owl:onProperty ext-out:hasPart ; + owl:someValuesFrom ext-out:sun ], + ext-out:system ; sys:fromStructure "SSC-01-01" . <https://tenet.tetras-libre.fr/semantic-net> a owl:Ontology . @@ -1108,16 +1118,6 @@ ns2:or a ns2:Concept ; sys:Out_ObjectProperty a owl:ObjectProperty . -ext-out:object a owl:Class ; - rdfs:label "object" ; - rdfs:subClassOf sys:Entity ; - sys:fromStructure "SSC-01-01" . - -ext-out:system a owl:Class ; - rdfs:label "system" ; - rdfs:subClassOf sys:Entity ; - sys:fromStructure "SSC-01-01" . - net:Phenomena_Net a owl:Class ; rdfs:subClassOf net:Net . @@ -1190,6 +1190,21 @@ ns2:Frame a ns2:Concept, :value_negative a :AMR_Value ; rdfs:label "negative" . +ext-out:object a owl:Class ; + rdfs:label "object" ; + rdfs:subClassOf sys:Entity ; + sys:fromStructure "SSC-01-01" . + +ext-out:sun a owl:Class ; + rdfs:label "sun" ; + rdfs:subClassOf sys:Entity ; + sys:fromStructure "SSC-01-01" . + +ext-out:system a owl:Class ; + rdfs:label "system" ; + rdfs:subClassOf sys:Entity ; + sys:fromStructure "SSC-01-01" . + net:Axiom_Net a owl:Class ; rdfs:subClassOf net:Net . diff --git a/tests/dev_owl_rule_tests/test_rule_owl_generator_class.py b/tests/dev_owl_rule_tests/test_rule_owl_generator_class.py index 0aafc724787cca483393793498fd05c9330be650..3294b7ac09b79b79503eacb1799aeb1ad8a88618 100644 --- a/tests/dev_owl_rule_tests/test_rule_owl_generator_class.py +++ b/tests/dev_owl_rule_tests/test_rule_owl_generator_class.py @@ -79,6 +79,8 @@ def add_triples_in_graph(test_file_name, graph, triple_list): #============================================================================== # Development Test #============================================================================== + +# -- Test: Methods to search for patterns def test_search_pattern_1(graph): print('\n -- Search patterns (1)') @@ -98,7 +100,10 @@ def test_search_pattern_2(graph): result_str = f'>>> ' result_str += f'{selection.class_net.n3(graph.namespace_manager)}' print(result_str) - + + +# -- Test: Methods to get useful net list + def __test_get_list_function(graph, get_function, f_name): print(f'\n -- Get net list with {f_name}') net_list = get_function(graph) @@ -126,7 +131,9 @@ def test_get_mother_class_net_list(graph): for net in net_list: print(f'>>> {net.uri.n3(graph.namespace_manager)}') return net_list - + + +# -- Test: Check Method(s) def check_net_not_deprecated(graph, atom_class_net_list, composite_class_net_list): not_deprecated_net_list = [] @@ -137,7 +144,8 @@ def check_net_not_deprecated(graph, atom_class_net_list, composite_class_net_lis for net in not_deprecated_net_list: print(f'>>> {net.uri.n3(graph.namespace_manager)}') - + +# -- Test: Generator Methods def test_generate_owl_triple_definition(graph, class_net): print(f' ----- Generate OWL Triple Definition ({class_net.uri.n3(graph.namespace_manager)})') @@ -180,17 +188,17 @@ if __name__ == '__main__': print('\n *** Step Test (1) ***') - # print('\n -- Step 1a: search pattern') - # pattern_set_1 = test_search_pattern_1(graph_1) - # pattern_set_2 = test_search_pattern_2(graph_1) + print('\n -- Step 1a: search pattern') + pattern_set_1 = test_search_pattern_1(graph_1) + pattern_set_2 = test_search_pattern_2(graph_1) - # print('\n -- Step 1b: get semantic net list') + print('\n -- Step 1b: get semantic net list') atom_class_net_list = test_get_atom_class_net_list(graph_1) composite_class_net_list = test_get_composite_class_net_list(graph_1) mother_class_net_list = test_get_mother_class_net_list(graph_1) - # print('\n -- Step 2: check class net not deprecated') - # check_net_not_deprecated(graph_1, atom_class_net_list, composite_class_net_list) + print('\n -- Step 2: check class net not deprecated') + check_net_not_deprecated(graph_1, atom_class_net_list, composite_class_net_list) print('\n -- Step 3: generate OWL triple definition for class net') total_triple_list = [] @@ -202,32 +210,32 @@ if __name__ == '__main__': print('\n \n') - # print('\n *** Step Test (2) ***') + print('\n *** Step Test (2) ***') - # print('\n -- Step 1a: search pattern') - # pattern_set_1 = test_search_pattern_1(graph_2) - # pattern_set_2 = test_search_pattern_2(graph_2) + print('\n -- Step 1a: search pattern') + pattern_set_1 = test_search_pattern_1(graph_2) + pattern_set_2 = test_search_pattern_2(graph_2) - # print('\n -- Step 1b: get semantic net list') - # atom_class_net_list = test_get_atom_class_net_list(graph_2) - # composite_class_net_list = test_get_composite_class_net_list(graph_2) - # mother_class_net_list = test_get_mother_class_net_list(graph_2) + print('\n -- Step 1b: get semantic net list') + atom_class_net_list = test_get_atom_class_net_list(graph_2) + composite_class_net_list = test_get_composite_class_net_list(graph_2) + mother_class_net_list = test_get_mother_class_net_list(graph_2) - # print('\n -- Step 2: check class net not deprecated') - # check_net_not_deprecated(graph_2, atom_class_net_list, composite_class_net_list) + print('\n -- Step 2: check class net not deprecated') + check_net_not_deprecated(graph_2, atom_class_net_list, composite_class_net_list) - # print('\n -- Step 3: generate OWL triple definition for class net') - # total_triple_list = [] - # for class_net in composite_class_net_list: - # if not class_net.is_deprecated(): - # total_triple_list = test_generate_owl_triple_definition(graph_1, class_net) - # print(f' ----- Total Number of triples: {len(total_triple_list)}') - - # print('\n \n') - - # print('\n *** Unit Test ***') - # test_rule_application(TEST_FILE_NAME_2, graph_2, amr_rule.generate_owl_class) - # print('\n \n') + print('\n -- Step 3: generate OWL triple definition for class net') + total_triple_list = [] + for class_net in composite_class_net_list: + if not class_net.is_deprecated(): + total_triple_list = test_generate_owl_triple_definition(graph_1, class_net) + print(f' ----- Total Number of triples: {len(total_triple_list)}') + + print('\n \n') + + print('\n *** Unit Test ***') + test_rule_application(TEST_FILE_NAME_2, graph_2, amr_rule.generate_owl_class) + print('\n \n') print('\n *** - ***') \ No newline at end of file diff --git a/tests/dev_technical_tests/test_transduction_query_builder.py b/tests/dev_technical_tests/test_transduction_query_builder.py index 58958eab7b0d9421e807b476322708a902ffeb9b..84ac7eb287eb61369d6accf72c8fdf173124b2d9 100644 --- a/tests/dev_technical_tests/test_transduction_query_builder.py +++ b/tests/dev_technical_tests/test_transduction_query_builder.py @@ -28,9 +28,7 @@ from context import tenet # Module to test from tenet.transduction.query_builder import ( generate_select_query, - generate_ask_query, - is_class_net, - is_individual_net + generate_ask_query ) from tenet.transduction.rdfterm_computer import produce_uriref @@ -78,18 +76,18 @@ if __name__ == '__main__': query = generate_ask_query(graph, clause_list) print(f"Generated ASK query:\n{query}\n") - # Test is_class_net function - net_uri = produce_uriref(graph, 'net:atomClass_sun_s2') - query_code, is_class = is_class_net(graph, net_uri) - print(f"Specific ASK query:\n{query_code}\n") - print(f"Is {net_uri} a net:Class_Net? {is_class}\n") + # # Test is_class_net function + # net_uri = produce_uriref(graph, 'net:atomClass_sun_s2') + # query_code, is_class = is_class_net(graph, net_uri) + # print(f"Specific ASK query:\n{query_code}\n") + # print(f"Is {net_uri} a net:Class_Net? {is_class}\n") - # Test is_individual_net function (1) - net_uri = produce_uriref(graph, 'net:atomClass_sun_s2') - _, is_individual = is_individual_net(graph, net_uri) - print(f"Is {net_uri} a subclass of net:Individual_Net? {is_individual}\n") + # # Test is_individual_net function (1) + # net_uri = produce_uriref(graph, 'net:atomClass_sun_s2') + # _, is_individual = is_individual_net(graph, net_uri) + # print(f"Is {net_uri} a subclass of net:Individual_Net? {is_individual}\n") - # Test is_individual_net function (2) - net_uri = produce_uriref(graph, 'net:individual_system_SolarSystem') - _, is_individual = is_individual_net(graph, net_uri) - print(f"Is {net_uri} a subclass of net:Individual_Net? {is_individual}\n") + # # Test is_individual_net function (2) + # net_uri = produce_uriref(graph, 'net:individual_system_SolarSystem') + # _, is_individual = is_individual_net(graph, net_uri) + # print(f"Is {net_uri} a subclass of net:Individual_Net? {is_individual}\n") diff --git a/tests/main_tests/test_owl_output/SolarSystemDev01-20230607/technical-data/tenet.log b/tests/main_tests/test_owl_output/SolarSystemDev01-20230607/technical-data/tenet.log index 9b129982e697c84baffc52f08c880ae44a6f2677..99f9ece3c0981274b99ea41b0de360e7cb29943a 100644 --- a/tests/main_tests/test_owl_output/SolarSystemDev01-20230607/technical-data/tenet.log +++ b/tests/main_tests/test_owl_output/SolarSystemDev01-20230607/technical-data/tenet.log @@ -74,25 +74,25 @@ - DEBUG - ----- Total rule number: 87 - INFO - -- Step 1: Preprocessing - INFO - --- *** November Transduction *** Sequence: amrld-correcting-sequence -- INFO - ----- fix-amr-bug-about-system-solar-planet: 5/5 new triples (603, 0:00:00.030399) +- INFO - ----- fix-amr-bug-about-system-solar-planet: 5/5 new triples (603, 0:00:00.027404) - INFO - --- *** November Transduction *** Sequence: amr-reification-sequence -- INFO - ----- reclassify-concept-1: 10/10 new triples (613, 0:00:00.157238) -- DEBUG - ----- reclassify-concept-2: 0/0 new triple (613, 0:00:00.066780) -- INFO - ----- reclassify-concept-3: 12/12 new triples (625, 0:00:00.046627) -- INFO - ----- reclassify-concept-4: 16/16 new triples (641, 0:00:00.062558) -- INFO - ----- reclassify-concept-5: 2/4 new triples (643, 0:00:00.045841) -- INFO - ----- reify-roles-as-concept: 10/10 new triples (653, 0:00:00.046275) -- INFO - ----- reclassify-existing-variable: 45/45 new triples (698, 0:00:00.032289) -- INFO - ----- add-new-variable-for-reified-concept: 8/8 new triples (706, 0:00:00.045437) -- INFO - ----- add-amr-leaf-for-reclassified-concept: 33/33 new triples (739, 0:00:00.043069) -- INFO - ----- add-amr-leaf-for-reified-concept: 8/8 new triples (747, 0:00:00.028202) -- INFO - ----- add-amr-edge-for-core-relation: 27/27 new triples (774, 0:00:00.110534) -- INFO - ----- add-amr-edge-for-reified-concept: 12/12 new triples (786, 0:00:00.126485) -- INFO - ----- add-amr-edge-for-name-relation: 5/5 new triples (791, 0:00:00.074225) -- DEBUG - ----- add-value-for-quant-relation: 0/0 new triple (791, 0:00:00.060572) -- INFO - ----- add-amr-edge-for-polarity-relation: 5/5 new triples (796, 0:00:00.078471) -- INFO - ----- update-amr-edge-role-1: 15/15 new triples (811, 0:00:00.089760) -- INFO - ----- add-amr-root: 5/5 new triples (816, 0:00:00.026956) +- INFO - ----- reclassify-concept-1: 10/10 new triples (613, 0:00:00.130204) +- DEBUG - ----- reclassify-concept-2: 0/0 new triple (613, 0:00:00.050778) +- INFO - ----- reclassify-concept-3: 12/12 new triples (625, 0:00:00.039706) +- INFO - ----- reclassify-concept-4: 16/16 new triples (641, 0:00:00.050183) +- INFO - ----- reclassify-concept-5: 2/4 new triples (643, 0:00:00.054968) +- INFO - ----- reify-roles-as-concept: 10/10 new triples (653, 0:00:00.049645) +- INFO - ----- reclassify-existing-variable: 45/45 new triples (698, 0:00:00.035618) +- INFO - ----- add-new-variable-for-reified-concept: 8/8 new triples (706, 0:00:00.052706) +- INFO - ----- add-amr-leaf-for-reclassified-concept: 33/33 new triples (739, 0:00:00.058790) +- INFO - ----- add-amr-leaf-for-reified-concept: 8/8 new triples (747, 0:00:00.030476) +- INFO - ----- add-amr-edge-for-core-relation: 27/27 new triples (774, 0:00:00.130285) +- INFO - ----- add-amr-edge-for-reified-concept: 12/12 new triples (786, 0:00:00.137288) +- INFO - ----- add-amr-edge-for-name-relation: 5/5 new triples (791, 0:00:00.071310) +- DEBUG - ----- add-value-for-quant-relation: 0/0 new triple (791, 0:00:00.063266) +- INFO - ----- add-amr-edge-for-polarity-relation: 5/5 new triples (796, 0:00:00.079597) +- INFO - ----- update-amr-edge-role-1: 15/15 new triples (811, 0:00:00.105109) +- INFO - ----- add-amr-root: 5/5 new triples (816, 0:00:00.022981) - DEBUG - --- Serializing graph to tenet.tetras-libre.fr_demo_01_Preprocessing - DEBUG - ----- step: Preprocessing - DEBUG - ----- id: https://tenet.tetras-libre.fr/demo/01/ @@ -101,38 +101,38 @@ - INFO - ----- 218 triples extracted during Preprocessing step - INFO - -- Step 2: Transduction - INFO - --- Sequence: atomic extraction sequence -- INFO - ----- extract atom classes: 30/30 new triples (846, 0:00:00.142146) -- INFO - ----- extract atom individuals: 8/8 new triples (854, 0:00:00.050765) -- INFO - ----- extract atomic properties: 75/75 new triples (929, 0:00:00.211753) -- INFO - ----- extract atom values: 10/10 new triples (939, 0:00:00.053667) -- INFO - ----- extract atom phenomena: 14/14 new triples (953, 0:00:00.072069) -- INFO - ----- propagate atom relations: 24/68 new triples (977, 0:00:01.082822) +- INFO - ----- extract atom classes: 30/30 new triples (846, 0:00:00.168814) +- INFO - ----- extract atom individuals: 8/8 new triples (854, 0:00:00.048612) +- INFO - ----- extract atomic properties: 75/75 new triples (929, 0:00:00.217111) +- INFO - ----- extract atom values: 10/10 new triples (939, 0:00:00.058854) +- INFO - ----- extract atom phenomena: 14/14 new triples (953, 0:00:00.075223) +- INFO - ----- propagate atom relations: 24/68 new triples (977, 0:00:01.085414) - INFO - --- Sequence: classification sequence (1) -- DEBUG - ----- classify modality phenomena: 0/0 new triple (977, 0:00:00.015675) -- INFO - ----- reclassify argument property to class: 11/14 new triples (988, 0:00:00.065641) +- DEBUG - ----- classify modality phenomena: 0/0 new triple (977, 0:00:00.022418) +- INFO - ----- reclassify argument property to class: 11/14 new triples (988, 0:00:00.068087) - INFO - --- Sequence: phenomena analyze sequence (1) -- INFO - ----- analyze "polarity" phenomena (1): 32/36 new triples (1020, 0:00:00.084990) -- DEBUG - ----- analyze "polarity" phenomena (2): 0/0 new triple (1020, 0:00:00.021535) -- DEBUG - ----- analyze "polarity" phenomena (3): 0/0 new triple (1020, 0:00:00.014894) -- DEBUG - ----- analyze "polarity" phenomena (4): 0/0 new triple (1020, 0:00:00.033570) -- DEBUG - ----- analyze "polarity" phenomena (5): 0/0 new triple (1020, 0:00:00.045120) -- DEBUG - ----- analyze modifier phenomena (mod): 0/0 new triple (1020, 0:00:00.009501) -- DEBUG - ----- classify modality phenomena: 0/0 new triple (1020, 0:00:00.037509) +- INFO - ----- analyze "polarity" phenomena (1): 32/36 new triples (1020, 0:00:00.094644) +- DEBUG - ----- analyze "polarity" phenomena (2): 0/0 new triple (1020, 0:00:00.016775) +- DEBUG - ----- analyze "polarity" phenomena (3): 0/0 new triple (1020, 0:00:00.013501) +- DEBUG - ----- analyze "polarity" phenomena (4): 0/0 new triple (1020, 0:00:00.028878) +- DEBUG - ----- analyze "polarity" phenomena (5): 0/0 new triple (1020, 0:00:00.030895) +- DEBUG - ----- analyze modifier phenomena (mod): 0/0 new triple (1020, 0:00:00.012143) +- DEBUG - ----- classify modality phenomena: 0/0 new triple (1020, 0:00:00.018754) - INFO - --- Sequence: phenomena analyze sequence (2) -- INFO - ----- analyze "or" phenomena (1): 1/1 new triple (1021, 0:00:00.154759) -- INFO - ----- analyze "or" phenomena (2): 55/82 new triples (1076, 0:00:00.274200) -- INFO - ----- analyze "and" phenomena (1): 2/14 new triples (1078, 0:00:00.135006) -- DEBUG - ----- analyze "and" phenomena (2): 0/0 new triple (1078, 0:00:00.012529) +- INFO - ----- analyze "or" phenomena (1): 1/1 new triple (1021, 0:00:00.068259) +- INFO - ----- analyze "or" phenomena (2): 55/82 new triples (1076, 0:00:00.265417) +- INFO - ----- analyze "and" phenomena (1): 2/14 new triples (1078, 0:00:00.154309) +- DEBUG - ----- analyze "and" phenomena (2): 0/0 new triple (1078, 0:00:00.009720) - INFO - --- Sequence: composite class extraction sequence -- INFO - ----- extract composite classes (1): 127/138 new triples (1205, 0:00:00.477197) -- DEBUG - ----- extract composite classes (2): 0/0 new triple (1205, 0:00:00.022984) +- INFO - ----- extract composite classes (1): 127/138 new triples (1205, 0:00:00.483677) +- DEBUG - ----- extract composite classes (2): 0/0 new triple (1205, 0:00:00.031429) - INFO - --- Sequence: classification sequence (2) -- INFO - ----- classify class net as entity from core arguments: 10/181 new triples (1215, 0:00:00.329055) -- DEBUG - ----- classify class net as entity from :part relation: 0/0 new triple (1215, 0:00:00.010577) -- DEBUG - ----- classify class net as entity from degree arguments: 0/0 new triple (1215, 0:00:00.021244) -- INFO - ----- Associate mother to class net from :domain relation: 5/34 new triples (1220, 0:00:00.072415) -- DEBUG - ----- Propagate individuals to net with same base node: 0/10 new triple (1220, 0:00:00.042265) -- INFO - ----- Propagate individuals to net with domain link: 3/60 new triples (1223, 0:00:00.137930) +- INFO - ----- classify class net as entity from core arguments: 10/181 new triples (1215, 0:00:00.266924) +- DEBUG - ----- classify class net as entity from :part relation: 0/0 new triple (1215, 0:00:00.009020) +- DEBUG - ----- classify class net as entity from degree arguments: 0/0 new triple (1215, 0:00:00.016216) +- INFO - ----- Associate mother to class net from :domain relation: 5/34 new triples (1220, 0:00:00.082572) +- DEBUG - ----- Propagate individuals to net with same base node: 0/10 new triple (1220, 0:00:00.025169) +- INFO - ----- Propagate individuals to net with domain link: 3/60 new triples (1223, 0:00:00.110614) - DEBUG - --- Serializing graph to tenet.tetras-libre.fr_demo_01_Transduction - DEBUG - ----- step: Transduction - DEBUG - ----- id: https://tenet.tetras-libre.fr/demo/01/ @@ -141,18 +141,18 @@ - INFO - ----- 407 triples extracted during Transduction step - INFO - -- Step 3: Generation - INFO - --- Sequence: OWL Generation Sequence -- INFO - ----- generate OWL class: 52/55 new triples (1275, 0:00:00.582687) -- INFO - ----- generate OWL property: 29/29 new triples (1304, 0:00:00.370962) +- INFO - ----- generate OWL class: 52/55 new triples (1275, 0:00:00.550302) +- INFO - ----- generate OWL property: 29/29 new triples (1304, 0:00:00.278730) - INFO - --- *** November Transduction *** Sequence: main-generation-sequence -- DEBUG - ----- generate-individual: 0/0 new triple (1304, 0:00:00.009683) -- DEBUG - ----- classify-individual-1: 0/0 new triple (1304, 0:00:00.007736) -- DEBUG - ----- classify-individual-2: 0/0 new triple (1304, 0:00:00.010955) -- DEBUG - ----- add-restriction-to-class-1: 0/0 new triple (1304, 0:00:00.022417) -- DEBUG - ----- add-restriction-to-class-2: 0/0 new triple (1304, 0:00:00.015102) -- DEBUG - ----- add-restriction-to-class-3: 0/0 new triple (1304, 0:00:00.018685) -- DEBUG - ----- add-restriction-to-class-4: 0/0 new triple (1304, 0:00:00.021309) -- DEBUG - ----- add-restriction-to-class-5: 0/0 new triple (1304, 0:00:00.019380) -- DEBUG - ----- add-restriction-to-class-6: 0/0 new triple (1304, 0:00:00.014781) +- DEBUG - ----- generate-individual: 0/0 new triple (1304, 0:00:00.012292) +- DEBUG - ----- classify-individual-1: 0/0 new triple (1304, 0:00:00.008140) +- DEBUG - ----- classify-individual-2: 0/0 new triple (1304, 0:00:00.009686) +- DEBUG - ----- add-restriction-to-class-1: 0/0 new triple (1304, 0:00:00.024252) +- DEBUG - ----- add-restriction-to-class-2: 0/0 new triple (1304, 0:00:00.013201) +- DEBUG - ----- add-restriction-to-class-3: 0/0 new triple (1304, 0:00:00.017938) +- DEBUG - ----- add-restriction-to-class-4: 0/0 new triple (1304, 0:00:00.012958) +- DEBUG - ----- add-restriction-to-class-5: 0/0 new triple (1304, 0:00:00.015493) +- DEBUG - ----- add-restriction-to-class-6: 0/0 new triple (1304, 0:00:00.012323) - DEBUG - --- Serializing graph to tenet.tetras-libre.fr_demo_01_Generation - DEBUG - ----- step: Generation - DEBUG - ----- id: https://tenet.tetras-libre.fr/demo/01/