From 4d0f1588bfc580c7e6b243e85d196e2bf8985013 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Aur=C3=A9lien=20Lamercerie?=
 <aurelien.lamercerie@tetras-libre.fr>
Date: Wed, 13 Sep 2023 16:19:01 +0200
Subject: [PATCH] Refine heuristic rule: relation_deducer_1

---
 .../extractor/atom_class_extractor.py         |  1 +
 .../extractor/composite_class_extractor_1.py  |  1 +
 .../extractor/composite_class_extractor_2.py  |  1 +
 .../heuristic_deducer/refine_restriction_1.py |  5 ++--
 .../heuristic_deducer/relation_deducer_1.py   | 14 ++++-----
 .../phenomena_analyzer/mod_analyzer_1.py      |  3 +-
 .../phenomena_analyzer/or_analyzer_1.py       | 29 ++++++++++---------
 .../phenomena_analyzer/or_analyzer_2.py       | 28 +++++++++---------
 tenet/transduction/net/class_net.py           | 15 ++++++++--
 .../semantic_net_rdf_reference.py             |  1 +
 10 files changed, 58 insertions(+), 40 deletions(-)

diff --git a/tenet/scheme/amr_master_rule/transduction/extractor/atom_class_extractor.py b/tenet/scheme/amr_master_rule/transduction/extractor/atom_class_extractor.py
index 2c9356f1..d8522821 100644
--- a/tenet/scheme/amr_master_rule/transduction/extractor/atom_class_extractor.py
+++ b/tenet/scheme/amr_master_rule/transduction/extractor/atom_class_extractor.py
@@ -118,6 +118,7 @@ def __construct_atom_class_net(graph, leaf, concept_name):
     
     # -- Finalization
     atom_class_net.finalize()
+    atom_class_net.root_class_net = atom_class_net.uri
     triple_definition = atom_class_net.generate_triple_definition()
     
     return atom_class_net, triple_definition
diff --git a/tenet/scheme/amr_master_rule/transduction/extractor/composite_class_extractor_1.py b/tenet/scheme/amr_master_rule/transduction/extractor/composite_class_extractor_1.py
index c16dbee5..4b925695 100644
--- a/tenet/scheme/amr_master_rule/transduction/extractor/composite_class_extractor_1.py
+++ b/tenet/scheme/amr_master_rule/transduction/extractor/composite_class_extractor_1.py
@@ -106,6 +106,7 @@ def __construct_composite_class_net(
     
     # -- Data Computation
     composite_class_net.mother_class_net = base_class_net.uri
+    composite_class_net.root_class_net = base_class_net.root_class_net
 
     # -- Restriction Computation
     restriction_net, triple_list_1 = __construct_restriction_net(graph, core_property_net, target_class_net)
diff --git a/tenet/scheme/amr_master_rule/transduction/extractor/composite_class_extractor_2.py b/tenet/scheme/amr_master_rule/transduction/extractor/composite_class_extractor_2.py
index 216db854..8b974cfe 100644
--- a/tenet/scheme/amr_master_rule/transduction/extractor/composite_class_extractor_2.py
+++ b/tenet/scheme/amr_master_rule/transduction/extractor/composite_class_extractor_2.py
@@ -105,6 +105,7 @@ def __construct_composite_class_net(
     
     # -- Data Computation
     composite_class_net.mother_class_net = base_class_net.uri
+    composite_class_net.root_class_net = base_class_net.root_class_net
 
     # -- Restriction Computation
     restriction_net, triple_list_1 = __construct_restriction_net(graph, core_property_net, target_class_net)
diff --git a/tenet/scheme/amr_master_rule/transduction/heuristic_deducer/refine_restriction_1.py b/tenet/scheme/amr_master_rule/transduction/heuristic_deducer/refine_restriction_1.py
index a93d6e2c..d133e071 100644
--- a/tenet/scheme/amr_master_rule/transduction/heuristic_deducer/refine_restriction_1.py
+++ b/tenet/scheme/amr_master_rule/transduction/heuristic_deducer/refine_restriction_1.py
@@ -134,8 +134,9 @@ def __construct_composite_class_net(
     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, mother_class_net.uri] 
-    composite_class_net.mother_class_net = [mother_class_net.uri] 
+    # composite_class_net.mother_class_net = [base_class_net.uri, mother_class_net.uri] 
+    composite_class_net.mother_class_net = mother_class_net.uri
+    composite_class_net.root_class_net = base_class_net.root_class_net
 
     # -- Restriction Computation
     restriction_net, triple_list_1 = __construct_restriction_net(graph, core_property_net, target_class_net)
diff --git a/tenet/scheme/amr_master_rule/transduction/heuristic_deducer/relation_deducer_1.py b/tenet/scheme/amr_master_rule/transduction/heuristic_deducer/relation_deducer_1.py
index aafb2cad..3d3e8ab3 100644
--- a/tenet/scheme/amr_master_rule/transduction/heuristic_deducer/relation_deducer_1.py
+++ b/tenet/scheme/amr_master_rule/transduction/heuristic_deducer/relation_deducer_1.py
@@ -79,13 +79,13 @@ def __get_structure(graph):
     return structure
 
 
-def __define_individual_label(net):
+def __define_individual_label(net, reference):
     class_label = 'thing'
     naming_list = net.naming
     if len(naming_list) > 0:
         assert len(naming_list) == 1, 'Houston, we have a problem: too many naming'
         class_label = naming_list[0]
-    return f'any {class_label}'
+    return f'{class_label} ({reference})'
 
         
 
@@ -99,15 +99,15 @@ def __construct_individual_net(graph, mother_class_net):
     individual_net = net.IndividualNet(graph)
     
     # -- Main mother class
-    main_mother_class_net = mother_class_net
-    if mother_class_net.mother_class_net:
-        main_mother_class_net = net.ClassNet(graph, uri=mother_class_net.mother_class_net[0])
+    root_class_net = mother_class_net
+    if mother_class_net.root_class_net:
+        root_class_net = net.ClassNet(graph, uri=mother_class_net.root_class_net[0])
     
     # -- Data Computation
     individual_net.base_node = mother_class_net.base_node
     individual_net.node = mother_class_net.node
-    individual_net.individual_label = __define_individual_label(main_mother_class_net)
     structure_ref = __get_structure(graph)
+    individual_net.individual_label = __define_individual_label(root_class_net, structure_ref)
     individual_net.structure = structure_ref
     
     # -- Mother classes
@@ -118,7 +118,7 @@ def __construct_individual_net(graph, mother_class_net):
     individual_net.mother_class_net = mother_class_net_list
 
     # -- Net Naming
-    individual_net.naming = define_individual_naming(main_mother_class_net, structure_ref)
+    individual_net.naming = define_individual_naming(root_class_net, structure_ref)
     
     # -- Finalization
     individual_net.finalize()
diff --git a/tenet/scheme/amr_master_rule/transduction/phenomena_analyzer/mod_analyzer_1.py b/tenet/scheme/amr_master_rule/transduction/phenomena_analyzer/mod_analyzer_1.py
index dd2090e6..8cdecc38 100644
--- a/tenet/scheme/amr_master_rule/transduction/phenomena_analyzer/mod_analyzer_1.py
+++ b/tenet/scheme/amr_master_rule/transduction/phenomena_analyzer/mod_analyzer_1.py
@@ -108,6 +108,7 @@ def __construct_composite_class_net(graph, class_net_1, class_net_2):
     
     # -- Data Computation
     composite_class_net.mother_class_net = class_net_1.uri
+    composite_class_net.root_class_net = class_net_1.root_class_net
 
     # -- Restriction Computation
     triple_list_1 = []
@@ -136,7 +137,7 @@ def __construct_individual_net(graph, class_net):
     individual_net.compose(class_net)
     
     # -- Data Computation
-    individual_net.base_class_name = f'Feature'
+    individual_net.base_class_name = 'Feature'
     individual_net.mother_class_net = class_net.uri
 
     # -- Net Naming
diff --git a/tenet/scheme/amr_master_rule/transduction/phenomena_analyzer/or_analyzer_1.py b/tenet/scheme/amr_master_rule/transduction/phenomena_analyzer/or_analyzer_1.py
index 8283ee1d..9a10a7b1 100644
--- a/tenet/scheme/amr_master_rule/transduction/phenomena_analyzer/or_analyzer_1.py
+++ b/tenet/scheme/amr_master_rule/transduction/phenomena_analyzer/or_analyzer_1.py
@@ -118,6 +118,7 @@ def __construct_composite_class_net_from_3_nets(
     
     # -- Data Computation
     composite_class_net.mother_class_net = base_class_net.uri
+    composite_class_net.root_class_net = base_class_net.root_class_net
 
     # -- Restriction Computation
     restriction_net, triple_list_1 = __construct_restriction_net(graph, core_property_net, target_class_net)
@@ -139,27 +140,27 @@ def __construct_composite_class_net_from_3_nets(
 
 
 
-def __construct_class_union_net(graph, base_class_net, class_net_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)
+#     # -- Net Composition
+#     class_union_net = net.PropertyUnionNet(graph)
+#     class_union_net.compose(base_class_net, class_net_list)
     
-    # -- Data Computation: None
+#     # -- Data Computation: None
 
-    # -- Restriction Computation: None
+#     # -- Restriction Computation: None
     
-    # -- Relation Propagation
-    __propagate_relation(class_union_net, base_class_net) 
+#     # -- Relation Propagation
+#     __propagate_relation(class_union_net, base_class_net) 
 
-    # -- Net Naming
-    class_union_net.naming = define_union_naming(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()
+#     # -- Finalization
+#     class_union_net.finalize()
+#     triple_list = class_union_net.generate_triple_definition()
     
-    return class_union_net, triple_list
+#     return class_union_net, triple_list
   
     
 #==============================================================================
diff --git a/tenet/scheme/amr_master_rule/transduction/phenomena_analyzer/or_analyzer_2.py b/tenet/scheme/amr_master_rule/transduction/phenomena_analyzer/or_analyzer_2.py
index 88955c5a..eb401ad2 100644
--- a/tenet/scheme/amr_master_rule/transduction/phenomena_analyzer/or_analyzer_2.py
+++ b/tenet/scheme/amr_master_rule/transduction/phenomena_analyzer/or_analyzer_2.py
@@ -140,27 +140,27 @@ def __construct_composite_property_net_from_3_properties(
 
 
 
-def __construct_property_union_net(graph, base_property_net, property_net_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)
+#     # -- Net Composition
+#     property_union_net = net.PropertyUnionNet(graph)
+#     property_union_net.compose(base_property_net, property_net_list)
     
-    # -- Data Computation: None
+#     # -- Data Computation: None
 
-    # -- Restriction Computation: None
+#     # -- Restriction Computation: None
     
-    # -- Relation Propagation
-    __propagate_relation(property_union_net, base_property_net) 
+#     # -- Relation Propagation
+#     __propagate_relation(property_union_net, base_property_net) 
 
-    # -- Net Naming
-    property_union_net.naming = define_union_naming(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()
+#     # -- Finalization
+#     property_union_net.finalize()
+#     triple_list = property_union_net.generate_triple_definition()
     
-    return property_union_net, triple_list
+#     return property_union_net, triple_list
     
 
 
diff --git a/tenet/transduction/net/class_net.py b/tenet/transduction/net/class_net.py
index b0d12fe2..30c4e3f5 100644
--- a/tenet/transduction/net/class_net.py
+++ b/tenet/transduction/net/class_net.py
@@ -34,11 +34,12 @@ class ClassNet(Net):
         self.type_uri = produce_uriref(self.support_graph, f'net:{self.type_id}')
         
         # -- Net Attributes
-        self.attr_list += ['class_name', 'class_uri', 'class_type', 'mother_class_net']
+        self.attr_list += ['class_name', 'class_uri', 'class_type', 'mother_class_net', 'root_class_net']
         self._class_name = None
         self._class_uri = None
         self._class_type = None
         self._mother_class_net = None
+        self._root_class_net = None
   
         
     #--------------------------------------------------------------------------
@@ -85,4 +86,14 @@ class ClassNet(Net):
     
     @mother_class_net.setter
     def mother_class_net(self, new_value):
-        self._mother_class_net = self.set_attribute_value_list(new_value, produce_uriref)
\ No newline at end of file
+        self._mother_class_net = self.set_attribute_value_list(new_value, produce_uriref)
+
+    @property
+    def root_class_net(self):
+        if self._root_class_net is None: 
+            self._root_class_net = self.get_value_list_from_graph('root_class_net')
+        return self._root_class_net
+    
+    @root_class_net.setter
+    def root_class_net(self, new_value):
+        self._root_class_net = self.set_attribute_value_list(new_value, produce_uriref)
\ No newline at end of file
diff --git a/tenet/transduction/semantic_net_rdf_reference.py b/tenet/transduction/semantic_net_rdf_reference.py
index abd5e63c..c603ee52 100644
--- a/tenet/transduction/semantic_net_rdf_reference.py
+++ b/tenet/transduction/semantic_net_rdf_reference.py
@@ -39,6 +39,7 @@ class SemanticNetReferenceHandle:
             # Class Net
             'class_name':               'hasClassName',
             'mother_class_net':         'hasMotherClassNet',
+            'root_class_net':           'hasRootClassNet',
             'class_type':               'hasClassType',
             
             # Property Net
-- 
GitLab