diff --git a/tenet/scheme/amr_master_rule/__init__.py b/tenet/scheme/amr_master_rule/__init__.py index c14bdebe370d638aba3499f7ff4c8c3d9fac6fee..b3b7be63a1f620598f1cc244163bb20336aa2165 100644 --- a/tenet/scheme/amr_master_rule/__init__.py +++ b/tenet/scheme/amr_master_rule/__init__.py @@ -1,15 +1,15 @@ from scheme.amr_master_rule.preprocessing.amr_reification import * from scheme.amr_master_rule.preprocessing.amrld_correcting import * -from scheme.amr_master_rule.transduction.atom_class_extractor import * -from scheme.amr_master_rule.transduction.atom_individual_extractor import * -from scheme.amr_master_rule.transduction.atom_property_extractor import * -from scheme.amr_master_rule.transduction.atom_value_extractor import * -from scheme.amr_master_rule.transduction.atom_phenomena_extractor import * -from scheme.amr_master_rule.transduction.atom_relation_propagator import * +from scheme.amr_master_rule.transduction.extractor.atom_class_extractor import * +from scheme.amr_master_rule.transduction.extractor.atom_individual_extractor import * +from scheme.amr_master_rule.transduction.extractor.atom_property_extractor import * +from scheme.amr_master_rule.transduction.extractor.atom_value_extractor import * +from scheme.amr_master_rule.transduction.extractor.atom_phenomena_extractor import * +from scheme.amr_master_rule.transduction.extractor.atom_relation_propagator import * -from scheme.amr_master_rule.transduction.composite_class_extractor_1 import * -from scheme.amr_master_rule.transduction.composite_class_extractor_2 import * +from scheme.amr_master_rule.transduction.extractor.composite_class_extractor_1 import * +from scheme.amr_master_rule.transduction.extractor.composite_class_extractor_2 import * from scheme.amr_master_rule.transduction.classifier.phenomena_modality_classifier import * from scheme.amr_master_rule.transduction.classifier.property_class_classifier import * @@ -19,18 +19,21 @@ from scheme.amr_master_rule.transduction.classifier.entity_classifier_3 import * from scheme.amr_master_rule.transduction.classifier.mother_classifier_1 import * from scheme.amr_master_rule.transduction.classifier.individual_propagator import * -from scheme.amr_master_rule.transduction.phenomena_polarity_analyzer_1 import * -from scheme.amr_master_rule.transduction.phenomena_polarity_analyzer_2 import * -from scheme.amr_master_rule.transduction.phenomena_polarity_analyzer_3 import * -from scheme.amr_master_rule.transduction.phenomena_polarity_analyzer_4 import * -from scheme.amr_master_rule.transduction.phenomena_polarity_analyzer_5 import * -from scheme.amr_master_rule.transduction.phenomena_mod_analyzer_1 import * -from scheme.amr_master_rule.transduction.phenomena_or_analyzer_1 import * -from scheme.amr_master_rule.transduction.phenomena_or_analyzer_2 import * -from scheme.amr_master_rule.transduction.phenomena_and_analyzer_1 import * -from scheme.amr_master_rule.transduction.phenomena_and_analyzer_2 import * +from scheme.amr_master_rule.transduction.phenomena_analyzer.polarity_analyzer_1 import * +from scheme.amr_master_rule.transduction.phenomena_analyzer.polarity_analyzer_2 import * +from scheme.amr_master_rule.transduction.phenomena_analyzer.polarity_analyzer_3 import * +from scheme.amr_master_rule.transduction.phenomena_analyzer.polarity_analyzer_4 import * +from scheme.amr_master_rule.transduction.phenomena_analyzer.polarity_analyzer_5 import * +from scheme.amr_master_rule.transduction.phenomena_analyzer.mod_analyzer_1 import * +from scheme.amr_master_rule.transduction.phenomena_analyzer.or_analyzer_1 import * +from scheme.amr_master_rule.transduction.phenomena_analyzer.or_analyzer_2 import * +from scheme.amr_master_rule.transduction.phenomena_analyzer.and_analyzer_1 import * +from scheme.amr_master_rule.transduction.phenomena_analyzer.and_analyzer_2 import * from scheme.amr_master_rule.owl_generation.owl_property_generator import * from scheme.amr_master_rule.owl_generation.owl_class_generator import * from scheme.amr_master_rule import * + + + diff --git a/tenet/scheme/amr_master_rule/transduction/extractor/__init__.py b/tenet/scheme/amr_master_rule/transduction/extractor/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/tenet/scheme/amr_master_rule/transduction/atom_class_extractor.py b/tenet/scheme/amr_master_rule/transduction/extractor/atom_class_extractor.py similarity index 100% rename from tenet/scheme/amr_master_rule/transduction/atom_class_extractor.py rename to tenet/scheme/amr_master_rule/transduction/extractor/atom_class_extractor.py diff --git a/tenet/scheme/amr_master_rule/transduction/atom_individual_extractor.py b/tenet/scheme/amr_master_rule/transduction/extractor/atom_individual_extractor.py similarity index 100% rename from tenet/scheme/amr_master_rule/transduction/atom_individual_extractor.py rename to tenet/scheme/amr_master_rule/transduction/extractor/atom_individual_extractor.py diff --git a/tenet/scheme/amr_master_rule/transduction/atom_phenomena_extractor.py b/tenet/scheme/amr_master_rule/transduction/extractor/atom_phenomena_extractor.py similarity index 100% rename from tenet/scheme/amr_master_rule/transduction/atom_phenomena_extractor.py rename to tenet/scheme/amr_master_rule/transduction/extractor/atom_phenomena_extractor.py diff --git a/tenet/scheme/amr_master_rule/transduction/atom_property_extractor.py b/tenet/scheme/amr_master_rule/transduction/extractor/atom_property_extractor.py similarity index 100% rename from tenet/scheme/amr_master_rule/transduction/atom_property_extractor.py rename to tenet/scheme/amr_master_rule/transduction/extractor/atom_property_extractor.py diff --git a/tenet/scheme/amr_master_rule/transduction/atom_relation_propagator.py b/tenet/scheme/amr_master_rule/transduction/extractor/atom_relation_propagator.py similarity index 100% rename from tenet/scheme/amr_master_rule/transduction/atom_relation_propagator.py rename to tenet/scheme/amr_master_rule/transduction/extractor/atom_relation_propagator.py diff --git a/tenet/scheme/amr_master_rule/transduction/atom_value_extractor.py b/tenet/scheme/amr_master_rule/transduction/extractor/atom_value_extractor.py similarity index 100% rename from tenet/scheme/amr_master_rule/transduction/atom_value_extractor.py rename to tenet/scheme/amr_master_rule/transduction/extractor/atom_value_extractor.py diff --git a/tenet/scheme/amr_master_rule/transduction/composite_class_extractor_1.py b/tenet/scheme/amr_master_rule/transduction/extractor/composite_class_extractor_1.py similarity index 100% rename from tenet/scheme/amr_master_rule/transduction/composite_class_extractor_1.py rename to tenet/scheme/amr_master_rule/transduction/extractor/composite_class_extractor_1.py diff --git a/tenet/scheme/amr_master_rule/transduction/composite_class_extractor_2.py b/tenet/scheme/amr_master_rule/transduction/extractor/composite_class_extractor_2.py similarity index 100% rename from tenet/scheme/amr_master_rule/transduction/composite_class_extractor_2.py rename to tenet/scheme/amr_master_rule/transduction/extractor/composite_class_extractor_2.py diff --git a/tenet/scheme/amr_master_rule/transduction/phenomena_analyzer/__init__.py b/tenet/scheme/amr_master_rule/transduction/phenomena_analyzer/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..8d1c8b69c3fce7bea45c73efd06983e3c419a92f --- /dev/null +++ b/tenet/scheme/amr_master_rule/transduction/phenomena_analyzer/__init__.py @@ -0,0 +1 @@ + diff --git a/tenet/scheme/amr_master_rule/transduction/phenomena_and_analyzer_1.py b/tenet/scheme/amr_master_rule/transduction/phenomena_analyzer/and_analyzer_1.py similarity index 100% rename from tenet/scheme/amr_master_rule/transduction/phenomena_and_analyzer_1.py rename to tenet/scheme/amr_master_rule/transduction/phenomena_analyzer/and_analyzer_1.py diff --git a/tenet/scheme/amr_master_rule/transduction/phenomena_and_analyzer_2.py b/tenet/scheme/amr_master_rule/transduction/phenomena_analyzer/and_analyzer_2.py similarity index 100% rename from tenet/scheme/amr_master_rule/transduction/phenomena_and_analyzer_2.py rename to tenet/scheme/amr_master_rule/transduction/phenomena_analyzer/and_analyzer_2.py diff --git a/tenet/scheme/amr_master_rule/transduction/phenomena_mod_analyzer_1.py b/tenet/scheme/amr_master_rule/transduction/phenomena_analyzer/mod_analyzer_1.py similarity index 100% rename from tenet/scheme/amr_master_rule/transduction/phenomena_mod_analyzer_1.py rename to tenet/scheme/amr_master_rule/transduction/phenomena_analyzer/mod_analyzer_1.py diff --git a/tenet/scheme/amr_master_rule/transduction/phenomena_or_analyzer_1.py b/tenet/scheme/amr_master_rule/transduction/phenomena_analyzer/or_analyzer_1.py similarity index 100% rename from tenet/scheme/amr_master_rule/transduction/phenomena_or_analyzer_1.py rename to tenet/scheme/amr_master_rule/transduction/phenomena_analyzer/or_analyzer_1.py diff --git a/tenet/scheme/amr_master_rule/transduction/phenomena_or_analyzer_2.py b/tenet/scheme/amr_master_rule/transduction/phenomena_analyzer/or_analyzer_2.py similarity index 100% rename from tenet/scheme/amr_master_rule/transduction/phenomena_or_analyzer_2.py rename to tenet/scheme/amr_master_rule/transduction/phenomena_analyzer/or_analyzer_2.py diff --git a/tenet/scheme/amr_master_rule/transduction/phenomena_polarity_analyzer_1.py b/tenet/scheme/amr_master_rule/transduction/phenomena_analyzer/polarity_analyzer_1.py similarity index 100% rename from tenet/scheme/amr_master_rule/transduction/phenomena_polarity_analyzer_1.py rename to tenet/scheme/amr_master_rule/transduction/phenomena_analyzer/polarity_analyzer_1.py diff --git a/tenet/scheme/amr_master_rule/transduction/phenomena_polarity_analyzer_2.py b/tenet/scheme/amr_master_rule/transduction/phenomena_analyzer/polarity_analyzer_2.py similarity index 100% rename from tenet/scheme/amr_master_rule/transduction/phenomena_polarity_analyzer_2.py rename to tenet/scheme/amr_master_rule/transduction/phenomena_analyzer/polarity_analyzer_2.py diff --git a/tenet/scheme/amr_master_rule/transduction/phenomena_polarity_analyzer_3.py b/tenet/scheme/amr_master_rule/transduction/phenomena_analyzer/polarity_analyzer_3.py similarity index 100% rename from tenet/scheme/amr_master_rule/transduction/phenomena_polarity_analyzer_3.py rename to tenet/scheme/amr_master_rule/transduction/phenomena_analyzer/polarity_analyzer_3.py diff --git a/tenet/scheme/amr_master_rule/transduction/phenomena_polarity_analyzer_4.py b/tenet/scheme/amr_master_rule/transduction/phenomena_analyzer/polarity_analyzer_4.py similarity index 100% rename from tenet/scheme/amr_master_rule/transduction/phenomena_polarity_analyzer_4.py rename to tenet/scheme/amr_master_rule/transduction/phenomena_analyzer/polarity_analyzer_4.py diff --git a/tenet/scheme/amr_master_rule/transduction/phenomena_polarity_analyzer_5.py b/tenet/scheme/amr_master_rule/transduction/phenomena_analyzer/polarity_analyzer_5.py similarity index 100% rename from tenet/scheme/amr_master_rule/transduction/phenomena_polarity_analyzer_5.py rename to tenet/scheme/amr_master_rule/transduction/phenomena_analyzer/polarity_analyzer_5.py diff --git a/tenet/tenet.log b/tenet/tenet.log index eda27af70f9d1b639d242d3926ebcb8131c3b474..cc4b2f7d1b41ca6b6f51752dfe33196e40c36cfb 100644 --- a/tenet/tenet.log +++ b/tenet/tenet.log @@ -71,25 +71,25 @@ - DEBUG - ----- Total rule number: 87 - INFO - -- Applying extraction step: preprocessing - INFO - --- *** November Transduction *** Sequence: amrld-correcting-sequence -- INFO - ----- fix-amr-bug-about-system-solar-planet: 5/5 new triples (603, 0:00:00.038465) +- INFO - ----- fix-amr-bug-about-system-solar-planet: 5/5 new triples (603, 0:00:00.039640) - INFO - --- *** November Transduction *** Sequence: amr-reification-sequence -- INFO - ----- reclassify-concept-1: 10/10 new triples (613, 0:00:00.282426) -- DEBUG - ----- reclassify-concept-2: 0/0 new triple (613, 0:00:00.066092) -- INFO - ----- reclassify-concept-3: 12/12 new triples (625, 0:00:00.055373) -- INFO - ----- reclassify-concept-4: 16/16 new triples (641, 0:00:00.077507) -- INFO - ----- reclassify-concept-5: 2/4 new triples (643, 0:00:00.049211) -- INFO - ----- reify-roles-as-concept: 10/10 new triples (653, 0:00:00.048264) -- INFO - ----- reclassify-existing-variable: 45/45 new triples (698, 0:00:00.029960) -- INFO - ----- add-new-variable-for-reified-concept: 8/8 new triples (706, 0:00:00.063811) -- INFO - ----- add-amr-leaf-for-reclassified-concept: 33/33 new triples (739, 0:00:00.053221) -- INFO - ----- add-amr-leaf-for-reified-concept: 8/8 new triples (747, 0:00:00.046700) -- INFO - ----- add-amr-edge-for-core-relation: 27/27 new triples (774, 0:00:00.121552) -- INFO - ----- add-amr-edge-for-reified-concept: 12/12 new triples (786, 0:00:00.147536) -- INFO - ----- add-amr-edge-for-name-relation: 5/5 new triples (791, 0:00:00.073139) -- DEBUG - ----- add-value-for-quant-relation: 0/0 new triple (791, 0:00:00.081215) -- INFO - ----- add-amr-edge-for-polarity-relation: 5/5 new triples (796, 0:00:00.080029) -- INFO - ----- update-amr-edge-role-1: 15/15 new triples (811, 0:00:00.094489) -- INFO - ----- add-amr-root: 5/5 new triples (816, 0:00:00.026923) +- INFO - ----- reclassify-concept-1: 10/10 new triples (613, 0:00:00.192898) +- DEBUG - ----- reclassify-concept-2: 0/0 new triple (613, 0:00:00.067928) +- INFO - ----- reclassify-concept-3: 12/12 new triples (625, 0:00:00.056336) +- INFO - ----- reclassify-concept-4: 16/16 new triples (641, 0:00:00.069512) +- INFO - ----- reclassify-concept-5: 2/4 new triples (643, 0:00:00.048901) +- INFO - ----- reify-roles-as-concept: 10/10 new triples (653, 0:00:00.055242) +- INFO - ----- reclassify-existing-variable: 45/45 new triples (698, 0:00:00.037881) +- INFO - ----- add-new-variable-for-reified-concept: 8/8 new triples (706, 0:00:00.054377) +- INFO - ----- add-amr-leaf-for-reclassified-concept: 33/33 new triples (739, 0:00:00.074481) +- INFO - ----- add-amr-leaf-for-reified-concept: 8/8 new triples (747, 0:00:00.048664) +- INFO - ----- add-amr-edge-for-core-relation: 27/27 new triples (774, 0:00:00.119393) +- INFO - ----- add-amr-edge-for-reified-concept: 12/12 new triples (786, 0:00:00.150665) +- INFO - ----- add-amr-edge-for-name-relation: 5/5 new triples (791, 0:00:00.074775) +- DEBUG - ----- add-value-for-quant-relation: 0/0 new triple (791, 0:00:00.078568) +- INFO - ----- add-amr-edge-for-polarity-relation: 5/5 new triples (796, 0:00:00.079529) +- INFO - ----- update-amr-edge-role-1: 15/15 new triples (811, 0:00:00.183285) +- INFO - ----- add-amr-root: 5/5 new triples (816, 0:00:00.027759) - DEBUG - --- Serializing graph to tenet.tetras-libre.fr_demo_01_preprocessing - DEBUG - ----- step: preprocessing - DEBUG - ----- id: https://tenet.tetras-libre.fr/demo/01/ @@ -98,38 +98,38 @@ - INFO - ----- 218 triples extracted during preprocessing step - INFO - -- Applying extraction step: transduction - INFO - --- *** February Transduction *** Sequence: atomic extraction sequence -- INFO - ----- extract atom classes: 30/30 new triples (846, 0:00:00.158094) -- INFO - ----- extract atom individuals: 8/8 new triples (854, 0:00:00.047297) -- INFO - ----- extract atomic properties: 75/75 new triples (929, 0:00:00.272437) -- INFO - ----- extract atom values: 10/10 new triples (939, 0:00:00.064467) -- INFO - ----- extract atom phenomena: 14/14 new triples (953, 0:00:00.074700) -- INFO - ----- propagate atom relations: 24/68 new triples (977, 0:00:01.083079) +- INFO - ----- extract atom classes: 30/30 new triples (846, 0:00:00.153952) +- INFO - ----- extract atom individuals: 8/8 new triples (854, 0:00:00.051652) +- INFO - ----- extract atomic properties: 75/75 new triples (929, 0:00:00.223038) +- INFO - ----- extract atom values: 10/10 new triples (939, 0:00:00.056399) +- INFO - ----- extract atom phenomena: 14/14 new triples (953, 0:00:00.068081) +- INFO - ----- propagate atom relations: 24/68 new triples (977, 0:00:01.050067) - INFO - --- *** February Transduction *** Sequence: classification sequence (1) -- DEBUG - ----- classify modality phenomena: 0/0 new triple (977, 0:00:00.024375) -- INFO - ----- reclassify argument property to class: 11/14 new triples (988, 0:00:00.080458) +- DEBUG - ----- classify modality phenomena: 0/0 new triple (977, 0:00:00.022399) +- INFO - ----- reclassify argument property to class: 11/14 new triples (988, 0:00:00.073223) - INFO - --- *** February Transduction *** Sequence: phenomena analyze sequence (1) -- INFO - ----- analyze "polarity" phenomena (1): 32/36 new triples (1020, 0:00:00.103165) -- DEBUG - ----- analyze "polarity" phenomena (2): 0/0 new triple (1020, 0:00:00.018240) -- DEBUG - ----- analyze "polarity" phenomena (3): 0/0 new triple (1020, 0:00:00.017097) -- DEBUG - ----- analyze "polarity" phenomena (4): 0/0 new triple (1020, 0:00:00.035740) -- DEBUG - ----- analyze "polarity" phenomena (5): 0/0 new triple (1020, 0:00:00.033599) -- DEBUG - ----- analyze modifier phenomena (mod): 0/0 new triple (1020, 0:00:00.078896) -- DEBUG - ----- classify modality phenomena: 0/0 new triple (1020, 0:00:00.017780) +- INFO - ----- analyze "polarity" phenomena (1): 32/36 new triples (1020, 0:00:00.113775) +- DEBUG - ----- analyze "polarity" phenomena (2): 0/0 new triple (1020, 0:00:00.016841) +- DEBUG - ----- analyze "polarity" phenomena (3): 0/0 new triple (1020, 0:00:00.013444) +- DEBUG - ----- analyze "polarity" phenomena (4): 0/0 new triple (1020, 0:00:00.031810) +- DEBUG - ----- analyze "polarity" phenomena (5): 0/0 new triple (1020, 0:00:00.033551) +- DEBUG - ----- analyze modifier phenomena (mod): 0/0 new triple (1020, 0:00:00.009921) +- DEBUG - ----- classify modality phenomena: 0/0 new triple (1020, 0:00:00.018679) - INFO - --- *** February Transduction *** Sequence: phenomena analyze sequence (2) -- INFO - ----- analyze "or" phenomena (1): 1/1 new triple (1021, 0:00:00.094118) -- INFO - ----- analyze "or" phenomena (2): 55/82 new triples (1076, 0:00:00.314064) -- INFO - ----- analyze "and" phenomena (1): 2/14 new triples (1078, 0:00:00.133441) -- DEBUG - ----- analyze "and" phenomena (2): 0/0 new triple (1078, 0:00:00.010072) +- INFO - ----- analyze "or" phenomena (1): 1/1 new triple (1021, 0:00:00.080789) +- INFO - ----- analyze "or" phenomena (2): 55/82 new triples (1076, 0:00:00.267649) +- INFO - ----- analyze "and" phenomena (1): 2/14 new triples (1078, 0:00:00.149071) +- DEBUG - ----- analyze "and" phenomena (2): 0/0 new triple (1078, 0:00:00.012343) - INFO - --- *** February Transduction *** Sequence: composite class extraction sequence -- INFO - ----- extract composite classes (1): 127/138 new triples (1205, 0:00:00.537571) -- DEBUG - ----- extract composite classes (2): 0/0 new triple (1205, 0:00:00.028224) +- INFO - ----- extract composite classes (1): 127/138 new triples (1205, 0:00:00.529373) +- DEBUG - ----- extract composite classes (2): 0/0 new triple (1205, 0:00:00.025257) - INFO - --- *** February Transduction *** Sequence: classification sequence (2) -- INFO - ----- classify class net as entity from core arguments: 10/181 new triples (1215, 0:00:00.307893) -- DEBUG - ----- classify class net as entity from :part relation: 0/0 new triple (1215, 0:00:00.009309) -- DEBUG - ----- classify class net as entity from degree arguments: 0/0 new triple (1215, 0:00:00.019820) -- INFO - ----- Associate mother to class net from :domain relation: 5/34 new triples (1220, 0:00:00.087336) -- DEBUG - ----- Propagate individuals to net with same base node: 0/10 new triple (1220, 0:00:00.030522) -- INFO - ----- Propagate individuals to net with domain link: 3/60 new triples (1223, 0:00:00.182877) +- INFO - ----- classify class net as entity from core arguments: 10/181 new triples (1215, 0:00:00.285318) +- DEBUG - ----- classify class net as entity from :part relation: 0/0 new triple (1215, 0:00:00.032858) +- DEBUG - ----- classify class net as entity from degree arguments: 0/0 new triple (1215, 0:00:00.014241) +- INFO - ----- Associate mother to class net from :domain relation: 5/34 new triples (1220, 0:00:00.081235) +- DEBUG - ----- Propagate individuals to net with same base node: 0/10 new triple (1220, 0:00:00.023326) +- INFO - ----- Propagate individuals to net with domain link: 3/60 new triples (1223, 0:00:00.108165) - DEBUG - --- Serializing graph to tenet.tetras-libre.fr_demo_01_transduction - DEBUG - ----- step: transduction - DEBUG - ----- id: https://tenet.tetras-libre.fr/demo/01/ @@ -138,23 +138,23 @@ - INFO - ----- 407 triples extracted during transduction step - INFO - -- Applying extraction step: generation - INFO - --- *** February Transduction *** Sequence: class_generation_sequence -- INFO - ----- generate OWL class: 32/35 new triples (1255, 0:00:00.410772) +- INFO - ----- generate OWL class: 32/35 new triples (1255, 0:00:00.523008) - INFO - --- *** February Transduction *** Sequence: property_generation_sequence -- INFO - ----- generate OWL property: 29/29 new triples (1284, 0:00:00.312209) +- INFO - ----- generate OWL property: 29/29 new triples (1284, 0:00:00.379346) - INFO - --- *** November Transduction *** Sequence: main-generation-sequence -- DEBUG - ----- generate-individual: 0/0 new triple (1284, 0:00:00.010674) -- DEBUG - ----- classify-individual-1: 0/0 new triple (1284, 0:00:00.007916) -- DEBUG - ----- classify-individual-2: 0/0 new triple (1284, 0:00:00.009813) -- DEBUG - ----- generate-atom-property-1: 0/0 new triple (1284, 0:00:00.009952) -- DEBUG - ----- generate-atom-property-12: 0/0 new triple (1284, 0:00:00.014522) -- DEBUG - ----- generate-inverse-relation: 0/0 new triple (1284, 0:00:00.008621) -- DEBUG - ----- generate-composite-class: 0/0 new triple (1284, 0:00:00.014036) -- DEBUG - ----- add-restriction-to-class-1: 0/0 new triple (1284, 0:00:00.025526) -- DEBUG - ----- add-restriction-to-class-2: 0/0 new triple (1284, 0:00:00.017040) -- DEBUG - ----- add-restriction-to-class-3: 0/0 new triple (1284, 0:00:00.015579) -- DEBUG - ----- add-restriction-to-class-4: 0/0 new triple (1284, 0:00:00.013332) -- DEBUG - ----- add-restriction-to-class-5: 0/0 new triple (1284, 0:00:00.018855) -- DEBUG - ----- add-restriction-to-class-6: 0/0 new triple (1284, 0:00:00.015815) +- DEBUG - ----- generate-individual: 0/0 new triple (1284, 0:00:00.015632) +- DEBUG - ----- classify-individual-1: 0/0 new triple (1284, 0:00:00.010806) +- DEBUG - ----- classify-individual-2: 0/0 new triple (1284, 0:00:00.015326) +- DEBUG - ----- generate-atom-property-1: 0/0 new triple (1284, 0:00:00.017602) +- DEBUG - ----- generate-atom-property-12: 0/0 new triple (1284, 0:00:00.014531) +- DEBUG - ----- generate-inverse-relation: 0/0 new triple (1284, 0:00:00.010692) +- DEBUG - ----- generate-composite-class: 0/0 new triple (1284, 0:00:00.015239) +- DEBUG - ----- add-restriction-to-class-1: 0/0 new triple (1284, 0:00:00.031440) +- DEBUG - ----- add-restriction-to-class-2: 0/0 new triple (1284, 0:00:00.016106) +- DEBUG - ----- add-restriction-to-class-3: 0/0 new triple (1284, 0:00:00.018612) +- DEBUG - ----- add-restriction-to-class-4: 0/0 new triple (1284, 0:00:00.016749) +- DEBUG - ----- add-restriction-to-class-5: 0/0 new triple (1284, 0:00:00.018862) +- DEBUG - ----- add-restriction-to-class-6: 0/0 new triple (1284, 0:00:00.015577) - DEBUG - --- Serializing graph to tenet.tetras-libre.fr_demo_01_generation - DEBUG - ----- step: generation - DEBUG - ----- id: https://tenet.tetras-libre.fr/demo/01/ @@ -177,6 +177,6 @@ - INFO - *** Execution Time *** ----- Function: create_ontology_from_amrld_file (tenet.main) ------ Total Time: 0:00:06.738201 ------ Process Time: 0:00:06.621823 +----- Total Time: 0:00:06.636527 +----- Process Time: 0:00:06.529145 *** - *** diff --git a/tests/dev_owl_rule_tests/phenomena_analyzer/__init__.py b/tests/dev_owl_rule_tests/phenomena_analyzer/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..8d1c8b69c3fce7bea45c73efd06983e3c419a92f --- /dev/null +++ b/tests/dev_owl_rule_tests/phenomena_analyzer/__init__.py @@ -0,0 +1 @@ + diff --git a/tests/dev_owl_rule_tests/phenomena_analyzer/and_analyzer_1.py b/tests/dev_owl_rule_tests/phenomena_analyzer/and_analyzer_1.py new file mode 100644 index 0000000000000000000000000000000000000000..c2dc0da604d872fa0001309e9d47fdefc875f5ea --- /dev/null +++ b/tests/dev_owl_rule_tests/phenomena_analyzer/and_analyzer_1.py @@ -0,0 +1,138 @@ +#!/usr/bin/python3.10 +# -*-coding:Utf-8 -* + +#============================================================================== +# TENET: Rule to conjunctive phenomena and (rule 1) +#------------------------------------------------------------------------------ +# Net Expansion AMR rule to analyse conjunctive phenomena (and) +# Rule: property(_, and_phenomena) => relation(property, argument) +#============================================================================== + +from rdflib import Graph + +import transduction +from transduction import net +from transduction.query_builder import generate_select_query +from transduction.rdfterm_computer import produce_uriref, produce_literal + + +#============================================================================== +# Pattern Search: property(_, and_phenomena) +#============================================================================== + +CONJUNCTION_PHENOMENA_URI = 'amr:phenomena_conjunction_and' + +def __search_pattern(graph): + select_data_list = ['?property_net', '?net_relation', '?phenomena_net'] + clause_list = [f'?property_net a [rdfs:subClassOf* net:Property_Net].', + f'?phenomena_net a [rdfs:subClassOf* net:Phenomena_Net].', + f'?phenomena_net net:hasPhenomenaType {CONJUNCTION_PHENOMENA_URI}.', + f'?net_relation a [rdfs:subClassOf* net:Relation].', + f'?property_net ?net_relation ?phenomena_net.'] + query_code = generate_select_query(graph, select_data_list, clause_list) + result_set = graph.query(query_code) + return query_code, result_set + + + +#============================================================================== +# Useful Additional Search +#============================================================================== + +def __search_op_class_pattern(graph, phenomena_net_uri, num): + assert 1 <= num <= 9, f'invalid number ({num})' + select_data_list = ['?class_net'] + clause_list = [f'?class_net a [rdfs:subClassOf* net:Class_Net].', + (phenomena_net_uri, f'amr:role_op{num}', '?class_net')] + query_code = generate_select_query(graph, select_data_list, clause_list) + result_set = graph.query(query_code) + return query_code, result_set + +def __search_phenomena_operator_class(graph, phenomena_net_uri): + query_code = '' + op_set = [] + for num in range(1, 9+1): + query_code, result_set = __search_op_class_pattern(graph, phenomena_net_uri, num) + op_set += result_set + return query_code, op_set + + +def __search_op_property_pattern(graph, phenomena_net_uri, num): + assert 1 <= num <= 9, f'invalid number ({num})' + select_data_list = ['?property_net'] + clause_list = [f'?property_net a [rdfs:subClassOf* net:Property_Net].', + (phenomena_net_uri, f'amr:role_op{num}', '?property_net')] + query_code = generate_select_query(graph, select_data_list, clause_list) + result_set = graph.query(query_code) + return query_code, result_set + +def __search_phenomena_operator_property(graph, phenomena_net_uri): + query_code = '' + op_set = [] + for num in range(1, 9+1): + query_code, result_set = __search_op_property_pattern(graph, phenomena_net_uri, num) + op_set += result_set + return query_code, op_set + + + +#============================================================================== +# Useful Computation Method(s) +#============================================================================== + +def __propagate_relation(left_net, amr_relation_uri, right_net_uri): + new_relation = (left_net.uri, amr_relation_uri, right_net_uri) + up_relation_list = left_net.output_relation_list + [new_relation] + left_net.output_relation_list = up_relation_list + + + +#============================================================================== +# Construct Method(s) +#============================================================================== + +# None + + +#============================================================================== +# Main Method +#============================================================================== + +def analyze_phenomena_and_1(graph): + + # -- Rule Initialization + rule_label = 'analyze "and" phenomena (1)' + rule_triple_list = [] + + # -- Search for patterns + _, pattern_set = __search_pattern(graph) + + # -- Pattern Analysis + for pattern in pattern_set: + property_net = net.PropertyNet(graph, uri=pattern.property_net) + phenomena_net = net.PhenomenaNet(graph, uri=pattern.phenomena_net) + + # -- Search for phenomena operators + + # -- Relation Propagation for Operator Class Net + _, operator_class_set = __search_phenomena_operator_class(graph, phenomena_net.uri) + for operator in operator_class_set: + amr_relation_uri = produce_uriref(graph, pattern.net_relation) + right_net_uri = produce_uriref(graph, operator.class_net) + __propagate_relation(property_net, amr_relation_uri, right_net_uri) + rule_triple_list += property_net.generate_net_relation_triples() + + # -- Relation Propagation for Operator Class Net + _, operator_property_set = __search_phenomena_operator_property(graph, phenomena_net.uri) + for operator in operator_property_set: + amr_relation_uri = produce_uriref(graph, pattern.net_relation) + right_net_uri = produce_uriref(graph, operator.property_net) + __propagate_relation(property_net, amr_relation_uri, right_net_uri) + rule_triple_list += property_net.generate_net_relation_triples() + + + # -- New Net Construction (as union of properties) + # _, triple_list = __construct_class_union_net(graph, class_net_1, class_net_list) + # rule_triple_list += triple_list + + return rule_label, rule_triple_list \ No newline at end of file diff --git a/tests/dev_owl_rule_tests/phenomena_analyzer/and_analyzer_2.py b/tests/dev_owl_rule_tests/phenomena_analyzer/and_analyzer_2.py new file mode 100644 index 0000000000000000000000000000000000000000..5c4fcb40eee9f3781438d8fc966c096cad40ea83 --- /dev/null +++ b/tests/dev_owl_rule_tests/phenomena_analyzer/and_analyzer_2.py @@ -0,0 +1,138 @@ +#!/usr/bin/python3.10 +# -*-coding:Utf-8 -* + +#============================================================================== +# TENET: Rule to conjunctive phenomena and (rule 2) +#------------------------------------------------------------------------------ +# Net Expansion AMR rule to analyse conjunctive phenomena (and) +# Rule: phenomena(_, and_phenomena) => relation(phenomena, argument) +#============================================================================== + +from rdflib import Graph + +import transduction +from transduction import net +from transduction.query_builder import generate_select_query +from transduction.rdfterm_computer import produce_uriref, produce_literal + + +#============================================================================== +# Pattern Search: modality(_, and_phenomena) +#============================================================================== + +CONJUNCTION_PHENOMENA_URI = 'amr:phenomena_conjunction_and' + +def __search_pattern(graph): + select_data_list = ['?left_phenomena_net', '?net_relation', '?right_phenomena_net'] + clause_list = [f'?left_phenomena_net a [rdfs:subClassOf* net:Phenomena_Net].', + f'?right_phenomena_net a [rdfs:subClassOf* net:Phenomena_Net].', + f'?right_phenomena_net net:hasPhenomenaType {CONJUNCTION_PHENOMENA_URI}.', + f'?net_relation a [rdfs:subClassOf* net:Relation].', + f'?left_phenomena_net ?net_relation ?right_phenomena_net.'] + query_code = generate_select_query(graph, select_data_list, clause_list) + result_set = graph.query(query_code) + return query_code, result_set + + + +#============================================================================== +# Useful Additional Search +#============================================================================== + +def __search_op_class_pattern(graph, phenomena_net_uri, num): + assert 1 <= num <= 9, f'invalid number ({num})' + select_data_list = ['?class_net'] + clause_list = [f'?class_net a [rdfs:subClassOf* net:Class_Net].', + (phenomena_net_uri, f'amr:role_op{num}', '?class_net')] + query_code = generate_select_query(graph, select_data_list, clause_list) + result_set = graph.query(query_code) + return query_code, result_set + +def __search_phenomena_operator_class(graph, phenomena_net_uri): + query_code = '' + op_set = [] + for num in range(1, 9+1): + query_code, result_set = __search_op_class_pattern(graph, phenomena_net_uri, num) + op_set += result_set + return query_code, op_set + + +def __search_op_property_pattern(graph, phenomena_net_uri, num): + assert 1 <= num <= 9, f'invalid number ({num})' + select_data_list = ['?property_net'] + clause_list = [f'?property_net a [rdfs:subClassOf* net:Property_Net].', + (phenomena_net_uri, f'amr:role_op{num}', '?property_net')] + query_code = generate_select_query(graph, select_data_list, clause_list) + result_set = graph.query(query_code) + return query_code, result_set + +def __search_phenomena_operator_property(graph, phenomena_net_uri): + query_code = '' + op_set = [] + for num in range(1, 9+1): + query_code, result_set = __search_op_property_pattern(graph, phenomena_net_uri, num) + op_set += result_set + return query_code, op_set + + + +#============================================================================== +# Useful Computation Method(s) +#============================================================================== + +def __propagate_relation(left_net, amr_relation_uri, right_net_uri): + new_relation = (left_net.uri, amr_relation_uri, right_net_uri) + up_relation_list = left_net.output_relation_list + [new_relation] + left_net.output_relation_list = up_relation_list + + + +#============================================================================== +# Construct Method(s) +#============================================================================== + +# None + + +#============================================================================== +# Main Method +#============================================================================== + +def analyze_phenomena_and_2(graph): + + # -- Rule Initialization + rule_label = 'analyze "and" phenomena (2)' + rule_triple_list = [] + + # -- Search for patterns + _, pattern_set = __search_pattern(graph) + + # -- Pattern Analysis + for pattern in pattern_set: + property_net = net.PhenomenaNet(graph, uri=pattern.left_phenomena_net) + phenomena_net = net.PhenomenaNet(graph, uri=pattern.right_phenomena_net) + + # -- Search for phenomena operators + + # -- Relation Propagation for Operator Class Net + _, operator_class_set = __search_phenomena_operator_class(graph, phenomena_net.uri) + for operator in operator_class_set: + amr_relation_uri = produce_uriref(graph, pattern.net_relation) + right_net_uri = produce_uriref(graph, operator.class_net) + __propagate_relation(property_net, amr_relation_uri, right_net_uri) + rule_triple_list += property_net.generate_net_relation_triples() + + # -- Relation Propagation for Operator Class Net + _, operator_property_set = __search_phenomena_operator_property(graph, phenomena_net.uri) + for operator in operator_property_set: + amr_relation_uri = produce_uriref(graph, pattern.net_relation) + right_net_uri = produce_uriref(graph, operator.property_net) + __propagate_relation(property_net, amr_relation_uri, right_net_uri) + rule_triple_list += property_net.generate_net_relation_triples() + + + # -- New Net Construction (as union of properties) + # _, triple_list = __construct_class_union_net(graph, class_net_1, class_net_list) + # rule_triple_list += triple_list + + return rule_label, rule_triple_list \ No newline at end of file diff --git a/tests/dev_owl_rule_tests/phenomena_analyzer/mod_analyzer_1.py b/tests/dev_owl_rule_tests/phenomena_analyzer/mod_analyzer_1.py new file mode 100644 index 0000000000000000000000000000000000000000..dd2090e6ffd4a1775e2a028ec1e39fafbfbfbe32 --- /dev/null +++ b/tests/dev_owl_rule_tests/phenomena_analyzer/mod_analyzer_1.py @@ -0,0 +1,182 @@ +#!/usr/bin/python3.10 +# -*-coding:Utf-8 -* + +#============================================================================== +# TENET: Rule to analyze phenomena mod (rule 1) +#------------------------------------------------------------------------------ +# Net Expansion AMR rule to analyse modifier phenomena (mod) +# Rule: mod(class, class) => compositeClass +#============================================================================== + +import rdflib +from rdflib import Graph + +import transduction +from transduction import net +from transduction.query_builder import generate_select_query +from transduction.naming_computer import define_axiom_naming +from transduction.naming_computer import define_composite_naming_2 + + +#============================================================================== +# Pattern Search: mod(class, class) +#============================================================================== + +MOD_RELATION = 'amr:role_mod' + +def __search_pattern(graph): + select_data_list = ['?class_net_1', '?class_net_2'] + 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) + result_set = graph.query(query_code) + return query_code, result_set + + + +#============================================================================== +# Useful Computation Method(s) +#============================================================================== + +def __extract_naming(net, default='none'): + naming = f'{default}' + naming_list = net.naming + if len(naming_list) > 0: + assert len(naming_list) == 1, f'Houston, we have a problem: too many naming' + naming = naming_list[0] + return naming + +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): + name_1 = __extract_naming(class_net_1, default='something') + name_2 = __extract_naming(class_net_2, default='something') + return f'{name_2}-{name_1}' + + +def __filter_relation(relation_list): + result_list = [] + for relation in relation_list: + check = True + (s, p, o) = relation + if s == o: check = False + if p == MOD_RELATION: check = False + if check: result_list.append(relation) + return result_list + +def __propagate_relation(target_net, base_net): + target_net.input_relation_list = base_net.input_relation_list + out_relation_list = __filter_relation(base_net.output_relation_list) + target_net.output_relation_list = out_relation_list + + + +#============================================================================== +# Construct Method(s) +#============================================================================== + +def __construct_feature_restriction_net(graph, class_net): # TODO + + restriction_net = net.RestrictionNet(graph) + restriction_net.compose(class_net) + + # -- Data Computation + restriction_net.restriction_property = '--hasFeature--' # TODO + restriction_net.restriction_net_value = class_net.uri + + # -- Relation Propagation: None + + # -- Net Naming + restriction_net.naming = __define_feature_restriction_naming(class_net) + + # -- Finalization + restriction_net.finalize() + triple_list = restriction_net.generate_triple_definition() + + return restriction_net, triple_list + + + +def __construct_composite_class_net(graph, class_net_1, class_net_2): + + # -- Net Composition + composite_class_net = net.CompositeClassNet(graph) + composite_class_net.compose(class_net_1, class_net_2) + + # -- Data Computation + composite_class_net.mother_class_net = class_net_1.uri + + # -- Restriction Computation + triple_list_1 = [] + # restriction_net, triple_list_1 = __construct_feature_restriction_net(graph, class_net) + # composite_class_net.restriction = restriction_net.uri + + # -- Net Naming + composite_class_net.naming = __define_composite_naming(class_net_1, class_net_2) + + # -- Relation Propagation + __propagate_relation(composite_class_net, class_net_1) + + # -- Finalization + composite_class_net.finalize() + triple_list_2 = composite_class_net.generate_triple_definition() + result_triple_list = triple_list_1 + triple_list_2 + + return composite_class_net, result_triple_list + + + +def __construct_individual_net(graph, class_net): + + # -- Net Composition + individual_net = net.IndividualNet(graph) + individual_net.compose(class_net) + + # -- Data Computation + individual_net.base_class_name = f'Feature' + individual_net.mother_class_net = class_net.uri + + # -- Net Naming + individual_net.naming = f'{__extract_naming(class_net, default="something")}' + individual_net.individual_label = f'{__extract_naming(class_net, default="something")}' + + # -- Finalization + individual_net.finalize() + result_triple_list = individual_net.generate_triple_definition() + + return individual_net, result_triple_list + + + +#============================================================================== +# Main Method: analyze_phenomena_or_1 +#============================================================================== + +def analyze_phenomena_mod_1(graph): + + # -- Rule Initialization + rule_label = 'analyze modifier phenomena (mod)' + + # -- Search for patterns + _, pattern_set = __search_pattern(graph) + + # -- Selection Analyzing (1) + 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) + _, triple_list_1 = __construct_composite_class_net(graph, class_net_1, class_net_2) + _, triple_list_2 = __construct_individual_net(graph, class_net_2) + + # -- Resulting List Update + rule_triple_list += triple_list_1 + triple_list_2 + + # -- Deprecation: Origin Class Net + rule_triple_list += class_net_1.deprecate() + + return rule_label, rule_triple_list \ No newline at end of file diff --git a/tests/dev_owl_rule_tests/phenomena_analyzer/or_analyzer_1.py b/tests/dev_owl_rule_tests/phenomena_analyzer/or_analyzer_1.py new file mode 100644 index 0000000000000000000000000000000000000000..8283ee1d45006df0a62b820e009b374dc02e8159 --- /dev/null +++ b/tests/dev_owl_rule_tests/phenomena_analyzer/or_analyzer_1.py @@ -0,0 +1,212 @@ +#!/usr/bin/python3.10 +# -*-coding:Utf-8 -* + +#============================================================================== +# TENET: Rule to conjunctive phenomena or (rule 1) +#------------------------------------------------------------------------------ +# Net Expansion AMR rule to analyse conjunctive phenomena (or) +# Rule: property(class, or_phenomena) => compositeClass +#============================================================================== + +from rdflib import Graph + +import transduction +from transduction import net +from transduction.query_builder import generate_select_query +from transduction.naming_computer import define_composite_naming_1, define_restriction_naming + + +#============================================================================== +# Pattern Search: property(class, or_phenomena) +#============================================================================== + +def __rule_pattern_query_code(graph): + select_data_list = ['?property_net', '?class_net', '?phenomena_net'] + 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_code = generate_select_query(graph, select_data_list, clause_list) + return query_code + + +def __search_pattern(graph): + query_code = __rule_pattern_query_code(graph) + rule_pattern_set = graph.query(query_code) + return rule_pattern_set + + + +#============================================================================== +# Useful Additional Search +#============================================================================== + +def __class_op_pattern_query_code(graph, phenomena_net_uri, num): + assert 1 <= num <= 9, f'invalid number ({num})' + select_data_list = ['?class_net'] + clause_list = [f'?class_net a [rdfs:subClassOf* net:Class_Net].'] + clause_list.append((phenomena_net_uri, f'amr:role_op{num}', '?class_net')) + query_code = generate_select_query(graph, select_data_list, clause_list) + return query_code + + +def __search_class_phenomena_operator(graph, phenomena_net_uri): + op_set = [] + for num in range(1, 9+1): + query_code = __class_op_pattern_query_code(graph, phenomena_net_uri, num) + op_set += graph.query(query_code) + return op_set + + + +#============================================================================== +# Useful Computation Method(s) +#============================================================================== + +def __filter_relation(relation_list): + result_list = [] + for relation in relation_list: + check = True + (s, p, o) = relation + if s == o: check = False + if check: result_list.append(relation) + return result_list + + +def __propagate_relation(target_net, base_net): + # -- target_net.input_relation_list = base_net.input_relation_list + out_relation_list = __filter_relation(base_net.output_relation_list) + target_net.output_relation_list = out_relation_list + + + +#============================================================================== +# Construct Method(s) +#============================================================================== + +def __construct_restriction_net(graph, property_net_1, property_net_2): + + restriction_net = net.RestrictionNet(graph) + restriction_net.compose(property_net_1, property_net_2) + + # -- Data Computation + restriction_net.restriction_property = property_net_1.uri + restriction_net.restriction_net_value = property_net_2.uri + + # -- Relation Propagation: None + + # -- Net Naming + restriction_net.naming = define_restriction_naming(property_net_1, property_net_2) + + # -- Finalization + restriction_net.finalize() + triple_list = restriction_net.generate_triple_definition() + + return restriction_net, triple_list + + + +def __construct_composite_class_net_from_3_nets( + graph, base_class_net, core_property_net, target_class_net): + + # -- Net Composition + composite_class_net = net.CompositePropertyNet(graph) + composite_class_net.compose(base_class_net, core_property_net, target_class_net) + + # -- Data Computation + composite_class_net.mother_class_net = base_class_net.uri + + # -- Restriction Computation + restriction_net, triple_list_1 = __construct_restriction_net(graph, core_property_net, target_class_net) + composite_class_net.restriction = restriction_net.uri + + # -- Relation Propagation + __propagate_relation(composite_class_net, base_class_net) + + # -- Net Naming + composite_class_net.naming = define_composite_naming_1( + base_class_net, core_property_net, target_class_net) + + # -- Finalization + composite_class_net.finalize() + triple_list_2 = composite_class_net.generate_triple_definition() + result_triple_list = triple_list_1 + triple_list_2 + + return composite_class_net, result_triple_list + + + +def __construct_class_union_net(graph, base_class_net, class_net_list): + + # -- Net Composition + class_union_net = net.PropertyUnionNet(graph) + class_union_net.compose(base_class_net, class_net_list) + + # -- Data Computation: None + + # -- Restriction Computation: None + + # -- Relation Propagation + __propagate_relation(class_union_net, base_class_net) + + # -- Net Naming + class_union_net.naming = define_union_naming(base_class_net) + + # -- Finalization + class_union_net.finalize() + triple_list = class_union_net.generate_triple_definition() + + return class_union_net, triple_list + + +#============================================================================== +# Main Method: analyze_phenomena_or_1 +#============================================================================== + +def analyze_phenomena_or_1(graph): + + # -- Rule Initialization + rule_label = 'analyze "or" phenomena (1)' + + # -- Search for patterns + rule_pattern_set = __search_pattern(graph) + + # -- Selection Analyzing (1) + rule_triple_list = [] + for selection_1 in rule_pattern_set: + + # -- Net Selection + class_net_1 = net.ClassNet(graph, uri=selection_1.class_net) + property_net = net.PropertyNet(graph, uri=selection_1.property_net) + phenomena_net = net.PhenomenaNet(graph, uri=selection_1.phenomena_net) + + # -- Search for phenomena operators + class_operator_set = __search_class_phenomena_operator(graph, phenomena_net.uri) + + # -- Selection Analyzing (2) + class_net_list = [] + for selection_2 in class_operator_set: + # print(f' *** DEVTEST *** {selection_2.class_net}') + + # -- Net Selection + class_net_2 = net.ClassNet(graph, uri=selection_2.class_net) + + # -- New Net Construction (from 3 nets) + new_class, triple_list = __construct_composite_class_net_from_3_nets( + graph, class_net_1, property_net, class_net_2) + + # -- Resulting List Update + class_net_list.append(new_class) + rule_triple_list += triple_list + + # -- Deprecation: Origin Class Net + rule_triple_list += class_net_1.deprecate() + + # -- New Net Construction (as union of properties) + # _, triple_list = __construct_class_union_net(graph, class_net_1, class_net_list) + # rule_triple_list += triple_list + + return rule_label, rule_triple_list \ No newline at end of file diff --git a/tests/dev_owl_rule_tests/phenomena_analyzer/or_analyzer_2.py b/tests/dev_owl_rule_tests/phenomena_analyzer/or_analyzer_2.py new file mode 100644 index 0000000000000000000000000000000000000000..88955c5a726895760ed8c56c8b4bb58842ca973c --- /dev/null +++ b/tests/dev_owl_rule_tests/phenomena_analyzer/or_analyzer_2.py @@ -0,0 +1,217 @@ +#!/usr/bin/python3.10 +# -*-coding:Utf-8 -* + +#============================================================================== +# TENET: Rule to conjunctive phenomena or (rule 2) +#------------------------------------------------------------------------------ +# Net Expansion AMR rule to analyse conjunctive phenomena (or) +# Rule: property(property, or_phenomena) => compositeProperty +#============================================================================== + +from rdflib import Graph + +import transduction +from transduction import net +from transduction.query_builder import generate_select_query +from transduction.naming_computer import define_composite_naming_1, define_restriction_naming + + +#============================================================================== +# Search for patterns: property(property, or_phenomena) +#============================================================================== + +def __rule_pattern_query_code(graph): + select_data_list = ['?property_net_core', '?property_net_arg0', '?phenomena_net'] + clause_list = [] + clause_list.append(f'?property_net_core a [rdfs:subClassOf* net:Property_Net].') + clause_list.append(f'?property_net_arg0 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_core amr:role_ARG0 ?property_net_arg0.') + clause_list.append(f'?property_net_core amr:role_ARG1 ?phenomena_net.') + query_code = generate_select_query(graph, select_data_list, clause_list) + return query_code + + +def __search_pattern(graph): + query_code = __rule_pattern_query_code(graph) + rule_pattern_set = graph.query(query_code) + return rule_pattern_set + + + +#============================================================================== +# Search for phenomena operators: +#============================================================================== + +def __property_op_pattern_query_code(graph, phenomena_net_uri, num): + assert 1 <= num <= 9, f'invalid number ({num})' + select_data_list = ['?property_net'] + clause_list = [f'?property_net a [rdfs:subClassOf* net:Property_Net].'] + clause_list.append((phenomena_net_uri, f'amr:role_op{num}', '?property_net')) + query_code = generate_select_query(graph, select_data_list, clause_list) + return query_code + + +def __search_property_phenomena_operator(graph, phenomena_net_uri): + op_set = [] + for num in range(1, 9+1): + query_code = __property_op_pattern_query_code(graph, phenomena_net_uri, num) + op_set += graph.query(query_code) + return op_set + + + +#============================================================================== +# Relation Propagation +#============================================================================== + +def __filter_relation(relation_list): + result_list = [] + for relation in relation_list: + check = True + (s, p, o) = relation + if s == o: check = False + if check: result_list.append(relation) + return result_list + + +def __propagate_relation(target_net, base_net): + # -- target_net.input_relation_list = base_net.input_relation_list + out_relation_list = __filter_relation(base_net.output_relation_list) + target_net.output_relation_list = out_relation_list + + + +#============================================================================== +# Construct Methods: construction of composite property net +#============================================================================== + +def __construct_restriction_net(graph, property_net_1, property_net_2): + + restriction_net = net.RestrictionNet(graph) + restriction_net.compose(property_net_1, property_net_2) + + # -- Data Computation + restriction_net.restriction_property = property_net_1.uri + restriction_net.restriction_net_value = property_net_2.uri + + # -- Relation Propagation: None + + # -- Net Naming + restriction_net.naming = define_restriction_naming(property_net_1, property_net_2) + + # -- Finalization + restriction_net.finalize() + triple_list = restriction_net.generate_triple_definition() + + return restriction_net, triple_list + + + +def __construct_composite_property_net_from_3_properties( + graph, base_property_net, core_property_net, target_property_net): + + # -- Net Composition + composite_property_net = net.CompositePropertyNet(graph) + composite_property_net.compose(base_property_net, core_property_net, target_property_net) + + # -- Data Computation + composite_property_net.mother_property_net = base_property_net.uri + composite_property_net.property_type = 'owl:ObjectProperty' + + # -- Restriction Computation + restriction_net, triple_list_1 = __construct_restriction_net(graph, core_property_net, target_property_net) + composite_property_net.restriction = restriction_net.uri + + # -- Relation Propagation + __propagate_relation(composite_property_net, base_property_net) + + # -- Net Naming + composite_property_net.naming = define_composite_naming_1( + base_property_net, core_property_net, target_property_net) + + # -- Finalization + composite_property_net.finalize() + triple_list_2 = composite_property_net.generate_triple_definition() + result_triple_list = triple_list_1 + triple_list_2 + + return composite_property_net, result_triple_list + + + +def __construct_property_union_net(graph, base_property_net, property_net_list): + + # -- Net Composition + property_union_net = net.PropertyUnionNet(graph) + property_union_net.compose(base_property_net, property_net_list) + + # -- Data Computation: None + + # -- Restriction Computation: None + + # -- Relation Propagation + __propagate_relation(property_union_net, base_property_net) + + # -- Net Naming + property_union_net.naming = define_union_naming(base_property_net) + + # -- Finalization + property_union_net.finalize() + triple_list = property_union_net.generate_triple_definition() + + return property_union_net, triple_list + + + +#============================================================================== +# Main Method: analyze_phenomena_or_2 +#============================================================================== + +def analyze_phenomena_or_2(graph): + + # -- Rule Initialization + rule_label = 'analyze "or" phenomena (2)' + # print(f"--- *** February Transduction *** Sequence: {rule_label}") + + # -- Search for patterns + rule_pattern_set = __search_pattern(graph) + + # -- Selection Analyzing (1) + rule_triple_list = [] + for selection_1 in rule_pattern_set: + + # -- Net Selection + property_net_1 = net.PropertyNet(graph, uri=selection_1.property_net_arg0) + property_net_2 = net.PropertyNet(graph, uri=selection_1.property_net_core) + phenomena_net = net.PhenomenaNet(graph, uri=selection_1.phenomena_net) + + # -- Search for phenomena operators + property_operator_set = __search_property_phenomena_operator(graph, phenomena_net.uri) + + # -- Selection Analyzing (2) + property_net_list = [] + for selection_2 in property_operator_set: + # print(f' *** DEVTEST *** {selection_2.property_net}') + + # -- Net Selection + property_net_3 = net.PropertyNet(graph, uri=selection_2.property_net) + + # -- New Net Construction (from 3 property nets) + new_property, triple_list = __construct_composite_property_net_from_3_properties( + graph, property_net_1, property_net_2, property_net_3) + + # -- Resulting List Update + property_net_list.append(new_property) + rule_triple_list += triple_list + + # -- Deprecation: Origin Property Net + rule_triple_list += property_net_1.deprecate() + + # -- New Net Construction (as union of properties) + # _, triple_list = __construct_property_union_net(graph, property_net_1, property_net_list) + # rule_triple_list += triple_list + + return rule_label, rule_triple_list + + \ No newline at end of file diff --git a/tests/dev_owl_rule_tests/phenomena_analyzer/polarity_analyzer_1.py b/tests/dev_owl_rule_tests/phenomena_analyzer/polarity_analyzer_1.py new file mode 100644 index 0000000000000000000000000000000000000000..364ad348888513e6f09514dca64d923175b370e3 --- /dev/null +++ b/tests/dev_owl_rule_tests/phenomena_analyzer/polarity_analyzer_1.py @@ -0,0 +1,149 @@ +#!/usr/bin/python3.10 +# -*-coding:Utf-8 -* + +#============================================================================== +# TENET: Rule to negative polarity phenomena (rule 1) +#------------------------------------------------------------------------------ +# Net Expansion AMR rule to analyse negative polarity phenomena +# Rule: polarity(property, 'negative') => compositeClass +#============================================================================== + +import rdflib +from rdflib import Graph + +import transduction +from transduction import net +from transduction.query_builder import generate_select_query +from transduction.naming_computer import define_axiom_naming +from transduction.naming_computer import define_composite_naming_2 + + +#============================================================================== +# Pattern Search: polarity(property, 'negative') +#============================================================================== + +POLARITY_RELATION = 'amr:role_polarity' + +def __search_pattern(graph): + select_data_list = ['?property_net'] + clause_list = [f'?property_net a [rdfs:subClassOf* net:Property_Net].', + f'?property_net {POLARITY_RELATION} ?value_net.', + ('?value_net', 'net:hasValueLabel', rdflib.term.Literal('negative'))] + query_code = generate_select_query(graph, select_data_list, clause_list) + result_set = graph.query(query_code) + return query_code, result_set + + + +#============================================================================== +# Relation Propagation +#============================================================================== + +def __filter_relation(relation_list): + result_list = [] + for relation in relation_list: + check = True + (s, p, o) = relation + if s == o: check = False + if p == POLARITY_RELATION: check = False + if check: result_list.append(relation) + return result_list + + +def __propagate_relation(target_net, base_net): + target_net.input_relation_list = base_net.input_relation_list + out_relation_list = __filter_relation(base_net.output_relation_list) + target_net.output_relation_list = out_relation_list + + + +#============================================================================== +# Construct Methods: construction of composite class net +#============================================================================== + +def __construct_disjoint_axiom_net(graph, property_net_1, property_net_2): + + axiom_net = net.AxiomNet(graph) + axiom_net.compose(property_net_1, property_net_2) + + # -- Data Computation + axiom_net.axiom_name = 'disjointProperty' + axiom_net.axiom_uri = 'owl:propertyDisjointWith' + axiom_net.axiom_net_argument = [property_net_1.uri, property_net_2.uri] + + # -- Relation Propagation: None + + # -- Net Naming + arg_net_list = [property_net_1, property_net_2] + axiom_net.naming = define_axiom_naming(axiom_net, arg_net_list) + + # -- Finalization + axiom_net.finalize() + triple_list = axiom_net.generate_triple_definition() + + return axiom_net, triple_list + + + +def __construct_negative_property_net(graph, property_net_1): + + # -- Net Composition + composite_property_net = net.CompositePropertyNet(graph) + composite_property_net.compose(property_net_1) + + # -- Data Computation + composite_property_net.property_type = 'owl:ObjectProperty' + + # -- Restriction Computation + triple_list_1 = [] + # restriction_net, triple_list_1 = __construct_restriction_net(graph, property_net_1) + # composite_class_net.restriction = restriction_net.uri + + # -- Net Naming + composite_property_net.naming = define_composite_naming_2('not', property_net_1) + + # -- Relation Propagation + __propagate_relation(composite_property_net, property_net_1) + + # -- Finalization + composite_property_net.finalize() + triple_list_2 = composite_property_net.generate_triple_definition() + result_triple_list = triple_list_1 + triple_list_2 + + return composite_property_net, result_triple_list + + + +#============================================================================== +# Main Method +#============================================================================== + +def analyze_phenomena_polarity_1(graph): + + # -- Rule Initialization + rule_label = 'analyze "polarity" phenomena (1)' + rule_triple_list = [] + + # -- Search for patterns + _, pattern_set = __search_pattern(graph) + + # -- Pattern Analysis + for pattern in pattern_set: + + # -- Net Selection + property_net = net.PropertyNet(graph, uri=pattern.property_net) + + # -- New Negative Property Net + negative_property_net, triple_list_1 = __construct_negative_property_net(graph, property_net) + + # -- New Axiom Net + _, triple_list_2 = __construct_disjoint_axiom_net(graph, property_net, negative_property_net) + _, triple_list_3 = __construct_disjoint_axiom_net(graph, negative_property_net, property_net) + + # -- Update Rule Triple List + rule_triple_list += triple_list_1 + triple_list_2 + triple_list_3 + + # -- Deprecation: Origin Class Net + rule_triple_list += property_net.deprecate() + + return rule_label, rule_triple_list \ No newline at end of file diff --git a/tests/dev_owl_rule_tests/phenomena_analyzer/polarity_analyzer_2.py b/tests/dev_owl_rule_tests/phenomena_analyzer/polarity_analyzer_2.py new file mode 100644 index 0000000000000000000000000000000000000000..57358c28384afd9cb7ae498db8464dd8d28d095b --- /dev/null +++ b/tests/dev_owl_rule_tests/phenomena_analyzer/polarity_analyzer_2.py @@ -0,0 +1,119 @@ +#!/usr/bin/python3.10 +# -*-coding:Utf-8 -* + +#============================================================================== +# TENET: Rule to negative polarity phenomena (rule 2) +#------------------------------------------------------------------------------ +# Net Expansion AMR rule to analyse negative polarity phenomena +# Rule: polarity(phenomena, 'negative') => phenomena +#============================================================================== + +import rdflib +from rdflib import Graph + +import transduction +from transduction import net +from transduction.query_builder import generate_select_query +from transduction.naming_computer import define_axiom_naming +from transduction.naming_computer import define_composite_naming_2 + + +#============================================================================== +# Pattern Search: polarity(phenomena, 'negative') +#============================================================================== + +POLARITY_RELATION = 'amr:role_polarity' +PHENOMENA_TYPE_RELATION = 'net:hasPhenomenaType' +POSSIBLE_PHENOMENA_URI = 'amr:phenomena_modality_possible' + +def __search_pattern(graph): + select_data_list = ['?phenomena_net', '?value_net'] + clause_list = [f'?phenomena_net a [rdfs:subClassOf* net:Phenomena_Net].', + f'FILTER NOT EXISTS {{ ?phenomena_net a net:Deprecated_Net. }}', + f'?phenomena_net {PHENOMENA_TYPE_RELATION} {POSSIBLE_PHENOMENA_URI}.', + f'?phenomena_net {POLARITY_RELATION} ?value_net.', + f'FILTER NOT EXISTS {{ ?value_net a net:Deprecated_Net. }}', + ('?value_net', 'net:hasValueLabel', rdflib.term.Literal('negative'))] + query_code = generate_select_query(graph, select_data_list, clause_list) + result_set = graph.query(query_code) + return query_code, result_set + + + +#============================================================================== +# Useful Computation Method(s) +#============================================================================== + +def __filter_relation(relation_list): + result_list = [] + for relation in relation_list: + check = True + (s, p, o) = relation + if s == o: check = False + if p == POLARITY_RELATION: check = False + if check: result_list.append(relation) + return result_list + + +def __propagate_relation(target_net, base_net): + target_net.input_relation_list = base_net.input_relation_list + out_relation_list = __filter_relation(base_net.output_relation_list) + target_net.output_relation_list = out_relation_list + + + +#============================================================================== +# Construct Method(s) +#============================================================================== + +def __construct_phenomena_net(graph, origin_phenomena_net, value_net): + + # -- Net Composition + new_phenomena_net = net.PhenomenaNet(graph) + new_phenomena_net.compose(origin_phenomena_net, value_net) + + # -- Data Computation + new_phenomena_net.phenomena_type = 'amr:phenomena_modality_prohibition' + new_phenomena_net.phenomena_ref = f'not-{origin_phenomena_net.phenomena_ref}' + + # -- Net Naming + new_phenomena_net.naming = 'prohibition-modality' + + # -- Relation Propagation + __propagate_relation(new_phenomena_net, origin_phenomena_net) + + # -- Finalization + new_phenomena_net.finalize() + triple_definition = new_phenomena_net.generate_triple_definition() + + return new_phenomena_net, triple_definition + + + +#============================================================================== +# Main Method +#============================================================================== + +def analyze_phenomena_polarity_2(graph): + + # -- Rule Initialization + rule_label = 'analyze "polarity" phenomena (2)' + rule_triple_list = [] + + # -- Search for patterns + _, pattern_set = __search_pattern(graph) + + # -- Pattern Analysis + for pattern in pattern_set: + origin_phenomena_net = net.PhenomenaNet(graph, uri=pattern.phenomena_net) + value_net = net.ValueNet(graph, uri=pattern.value_net) + + # -- New Negative Property Net + _, triple_list_1 = __construct_phenomena_net(graph, origin_phenomena_net, value_net) + rule_triple_list += triple_list_1 + + # -- Deprecation: Origin Class Net and Value Net + rule_triple_list += origin_phenomena_net.deprecate() + rule_triple_list += value_net.deprecate() + + return rule_label, rule_triple_list \ No newline at end of file diff --git a/tests/dev_owl_rule_tests/phenomena_analyzer/polarity_analyzer_3.py b/tests/dev_owl_rule_tests/phenomena_analyzer/polarity_analyzer_3.py new file mode 100644 index 0000000000000000000000000000000000000000..4ec13bcb58f95a7303e297696de6b38aecda5370 --- /dev/null +++ b/tests/dev_owl_rule_tests/phenomena_analyzer/polarity_analyzer_3.py @@ -0,0 +1,119 @@ +#!/usr/bin/python3.10 +# -*-coding:Utf-8 -* + +#============================================================================== +# TENET: Rule to negative polarity phenomena (rule 3) +#------------------------------------------------------------------------------ +# Net Expansion AMR rule to analyse negative polarity phenomena +# Rule: polarity(phenomena, 'negative') => phenomena +#============================================================================== + +import rdflib +from rdflib import Graph + +import transduction +from transduction import net +from transduction.query_builder import generate_select_query +from transduction.naming_computer import define_axiom_naming +from transduction.naming_computer import define_composite_naming_2 + + +#============================================================================== +# Pattern Search: polarity(phenomena, 'negative') +#============================================================================== + +POLARITY_RELATION = 'amr:role_polarity' +PHENOMENA_TYPE_RELATION = 'net:hasPhenomenaType' +POSSIBLE_PHENOMENA_URI = 'amr:phenomena_modality_prohibition' + +def __search_pattern(graph): + select_data_list = ['?phenomena_net', '?value_net'] + clause_list = [f'?phenomena_net a [rdfs:subClassOf* net:Phenomena_Net].', + f'FILTER NOT EXISTS {{ ?phenomena_net a net:Deprecated_Net. }}', + f'?phenomena_net {PHENOMENA_TYPE_RELATION} {POSSIBLE_PHENOMENA_URI}.', + f'?phenomena_net {POLARITY_RELATION} ?value_net.', + f'FILTER NOT EXISTS {{ ?value_net a net:Deprecated_Net. }}', + ('?value_net', 'net:hasValueLabel', rdflib.term.Literal('negative'))] + query_code = generate_select_query(graph, select_data_list, clause_list) + result_set = graph.query(query_code) + return query_code, result_set + + + +#============================================================================== +# Useful Computation Method(s) +#============================================================================== + +def __filter_relation(relation_list): + result_list = [] + for relation in relation_list: + check = True + (s, p, o) = relation + if s == o: check = False + if p == POLARITY_RELATION: check = False + if check: result_list.append(relation) + return result_list + + +def __propagate_relation(target_net, base_net): + target_net.input_relation_list = base_net.input_relation_list + out_relation_list = __filter_relation(base_net.output_relation_list) + target_net.output_relation_list = out_relation_list + + + +#============================================================================== +# Construct Method(s) +#============================================================================== + +def __construct_phenomena_net(graph, origin_phenomena_net, value_net): + + # -- Net Composition + new_phenomena_net = net.PhenomenaNet(graph) + new_phenomena_net.compose(origin_phenomena_net, value_net) + + # -- Data Computation + new_phenomena_net.phenomena_type = 'amr:phenomena_modality_possible' + new_phenomena_net.phenomena_ref = f'not-{origin_phenomena_net.phenomena_ref}' + + # -- Net Naming + new_phenomena_net.naming = 'possible-modality' + + # -- Relation Propagation + __propagate_relation(new_phenomena_net, origin_phenomena_net) + + # -- Finalization + new_phenomena_net.finalize() + triple_definition = new_phenomena_net.generate_triple_definition() + + return new_phenomena_net, triple_definition + + + +#============================================================================== +# Main Method +#============================================================================== + +def analyze_phenomena_polarity_3(graph): + + # -- Rule Initialization + rule_label = 'analyze "polarity" phenomena (3)' + rule_triple_list = [] + + # -- Search for patterns + _, pattern_set = __search_pattern(graph) + + # -- Pattern Analysis + for pattern in pattern_set: + origin_phenomena_net = net.PhenomenaNet(graph, uri=pattern.phenomena_net) + value_net = net.ValueNet(graph, uri=pattern.value_net) + + # -- New Negative Property Net + _, triple_list_1 = __construct_phenomena_net(graph, origin_phenomena_net, value_net) + rule_triple_list += triple_list_1 + + # -- Deprecation: Origin Class Net and Value Net + rule_triple_list += origin_phenomena_net.deprecate() + rule_triple_list += value_net.deprecate() + + return rule_label, rule_triple_list \ No newline at end of file diff --git a/tests/dev_owl_rule_tests/phenomena_analyzer/polarity_analyzer_4.py b/tests/dev_owl_rule_tests/phenomena_analyzer/polarity_analyzer_4.py new file mode 100644 index 0000000000000000000000000000000000000000..74408944a81b96acb6e7136fceb2d997ab3c2fa5 --- /dev/null +++ b/tests/dev_owl_rule_tests/phenomena_analyzer/polarity_analyzer_4.py @@ -0,0 +1,125 @@ +#!/usr/bin/python3.10 +# -*-coding:Utf-8 -* + +#============================================================================== +# TENET: Rule to negative polarity phenomena (rule 3) +#------------------------------------------------------------------------------ +# Net Expansion AMR rule to analyse negative polarity phenomena +# Rule: polarity(phenomena, 'negative') => phenomena +#============================================================================== + +import rdflib +from rdflib import Graph + +import transduction +from transduction import net +from transduction.query_builder import generate_select_query +from transduction.naming_computer import define_axiom_naming +from transduction.naming_computer import define_composite_naming_2 + + +#============================================================================== +# Pattern Search: polarity(phenomena, 'negative') +#============================================================================== + +POLARITY_RELATION = 'amr:role_polarity' +PHENOMENA_TYPE_RELATION = 'net:hasPhenomenaType' +POSSIBLE_PHENOMENA_URI = 'amr:phenomena_modality_prohibition' + +def __search_pattern(graph): + query_code = '' + result_set = [] + for arg_relation in ['amr:role_ARG1', 'amr:role_ARG2']: + select_data_list = ['?phenomena_net', '?value_net'] + clause_list = [f'?phenomena_net a [rdfs:subClassOf* net:Phenomena_Net].', + f'FILTER NOT EXISTS {{ ?phenomena_net a net:Deprecated_Net. }}', + f'?phenomena_net {PHENOMENA_TYPE_RELATION} {POSSIBLE_PHENOMENA_URI}.', + f'?property_net a [rdfs:subClassOf* net:Atom_Property_Net].', + f'?phenomena_net {arg_relation} ?property_net.', + f'?property_net {POLARITY_RELATION} ?value_net.', + f'FILTER NOT EXISTS {{ ?value_net a net:Deprecated_Net. }}', + ('?value_net', 'net:hasValueLabel', rdflib.term.Literal('negative')) + ] + query_code = generate_select_query(graph, select_data_list, clause_list) + result_set += graph.query(query_code) + return query_code, result_set + + + +#============================================================================== +# Useful Computation Method(s) +#============================================================================== + +def __filter_relation(relation_list): + result_list = [] + for relation in relation_list: + check = True + (s, p, o) = relation + if s == o: check = False + if p == POLARITY_RELATION: check = False + if check: result_list.append(relation) + return result_list + + +def __propagate_relation(target_net, base_net): + target_net.input_relation_list = base_net.input_relation_list + out_relation_list = __filter_relation(base_net.output_relation_list) + target_net.output_relation_list = out_relation_list + + + +#============================================================================== +# Construct Method(s) +#============================================================================== + +def __construct_phenomena_net(graph, origin_phenomena_net, value_net): + + # -- Net Composition + new_phenomena_net = net.PhenomenaNet(graph) + new_phenomena_net.compose(origin_phenomena_net, value_net) + + # -- Data Computation + new_phenomena_net.phenomena_type = 'amr:phenomena_modality_obligation' + new_phenomena_net.phenomena_ref = f'not-{origin_phenomena_net.phenomena_ref}' + + # -- Net Naming + new_phenomena_net.naming = 'obligation-modality' + + # -- Relation Propagation + __propagate_relation(new_phenomena_net, origin_phenomena_net) + + # -- Finalization + new_phenomena_net.finalize() + triple_definition = new_phenomena_net.generate_triple_definition() + + return new_phenomena_net, triple_definition + + + +#============================================================================== +# Main Method +#============================================================================== + +def analyze_phenomena_polarity_4(graph): + + # -- Rule Initialization + rule_label = 'analyze "polarity" phenomena (4)' + rule_triple_list = [] + + # -- Search for patterns + _, pattern_set = __search_pattern(graph) + + # -- Pattern Analysis + for pattern in pattern_set: + origin_phenomena_net = net.PhenomenaNet(graph, uri=pattern.phenomena_net) + value_net = net.ValueNet(graph, uri=pattern.value_net) + + # -- New Negative Property Net + _, triple_list_1 = __construct_phenomena_net(graph, origin_phenomena_net, value_net) + rule_triple_list += triple_list_1 + + # -- Deprecation: Origin Class Net and Value Net + rule_triple_list += origin_phenomena_net.deprecate() + rule_triple_list += value_net.deprecate() + + return rule_label, rule_triple_list \ No newline at end of file diff --git a/tests/dev_owl_rule_tests/phenomena_analyzer/polarity_analyzer_5.py b/tests/dev_owl_rule_tests/phenomena_analyzer/polarity_analyzer_5.py new file mode 100644 index 0000000000000000000000000000000000000000..2a1a04f674358ef62e2aada049211e5e4b220385 --- /dev/null +++ b/tests/dev_owl_rule_tests/phenomena_analyzer/polarity_analyzer_5.py @@ -0,0 +1,125 @@ +#!/usr/bin/python3.10 +# -*-coding:Utf-8 -* + +#============================================================================== +# TENET: Rule to negative polarity phenomena (rule 3) +#------------------------------------------------------------------------------ +# Net Expansion AMR rule to analyse negative polarity phenomena +# Rule: polarity(phenomena, 'negative') => phenomena +#============================================================================== + +import rdflib +from rdflib import Graph + +import transduction +from transduction import net +from transduction.query_builder import generate_select_query +from transduction.naming_computer import define_axiom_naming +from transduction.naming_computer import define_composite_naming_2 + + +#============================================================================== +# Pattern Search: polarity(phenomena, 'negative') +#============================================================================== + +POLARITY_RELATION = 'amr:role_polarity' +PHENOMENA_TYPE_RELATION = 'net:hasPhenomenaType' +POSSIBLE_PHENOMENA_URI = 'amr:phenomena_modality_obligation' + +def __search_pattern(graph): + query_code = '' + result_set = [] + for arg_relation in ['amr:role_ARG1', 'amr:role_ARG2']: + select_data_list = ['?phenomena_net', '?value_net'] + clause_list = [f'?phenomena_net a [rdfs:subClassOf* net:Phenomena_Net].', + f'FILTER NOT EXISTS {{ ?phenomena_net a net:Deprecated_Net. }}', + f'?phenomena_net {PHENOMENA_TYPE_RELATION} {POSSIBLE_PHENOMENA_URI}.', + f'?property_net a [rdfs:subClassOf* net:Atom_Property_Net].', + f'?phenomena_net {arg_relation} ?property_net.', + f'?property_net {POLARITY_RELATION} ?value_net.', + f'FILTER NOT EXISTS {{ ?value_net a net:Deprecated_Net. }}', + ('?value_net', 'net:hasValueLabel', rdflib.term.Literal('negative')) + ] + query_code = generate_select_query(graph, select_data_list, clause_list) + result_set += graph.query(query_code) + return query_code, result_set + + + +#============================================================================== +# Useful Computation Method(s) +#============================================================================== + +def __filter_relation(relation_list): + result_list = [] + for relation in relation_list: + check = True + (s, p, o) = relation + if s == o: check = False + if p == POLARITY_RELATION: check = False + if check: result_list.append(relation) + return result_list + + +def __propagate_relation(target_net, base_net): + target_net.input_relation_list = base_net.input_relation_list + out_relation_list = __filter_relation(base_net.output_relation_list) + target_net.output_relation_list = out_relation_list + + + +#============================================================================== +# Construct Method(s) +#============================================================================== + +def __construct_phenomena_net(graph, origin_phenomena_net, value_net): + + # -- Net Composition + new_phenomena_net = net.PhenomenaNet(graph) + new_phenomena_net.compose(origin_phenomena_net, value_net) + + # -- Data Computation + new_phenomena_net.phenomena_type = 'amr:phenomena_modality_prohibition' + new_phenomena_net.phenomena_ref = f'not-{origin_phenomena_net.phenomena_ref}' + + # -- Net Naming + new_phenomena_net.naming = 'prohibition-modality' + + # -- Relation Propagation + __propagate_relation(new_phenomena_net, origin_phenomena_net) + + # -- Finalization + new_phenomena_net.finalize() + triple_definition = new_phenomena_net.generate_triple_definition() + + return new_phenomena_net, triple_definition + + + +#============================================================================== +# Main Method +#============================================================================== + +def analyze_phenomena_polarity_5(graph): + + # -- Rule Initialization + rule_label = 'analyze "polarity" phenomena (5)' + rule_triple_list = [] + + # -- Search for patterns + _, pattern_set = __search_pattern(graph) + + # -- Pattern Analysis + for pattern in pattern_set: + origin_phenomena_net = net.PhenomenaNet(graph, uri=pattern.phenomena_net) + value_net = net.ValueNet(graph, uri=pattern.value_net) + + # -- New Negative Property Net + _, triple_list_1 = __construct_phenomena_net(graph, origin_phenomena_net, value_net) + rule_triple_list += triple_list_1 + + # -- Deprecation: Origin Class Net and Value Net + rule_triple_list += origin_phenomena_net.deprecate() + rule_triple_list += value_net.deprecate() + + return rule_label, rule_triple_list \ No newline at end of file diff --git a/tests/dev_owl_rule_tests/test_data/entity-classifier-devGraph-1.result.ttl b/tests/dev_owl_rule_tests/test_data/entity-classifier-devGraph-1.result.ttl index ee0610c67ffeaf34ab7a953484147cf5ee74b5ab..40abbc892ea6133ec8c2c09514b1ebcd1da009b9 100644 --- a/tests/dev_owl_rule_tests/test_data/entity-classifier-devGraph-1.result.ttl +++ b/tests/dev_owl_rule_tests/test_data/entity-classifier-devGraph-1.result.ttl @@ -516,6 +516,36 @@ net:compositeClass_object-orbit-hasManner-not-direct-sun_o a net:Composite_Class net:hasRestriction net:restriction_orbit-hasManner-not-direct-sun_o2 ; net:hasStructure "SSC-01-01" . +net:compositeClass_system-hasPart-object_s a net:Composite_Class_Net ; + :role_domain net:atomClass_system_p, + net:individual_SolarSystem_p ; + net:composeFrom net:atomClass_object_o, + net:atomClass_system_s, + net:atomProperty_hasPart_p9 ; + net:coverBaseNode :leaf_system_s ; + net:coverNode :leaf_hasPart_p9, + :leaf_object_o, + :leaf_system_s ; + net:hasMotherClassNet net:atomClass_system_s ; + net:hasNaming "system-hasPart-object" ; + net:hasRestriction net:restriction_hasPart-object_p9 ; + net:hasStructure "SSC-01-01" . + +net:compositeClass_system-hasPart-sun_s a net:Composite_Class_Net ; + :role_domain net:atomClass_system_p, + net:individual_SolarSystem_p ; + net:composeFrom net:atomClass_sun_s2, + net:atomClass_system_s, + net:atomProperty_hasPart_p9 ; + net:coverBaseNode :leaf_system_s ; + net:coverNode :leaf_hasPart_p9, + :leaf_sun_s2, + :leaf_system_s ; + net:hasMotherClassNet net:atomClass_system_s ; + net:hasNaming "system-hasPart-sun" ; + net:hasRestriction net:restriction_hasPart-sun_p9 ; + net:hasStructure "SSC-01-01" . + net:entityClass a owl:AnnotationProperty ; rdfs:label "entity class" ; rdfs:subPropertyOf net:objectValue . @@ -794,9 +824,6 @@ ns2:AMR a owl:Class ; sys:Degree a owl:Class ; rdfs:subClassOf sys:Out_Structure . -sys:Entity a owl:Class ; - rdfs:subClassOf sys:Out_Structure . - sys:Feature a owl:Class ; rdfs:subClassOf sys:Out_Structure . @@ -809,6 +836,7 @@ net:Individual_Net a owl:Class ; rdfs:subClassOf net:Net . net:atomClass_orbit_o2 a net:Atom_Class_Net, + net:Class_Net, net:Deprecated_Net ; :role_ARG0 net:atomClass_object_o ; :role_ARG1 net:atomClass_sun_s2 ; @@ -816,39 +844,10 @@ net:atomClass_orbit_o2 a net:Atom_Class_Net, net:coverBaseNode :leaf_orbit-01_o2 ; net:coverNode :leaf_orbit-01_o2 ; net:hasClassName "orbit" ; + net:hasClassType sys:Entity ; net:hasNaming "orbit" ; net:hasStructure "SSC-01-01" . -net:compositeClass_system-hasPart-object_s a net:Composite_Class_Net ; - :role_domain net:atomClass_system_p, - net:individual_SolarSystem_p ; - net:composeFrom net:atomClass_object_o, - net:atomClass_system_s, - net:atomProperty_hasPart_p9 ; - net:coverBaseNode :leaf_system_s ; - net:coverNode :leaf_hasPart_p9, - :leaf_object_o, - :leaf_system_s ; - net:hasMotherClassNet net:atomClass_system_s ; - net:hasNaming "system-hasPart-object" ; - net:hasRestriction net:restriction_hasPart-object_p9 ; - net:hasStructure "SSC-01-01" . - -net:compositeClass_system-hasPart-sun_s a net:Composite_Class_Net ; - :role_domain net:atomClass_system_p, - net:individual_SolarSystem_p ; - net:composeFrom net:atomClass_sun_s2, - net:atomClass_system_s, - net:atomProperty_hasPart_p9 ; - net:coverBaseNode :leaf_system_s ; - net:coverNode :leaf_hasPart_p9, - :leaf_sun_s2, - :leaf_system_s ; - net:hasMotherClassNet net:atomClass_system_s ; - net:hasNaming "system-hasPart-sun" ; - net:hasRestriction net:restriction_hasPart-sun_p9 ; - net:hasStructure "SSC-01-01" . - net:has_value a owl:AnnotationProperty ; rdfs:subPropertyOf net:netProperty . @@ -1078,9 +1077,6 @@ ns2:or a ns2:Concept ; sys:Out_ObjectProperty a owl:ObjectProperty . -net:Class_Net a owl:Class ; - rdfs:subClassOf net:Net . - net:Phenomena_Net a owl:Class ; rdfs:subClassOf net:Net . @@ -1164,10 +1160,12 @@ net:Net_Structure a owl:Class ; rdfs:comment "A semantic net captures a set of nodes, and associates this set with type(s) and value(s)." . net:atomClass_gravitation_g a net:Atom_Class_Net, + net:Class_Net, net:Deprecated_Net ; net:coverBaseNode :leaf_gravitation_g ; net:coverNode :leaf_gravitation_g ; net:hasClassName "gravitation" ; + net:hasClassType sys:Entity ; net:hasNaming "gravitation" ; net:hasStructure "SSC-01-01" . @@ -1230,10 +1228,7 @@ net:individual_SolarSystem_p a net:Individual_Net ; net:coverBaseNode :leaf_system_p ; net:coverNode :leaf_system_p ; net:hasIndividualLabel "Solar System" ; - net:hasMotherClassNet net:atomClass_system_p, - net:atomClass_system_s, - net:compositeClass_system-hasPart-object_s, - net:compositeClass_system-hasPart-sun_s ; + net:hasMotherClassNet net:atomClass_system_p ; net:hasNaming "SolarSystem" ; net:hasStructure "SSC-01-01" . @@ -1333,6 +1328,9 @@ net:netProperty a owl:AnnotationProperty ; :hasConcept :concept_gravitation ; :hasVariable :variable_g . +sys:Entity a owl:Class ; + rdfs:subClassOf sys:Out_Structure . + cprm:configParamProperty a rdf:Property ; rdfs:label "Config Parameter Property" . @@ -1403,6 +1401,9 @@ rdf:Property a owl:Class . :hasConcept :concept_direct-02 ; :hasVariable :variable_d . +net:Class_Net a owl:Class ; + rdfs:subClassOf net:Net . + net:Deprecated_Net a owl:Class ; rdfs:subClassOf net:Net . @@ -1438,6 +1439,18 @@ net:has_object a owl:AnnotationProperty ; net:Net a owl:Class ; rdfs:subClassOf net:Net_Structure . +net:atomClass_system_s a net:Atom_Class_Net, + net:Class_Net, + net:Deprecated_Net ; + :role_domain net:atomClass_system_p, + net:individual_SolarSystem_p ; + net:coverBaseNode :leaf_system_s ; + net:coverNode :leaf_system_s ; + net:hasClassName "system" ; + net:hasClassType sys:Entity ; + net:hasNaming "system" ; + net:hasStructure "SSC-01-01" . + net:atomProperty_direct_d2 a net:Atom_Property_Net, net:Deprecated_Net ; :role_polarity net:value_negative_blankNode ; @@ -1458,16 +1471,6 @@ net:atomProperty_direct_d2 a net:Atom_Property_Net, :AMR_Core_Role a owl:Class ; rdfs:subClassOf :AMR_Role . -net:atomClass_system_s a net:Atom_Class_Net, - net:Deprecated_Net ; - :role_domain net:atomClass_system_p, - net:individual_SolarSystem_p ; - net:coverBaseNode :leaf_system_s ; - net:coverNode :leaf_system_s ; - net:hasClassName "system" ; - net:hasNaming "system" ; - net:hasStructure "SSC-01-01" . - :leaf_object_o a :AMR_Leaf ; :hasConcept :concept_object ; :hasVariable :variable_o . @@ -1492,20 +1495,24 @@ net:atomClass_system_s a net:Atom_Class_Net, :hasVariable :variable_s . net:atomClass_object_o a net:Atom_Class_Net, + net:Class_Net, net:Deprecated_Net ; net:coverBaseNode :leaf_object_o ; net:coverNode :leaf_object_o ; net:hasClassName "object" ; + net:hasClassType sys:Entity ; net:hasNaming "object" ; net:hasStructure "SSC-01-01" . :AMR_Leaf a owl:Class ; rdfs:subClassOf :AMR_Structure . -net:atomClass_sun_s2 a net:Atom_Class_Net ; +net:atomClass_sun_s2 a net:Atom_Class_Net, + net:Class_Net ; net:coverBaseNode :leaf_sun_s2 ; net:coverNode :leaf_sun_s2 ; net:hasClassName "sun" ; + net:hasClassType sys:Entity ; net:hasNaming "sun" ; net:hasStructure "SSC-01-01" . diff --git a/tests/dev_owl_rule_tests/test_rule_atomic_extractor.py b/tests/dev_owl_rule_tests/test_rule_extractor_atom_net.py similarity index 81% rename from tests/dev_owl_rule_tests/test_rule_atomic_extractor.py rename to tests/dev_owl_rule_tests/test_rule_extractor_atom_net.py index 059faa4045aea371c761c66137010b8696fcfb29..0783d70bad5e424a67a78c26dea163f153774b53 100644 --- a/tests/dev_owl_rule_tests/test_rule_atomic_extractor.py +++ b/tests/dev_owl_rule_tests/test_rule_extractor_atom_net.py @@ -21,16 +21,17 @@ TEST_FILE_NAME_2 = 'atom-extraction-devGraph-2' TEST_FILE_NAME_3 = 'atom-extraction-devGraph-3' from context import tenet +from tenet.scheme.amr_master_rule.transduction.extractor import atom_class_extractor as test_rule_1 +from tenet.scheme.amr_master_rule.transduction.extractor import atom_individual_extractor as test_rule_2 +from tenet.scheme.amr_master_rule.transduction.extractor import atom_property_extractor as test_rule_3 +from tenet.scheme.amr_master_rule.transduction.extractor import atom_value_extractor as test_rule_4 +from tenet.scheme.amr_master_rule.transduction.extractor import atom_phenomena_extractor as test_rule_5 +from tenet.scheme.amr_master_rule.transduction.extractor import atom_relation_propagator as test_rule_6 +from tenet.scheme import amr_master_rule + 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_master_rule.transduction import atom_class_extractor as rule_1 -from tenet.scheme.amr_master_rule.transduction import atom_individual_extractor as rule_2 -from tenet.scheme.amr_master_rule.transduction import atom_property_extractor as rule_3 -from tenet.scheme.amr_master_rule.transduction import atom_value_extractor as rule_4 -from tenet.scheme.amr_master_rule.transduction import atom_phenomena_extractor as rule_5 -from tenet.scheme.amr_master_rule.transduction import atom_relation_propagator as rule_6 -from tenet.scheme import amr_master_rule @@ -88,7 +89,7 @@ def add_triples_in_graph(test_file_name, graph, triple_list): #============================================================================== def test_search_pattern_1(graph): - _, pattern_set = rule_1.__search_pattern(graph) + _, pattern_set = test_rule_1.__search_pattern(graph) print(f'\n ----- number of selection found: {len(pattern_set)}') for row in pattern_set: result_str = f'>>> ' @@ -99,7 +100,7 @@ def test_search_pattern_1(graph): def test_search_pattern_2(graph): - _, pattern_set = rule_2.__search_pattern(graph) + _, pattern_set = test_rule_2.__search_pattern(graph) print(f'\n ----- number of selection found: {len(pattern_set)}') for row in pattern_set: result_str = f'>>> ' @@ -111,7 +112,7 @@ def test_search_pattern_2(graph): def test_search_pattern_3(graph): - _, pattern_set = rule_3.__search_pattern(graph) + _, pattern_set = test_rule_3.__search_pattern(graph) print(f'\n ----- number of selection found: {len(pattern_set)}') for row in pattern_set: result_str = f'>>> ' @@ -122,7 +123,7 @@ def test_search_pattern_3(graph): def test_search_pattern_4(graph): - _, pattern_set = rule_4.__search_pattern(graph) + _, pattern_set = test_rule_4.__search_pattern(graph) print(f'\n ----- number of selection found: {len(pattern_set)}') for row in pattern_set: result_str = f'>>> ' @@ -132,7 +133,7 @@ def test_search_pattern_4(graph): def test_search_pattern_5(graph): - _, pattern_set = rule_5.__search_pattern(graph) + _, pattern_set = test_rule_5.__search_pattern(graph) print(f'\n ----- number of selection found: {len(pattern_set)}') for row in pattern_set: result_str = f'>>> ' @@ -145,7 +146,7 @@ def test_search_pattern_5(graph): def test_search_pattern_6(graph): - _, pattern_set = rule_6.__search_pattern(graph) + _, pattern_set = test_rule_6.__search_pattern(graph) print(f'\n ----- search 1 result: {len(pattern_set)}') for row in pattern_set: result_str = f'>>> ' @@ -159,7 +160,7 @@ def test_search_pattern_6(graph): if len(target_net.base_node) > 0: base_leaf = target_net.base_node[0] - _, result_set = rule_6.__search_leaf_in_leaf_relation(graph, base_leaf) + _, result_set = test_rule_6.__search_leaf_in_leaf_relation(graph, base_leaf) print(f'\n ----- search 2 result: {len(result_set)}') for row in result_set: result_str = f'>>> ' @@ -167,7 +168,7 @@ def test_search_pattern_6(graph): result_str += f', {row.inRelationRole.n3(graph.namespace_manager)} )' print(result_str) - _, result_set = rule_6.__search_leaf_in_value_relation(graph, base_leaf) + _, result_set = test_rule_6.__search_leaf_in_value_relation(graph, base_leaf) print(f'\n ----- search 3 result: {len(result_set)}') for row in result_set: result_str = f'>>> ' @@ -175,7 +176,7 @@ def test_search_pattern_6(graph): result_str += f', {row.inRelationRole.n3(graph.namespace_manager)} )' print(result_str) - _, result_set = rule_6.__search_leaf_out_leaf_relation(graph, base_leaf) + _, result_set = test_rule_6.__search_leaf_out_leaf_relation(graph, base_leaf) print(f'\n ----- search 4 result: {len(result_set)}') for row in result_set: result_str = f'>>> ' @@ -183,7 +184,7 @@ def test_search_pattern_6(graph): result_str += f', {row.outNet.n3(graph.namespace_manager)} )' print(result_str) - _, result_set = rule_6.__search_leaf_out_value_relation(graph, base_leaf) + _, result_set = test_rule_6.__search_leaf_out_value_relation(graph, base_leaf) print(f'\n ----- search 5 result: {len(result_set)}') for row in result_set: result_str = f'>>> ' @@ -195,7 +196,7 @@ def test_search_pattern_6(graph): def test_search_structure(graph): - result_set = rule_3.__search_structure(graph) + result_set = test_rule_3.__search_structure(graph) print(f'\n ----- number of selection found: {len(result_set)}') for row in result_set: result_str = f'>>> ' @@ -239,7 +240,7 @@ if __name__ == '__main__': print('\n \n') print('\n *** Unit Test ***') - test_rule_application(TEST_FILE_NAME_1, graph_1, rule_1.extract_atom_class) + test_rule_application(TEST_FILE_NAME_1, graph_1, test_rule_1.extract_atom_class) print('\n \n') print('\n ///////////////////// Extraction Rule 2') @@ -250,7 +251,7 @@ if __name__ == '__main__': print('\n \n') print('\n *** Unit Test ***') - test_rule_application(TEST_FILE_NAME_1, graph_1, rule_2.extract_atom_individual) + test_rule_application(TEST_FILE_NAME_1, graph_1, test_rule_2.extract_atom_individual) print('\n \n') print('\n ///////////////////// Extraction Rule 3') @@ -261,7 +262,7 @@ if __name__ == '__main__': print('\n \n') print('\n *** Unit Test ***') - test_rule_application(TEST_FILE_NAME_1, graph_1, rule_3.extract_atom_property) + test_rule_application(TEST_FILE_NAME_1, graph_1, test_rule_3.extract_atom_property) print('\n \n') print('\n ///////////////////// Extraction Rule 4') @@ -272,7 +273,7 @@ if __name__ == '__main__': print('\n \n') print('\n *** Unit Test ***') - test_rule_application(TEST_FILE_NAME_1, graph_1, rule_4.extract_atom_value) + test_rule_application(TEST_FILE_NAME_1, graph_1, test_rule_4.extract_atom_value) print('\n \n') print('\n ///////////////////// Extraction Rule 5') @@ -283,7 +284,7 @@ if __name__ == '__main__': print('\n \n') print('\n *** Unit Test ***') - test_rule_application(TEST_FILE_NAME_1, graph_1, rule_5.extract_atom_phenomena) + test_rule_application(TEST_FILE_NAME_1, graph_1, test_rule_5.extract_atom_phenomena) print('\n \n') print('\n ///////////////////// Extraction Rule 6') @@ -294,16 +295,16 @@ if __name__ == '__main__': print('\n \n') print('\n *** Unit Test ***') - test_rule_application(TEST_FILE_NAME_3, graph_3, rule_6.propagate_atom_relation) + test_rule_application(TEST_FILE_NAME_3, graph_3, test_rule_6.propagate_atom_relation) print('\n \n') print('\n \n') print('\n ///////////////////// Additional Tests') print('\n *** Unit Test ***') - # test_rule_application(graph_1, rule_1.extract_atom_class) - # test_rule_application(graph_1, rule_3.extract_atom_property) - test_rule_application(TEST_FILE_NAME_1, graph_1, rule_6.propagate_atom_relation) - test_rule_application(TEST_FILE_NAME_2, graph_2, rule_6.propagate_atom_relation) + # test_rule_application(graph_1, test_rule_1.extract_atom_class) + # test_rule_application(graph_1, test_rule_3.extract_atom_property) + test_rule_application(TEST_FILE_NAME_1, graph_1, test_rule_6.propagate_atom_relation) + test_rule_application(TEST_FILE_NAME_2, graph_2, test_rule_6.propagate_atom_relation) print('\n \n') print('\n *** - ***') \ No newline at end of file diff --git a/tests/dev_owl_rule_tests/test_rule_composite_class_extractor.py b/tests/dev_owl_rule_tests/test_rule_extractor_composite_net.py similarity index 96% rename from tests/dev_owl_rule_tests/test_rule_composite_class_extractor.py rename to tests/dev_owl_rule_tests/test_rule_extractor_composite_net.py index b2e65837209ca2bfd8d0d43ef5c6c54fbc8c9735..2166b65d99f744ef84c38d0f6f6c75fe68131acb 100644 --- a/tests/dev_owl_rule_tests/test_rule_composite_class_extractor.py +++ b/tests/dev_owl_rule_tests/test_rule_extractor_composite_net.py @@ -23,8 +23,8 @@ 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_master_rule.transduction import composite_class_extractor_1 as rule_1 -from tenet.scheme.amr_master_rule.transduction import composite_class_extractor_2 as rule_2 +from tenet.scheme.amr_master_rule.transduction.extractor import composite_class_extractor_1 as rule_1 +from tenet.scheme.amr_master_rule.transduction.extractor import composite_class_extractor_2 as rule_2 from tenet.scheme import amr_master_rule as amr_rule diff --git a/tests/dev_owl_rule_tests/test_rule_owl_class_generator.py b/tests/dev_owl_rule_tests/test_rule_owl_generator_class.py similarity index 100% rename from tests/dev_owl_rule_tests/test_rule_owl_class_generator.py rename to tests/dev_owl_rule_tests/test_rule_owl_generator_class.py diff --git a/tests/dev_owl_rule_tests/test_rule_owl_property_generator.py b/tests/dev_owl_rule_tests/test_rule_owl_generator_property.py similarity index 100% rename from tests/dev_owl_rule_tests/test_rule_owl_property_generator.py rename to tests/dev_owl_rule_tests/test_rule_owl_generator_property.py diff --git a/tests/dev_owl_rule_tests/test_rule_phenomena_and_analyzer.py b/tests/dev_owl_rule_tests/test_rule_phenomena_analyzer_and.py similarity index 97% rename from tests/dev_owl_rule_tests/test_rule_phenomena_and_analyzer.py rename to tests/dev_owl_rule_tests/test_rule_phenomena_analyzer_and.py index 882003ee5796b108a9d79797c48f7fe8b7719e06..2e4376d17ea011ccc0e1fca5d5d5f0ad5ebb0fda 100644 --- a/tests/dev_owl_rule_tests/test_rule_phenomena_and_analyzer.py +++ b/tests/dev_owl_rule_tests/test_rule_phenomena_analyzer_and.py @@ -20,17 +20,14 @@ TEST_FILE_NAME_1 = 'and-devGraph-1' TEST_FILE_NAME_2 = 'and-devGraph-2' from context import tenet -from tenet.scheme.amr_master_rule.transduction import phenomena_and_analyzer_1 as rule_1 -from tenet.scheme.amr_master_rule.transduction import phenomena_and_analyzer_2 as rule_2 +from tenet.scheme.amr_master_rule.transduction.phenomena_analyzer import and_analyzer_1 as rule_1 +from tenet.scheme.amr_master_rule.transduction.phenomena_analyzer import and_analyzer_2 as rule_2 from tenet.scheme import amr_master_rule as rule from tenet.transduction.rdfterm_computer import __update_uri_with_prefix from tenet.transduction import query_builder from tenet.transduction import prefix_handle -INDENT_STR = ' ' - - #============================================================================== # Useful Methods diff --git a/tests/dev_owl_rule_tests/test_rule_phenomena_mod_analyzer.py b/tests/dev_owl_rule_tests/test_rule_phenomena_analyzer_mod.py similarity index 97% rename from tests/dev_owl_rule_tests/test_rule_phenomena_mod_analyzer.py rename to tests/dev_owl_rule_tests/test_rule_phenomena_analyzer_mod.py index f368176f9f2c699f4fa81af82638341e9467955a..9d710f7a5a4d0fd8ac0685e4e29169e05513aa49 100644 --- a/tests/dev_owl_rule_tests/test_rule_phenomena_mod_analyzer.py +++ b/tests/dev_owl_rule_tests/test_rule_phenomena_analyzer_mod.py @@ -20,11 +20,12 @@ TEST_FILE_NAME_1 = 'mod-analyzer-devGraph-1' TEST_FILE_NAME_2 = 'mod-analyzer-devGraph-2' from context import tenet +from tenet.scheme.amr_master_rule.transduction.phenomena_analyzer import mod_analyzer_1 as rule_1 +from tenet.scheme import amr_master_rule as amr_rule + 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_master_rule.transduction import phenomena_mod_analyzer_1 as rule_1 -from tenet.scheme import amr_master_rule as amr_rule diff --git a/tests/dev_owl_rule_tests/test_rule_phenomena_or_analyzer.py b/tests/dev_owl_rule_tests/test_rule_phenomena_analyzer_or.py similarity index 97% rename from tests/dev_owl_rule_tests/test_rule_phenomena_or_analyzer.py rename to tests/dev_owl_rule_tests/test_rule_phenomena_analyzer_or.py index 22b540903ef5cc0db079bb232c0996f204dd2d38..db467c34f73c8311b99a6abbfb2ba4b6612e09df 100644 --- a/tests/dev_owl_rule_tests/test_rule_phenomena_or_analyzer.py +++ b/tests/dev_owl_rule_tests/test_rule_phenomena_analyzer_or.py @@ -20,8 +20,8 @@ OUTPUT_GRAPH_PATH = f'{OUTPUT_DIR_PATH}devGraph1.result.ttl' OUTPUT_GRAPH_URI = f'https://amr.tetras-libre.fr/rdf/devGraph1/result' from context import tenet -from tenet.scheme.amr_master_rule.transduction import phenomena_or_analyzer_1 as rule_1 -from tenet.scheme.amr_master_rule.transduction import phenomena_or_analyzer_2 as rule_2 +from tenet.scheme.amr_master_rule.transduction.phenomena_analyzer import or_analyzer_1 as rule_1 +from tenet.scheme.amr_master_rule.transduction.phenomena_analyzer import or_analyzer_2 as rule_2 from tenet.scheme import amr_master_rule as rule from tenet.transduction.rdfterm_computer import __update_uri_with_prefix diff --git a/tests/main_tests/test_owl_output/SolarSystemDev01-20230531/technical-data/tenet.log b/tests/main_tests/test_owl_output/SolarSystemDev01-20230531/technical-data/tenet.log index 0bf58845fd124561f04091ae6b760542fc05ba49..9f7c16b303a4dc62f8ae1276965df47a410b0ce9 100644 --- a/tests/main_tests/test_owl_output/SolarSystemDev01-20230531/technical-data/tenet.log +++ b/tests/main_tests/test_owl_output/SolarSystemDev01-20230531/technical-data/tenet.log @@ -71,25 +71,25 @@ - DEBUG - ----- Total rule number: 87 - INFO - -- Applying extraction step: preprocessing - INFO - --- *** November Transduction *** Sequence: amrld-correcting-sequence -- INFO - ----- fix-amr-bug-about-system-solar-planet: 5/5 new triples (603, 0:00:00.038465) +- INFO - ----- fix-amr-bug-about-system-solar-planet: 5/5 new triples (603, 0:00:00.039640) - INFO - --- *** November Transduction *** Sequence: amr-reification-sequence -- INFO - ----- reclassify-concept-1: 10/10 new triples (613, 0:00:00.282426) -- DEBUG - ----- reclassify-concept-2: 0/0 new triple (613, 0:00:00.066092) -- INFO - ----- reclassify-concept-3: 12/12 new triples (625, 0:00:00.055373) -- INFO - ----- reclassify-concept-4: 16/16 new triples (641, 0:00:00.077507) -- INFO - ----- reclassify-concept-5: 2/4 new triples (643, 0:00:00.049211) -- INFO - ----- reify-roles-as-concept: 10/10 new triples (653, 0:00:00.048264) -- INFO - ----- reclassify-existing-variable: 45/45 new triples (698, 0:00:00.029960) -- INFO - ----- add-new-variable-for-reified-concept: 8/8 new triples (706, 0:00:00.063811) -- INFO - ----- add-amr-leaf-for-reclassified-concept: 33/33 new triples (739, 0:00:00.053221) -- INFO - ----- add-amr-leaf-for-reified-concept: 8/8 new triples (747, 0:00:00.046700) -- INFO - ----- add-amr-edge-for-core-relation: 27/27 new triples (774, 0:00:00.121552) -- INFO - ----- add-amr-edge-for-reified-concept: 12/12 new triples (786, 0:00:00.147536) -- INFO - ----- add-amr-edge-for-name-relation: 5/5 new triples (791, 0:00:00.073139) -- DEBUG - ----- add-value-for-quant-relation: 0/0 new triple (791, 0:00:00.081215) -- INFO - ----- add-amr-edge-for-polarity-relation: 5/5 new triples (796, 0:00:00.080029) -- INFO - ----- update-amr-edge-role-1: 15/15 new triples (811, 0:00:00.094489) -- INFO - ----- add-amr-root: 5/5 new triples (816, 0:00:00.026923) +- INFO - ----- reclassify-concept-1: 10/10 new triples (613, 0:00:00.192898) +- DEBUG - ----- reclassify-concept-2: 0/0 new triple (613, 0:00:00.067928) +- INFO - ----- reclassify-concept-3: 12/12 new triples (625, 0:00:00.056336) +- INFO - ----- reclassify-concept-4: 16/16 new triples (641, 0:00:00.069512) +- INFO - ----- reclassify-concept-5: 2/4 new triples (643, 0:00:00.048901) +- INFO - ----- reify-roles-as-concept: 10/10 new triples (653, 0:00:00.055242) +- INFO - ----- reclassify-existing-variable: 45/45 new triples (698, 0:00:00.037881) +- INFO - ----- add-new-variable-for-reified-concept: 8/8 new triples (706, 0:00:00.054377) +- INFO - ----- add-amr-leaf-for-reclassified-concept: 33/33 new triples (739, 0:00:00.074481) +- INFO - ----- add-amr-leaf-for-reified-concept: 8/8 new triples (747, 0:00:00.048664) +- INFO - ----- add-amr-edge-for-core-relation: 27/27 new triples (774, 0:00:00.119393) +- INFO - ----- add-amr-edge-for-reified-concept: 12/12 new triples (786, 0:00:00.150665) +- INFO - ----- add-amr-edge-for-name-relation: 5/5 new triples (791, 0:00:00.074775) +- DEBUG - ----- add-value-for-quant-relation: 0/0 new triple (791, 0:00:00.078568) +- INFO - ----- add-amr-edge-for-polarity-relation: 5/5 new triples (796, 0:00:00.079529) +- INFO - ----- update-amr-edge-role-1: 15/15 new triples (811, 0:00:00.183285) +- INFO - ----- add-amr-root: 5/5 new triples (816, 0:00:00.027759) - DEBUG - --- Serializing graph to tenet.tetras-libre.fr_demo_01_preprocessing - DEBUG - ----- step: preprocessing - DEBUG - ----- id: https://tenet.tetras-libre.fr/demo/01/ @@ -98,38 +98,38 @@ - INFO - ----- 218 triples extracted during preprocessing step - INFO - -- Applying extraction step: transduction - INFO - --- *** February Transduction *** Sequence: atomic extraction sequence -- INFO - ----- extract atom classes: 30/30 new triples (846, 0:00:00.158094) -- INFO - ----- extract atom individuals: 8/8 new triples (854, 0:00:00.047297) -- INFO - ----- extract atomic properties: 75/75 new triples (929, 0:00:00.272437) -- INFO - ----- extract atom values: 10/10 new triples (939, 0:00:00.064467) -- INFO - ----- extract atom phenomena: 14/14 new triples (953, 0:00:00.074700) -- INFO - ----- propagate atom relations: 24/68 new triples (977, 0:00:01.083079) +- INFO - ----- extract atom classes: 30/30 new triples (846, 0:00:00.153952) +- INFO - ----- extract atom individuals: 8/8 new triples (854, 0:00:00.051652) +- INFO - ----- extract atomic properties: 75/75 new triples (929, 0:00:00.223038) +- INFO - ----- extract atom values: 10/10 new triples (939, 0:00:00.056399) +- INFO - ----- extract atom phenomena: 14/14 new triples (953, 0:00:00.068081) +- INFO - ----- propagate atom relations: 24/68 new triples (977, 0:00:01.050067) - INFO - --- *** February Transduction *** Sequence: classification sequence (1) -- DEBUG - ----- classify modality phenomena: 0/0 new triple (977, 0:00:00.024375) -- INFO - ----- reclassify argument property to class: 11/14 new triples (988, 0:00:00.080458) +- DEBUG - ----- classify modality phenomena: 0/0 new triple (977, 0:00:00.022399) +- INFO - ----- reclassify argument property to class: 11/14 new triples (988, 0:00:00.073223) - INFO - --- *** February Transduction *** Sequence: phenomena analyze sequence (1) -- INFO - ----- analyze "polarity" phenomena (1): 32/36 new triples (1020, 0:00:00.103165) -- DEBUG - ----- analyze "polarity" phenomena (2): 0/0 new triple (1020, 0:00:00.018240) -- DEBUG - ----- analyze "polarity" phenomena (3): 0/0 new triple (1020, 0:00:00.017097) -- DEBUG - ----- analyze "polarity" phenomena (4): 0/0 new triple (1020, 0:00:00.035740) -- DEBUG - ----- analyze "polarity" phenomena (5): 0/0 new triple (1020, 0:00:00.033599) -- DEBUG - ----- analyze modifier phenomena (mod): 0/0 new triple (1020, 0:00:00.078896) -- DEBUG - ----- classify modality phenomena: 0/0 new triple (1020, 0:00:00.017780) +- INFO - ----- analyze "polarity" phenomena (1): 32/36 new triples (1020, 0:00:00.113775) +- DEBUG - ----- analyze "polarity" phenomena (2): 0/0 new triple (1020, 0:00:00.016841) +- DEBUG - ----- analyze "polarity" phenomena (3): 0/0 new triple (1020, 0:00:00.013444) +- DEBUG - ----- analyze "polarity" phenomena (4): 0/0 new triple (1020, 0:00:00.031810) +- DEBUG - ----- analyze "polarity" phenomena (5): 0/0 new triple (1020, 0:00:00.033551) +- DEBUG - ----- analyze modifier phenomena (mod): 0/0 new triple (1020, 0:00:00.009921) +- DEBUG - ----- classify modality phenomena: 0/0 new triple (1020, 0:00:00.018679) - INFO - --- *** February Transduction *** Sequence: phenomena analyze sequence (2) -- INFO - ----- analyze "or" phenomena (1): 1/1 new triple (1021, 0:00:00.094118) -- INFO - ----- analyze "or" phenomena (2): 55/82 new triples (1076, 0:00:00.314064) -- INFO - ----- analyze "and" phenomena (1): 2/14 new triples (1078, 0:00:00.133441) -- DEBUG - ----- analyze "and" phenomena (2): 0/0 new triple (1078, 0:00:00.010072) +- INFO - ----- analyze "or" phenomena (1): 1/1 new triple (1021, 0:00:00.080789) +- INFO - ----- analyze "or" phenomena (2): 55/82 new triples (1076, 0:00:00.267649) +- INFO - ----- analyze "and" phenomena (1): 2/14 new triples (1078, 0:00:00.149071) +- DEBUG - ----- analyze "and" phenomena (2): 0/0 new triple (1078, 0:00:00.012343) - INFO - --- *** February Transduction *** Sequence: composite class extraction sequence -- INFO - ----- extract composite classes (1): 127/138 new triples (1205, 0:00:00.537571) -- DEBUG - ----- extract composite classes (2): 0/0 new triple (1205, 0:00:00.028224) +- INFO - ----- extract composite classes (1): 127/138 new triples (1205, 0:00:00.529373) +- DEBUG - ----- extract composite classes (2): 0/0 new triple (1205, 0:00:00.025257) - INFO - --- *** February Transduction *** Sequence: classification sequence (2) -- INFO - ----- classify class net as entity from core arguments: 10/181 new triples (1215, 0:00:00.307893) -- DEBUG - ----- classify class net as entity from :part relation: 0/0 new triple (1215, 0:00:00.009309) -- DEBUG - ----- classify class net as entity from degree arguments: 0/0 new triple (1215, 0:00:00.019820) -- INFO - ----- Associate mother to class net from :domain relation: 5/34 new triples (1220, 0:00:00.087336) -- DEBUG - ----- Propagate individuals to net with same base node: 0/10 new triple (1220, 0:00:00.030522) -- INFO - ----- Propagate individuals to net with domain link: 3/60 new triples (1223, 0:00:00.182877) +- INFO - ----- classify class net as entity from core arguments: 10/181 new triples (1215, 0:00:00.285318) +- DEBUG - ----- classify class net as entity from :part relation: 0/0 new triple (1215, 0:00:00.032858) +- DEBUG - ----- classify class net as entity from degree arguments: 0/0 new triple (1215, 0:00:00.014241) +- INFO - ----- Associate mother to class net from :domain relation: 5/34 new triples (1220, 0:00:00.081235) +- DEBUG - ----- Propagate individuals to net with same base node: 0/10 new triple (1220, 0:00:00.023326) +- INFO - ----- Propagate individuals to net with domain link: 3/60 new triples (1223, 0:00:00.108165) - DEBUG - --- Serializing graph to tenet.tetras-libre.fr_demo_01_transduction - DEBUG - ----- step: transduction - DEBUG - ----- id: https://tenet.tetras-libre.fr/demo/01/ @@ -138,23 +138,23 @@ - INFO - ----- 407 triples extracted during transduction step - INFO - -- Applying extraction step: generation - INFO - --- *** February Transduction *** Sequence: class_generation_sequence -- INFO - ----- generate OWL class: 32/35 new triples (1255, 0:00:00.410772) +- INFO - ----- generate OWL class: 32/35 new triples (1255, 0:00:00.523008) - INFO - --- *** February Transduction *** Sequence: property_generation_sequence -- INFO - ----- generate OWL property: 29/29 new triples (1284, 0:00:00.312209) +- INFO - ----- generate OWL property: 29/29 new triples (1284, 0:00:00.379346) - INFO - --- *** November Transduction *** Sequence: main-generation-sequence -- DEBUG - ----- generate-individual: 0/0 new triple (1284, 0:00:00.010674) -- DEBUG - ----- classify-individual-1: 0/0 new triple (1284, 0:00:00.007916) -- DEBUG - ----- classify-individual-2: 0/0 new triple (1284, 0:00:00.009813) -- DEBUG - ----- generate-atom-property-1: 0/0 new triple (1284, 0:00:00.009952) -- DEBUG - ----- generate-atom-property-12: 0/0 new triple (1284, 0:00:00.014522) -- DEBUG - ----- generate-inverse-relation: 0/0 new triple (1284, 0:00:00.008621) -- DEBUG - ----- generate-composite-class: 0/0 new triple (1284, 0:00:00.014036) -- DEBUG - ----- add-restriction-to-class-1: 0/0 new triple (1284, 0:00:00.025526) -- DEBUG - ----- add-restriction-to-class-2: 0/0 new triple (1284, 0:00:00.017040) -- DEBUG - ----- add-restriction-to-class-3: 0/0 new triple (1284, 0:00:00.015579) -- DEBUG - ----- add-restriction-to-class-4: 0/0 new triple (1284, 0:00:00.013332) -- DEBUG - ----- add-restriction-to-class-5: 0/0 new triple (1284, 0:00:00.018855) -- DEBUG - ----- add-restriction-to-class-6: 0/0 new triple (1284, 0:00:00.015815) +- DEBUG - ----- generate-individual: 0/0 new triple (1284, 0:00:00.015632) +- DEBUG - ----- classify-individual-1: 0/0 new triple (1284, 0:00:00.010806) +- DEBUG - ----- classify-individual-2: 0/0 new triple (1284, 0:00:00.015326) +- DEBUG - ----- generate-atom-property-1: 0/0 new triple (1284, 0:00:00.017602) +- DEBUG - ----- generate-atom-property-12: 0/0 new triple (1284, 0:00:00.014531) +- DEBUG - ----- generate-inverse-relation: 0/0 new triple (1284, 0:00:00.010692) +- DEBUG - ----- generate-composite-class: 0/0 new triple (1284, 0:00:00.015239) +- DEBUG - ----- add-restriction-to-class-1: 0/0 new triple (1284, 0:00:00.031440) +- DEBUG - ----- add-restriction-to-class-2: 0/0 new triple (1284, 0:00:00.016106) +- DEBUG - ----- add-restriction-to-class-3: 0/0 new triple (1284, 0:00:00.018612) +- DEBUG - ----- add-restriction-to-class-4: 0/0 new triple (1284, 0:00:00.016749) +- DEBUG - ----- add-restriction-to-class-5: 0/0 new triple (1284, 0:00:00.018862) +- DEBUG - ----- add-restriction-to-class-6: 0/0 new triple (1284, 0:00:00.015577) - DEBUG - --- Serializing graph to tenet.tetras-libre.fr_demo_01_generation - DEBUG - ----- step: generation - DEBUG - ----- id: https://tenet.tetras-libre.fr/demo/01/