Skip to content
Snippets Groups Projects
Commit 03667811 authored by Aurélien Lamercerie's avatar Aurélien Lamercerie
Browse files

New rule to deduce a relation from restriction (1)

parent 99fc30e1
No related branches found
No related tags found
No related merge requests found
Showing
with 13023 additions and 1 deletion
......@@ -56,6 +56,8 @@ 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.transduction.heuristic_deducer.relation_deducer_1 import *
# -- Generation Rules
......
......@@ -76,6 +76,7 @@ def __propagate_relation(target_net, base_net):
def __construct_restriction_net(graph, property_net_1, property_net_2):
# -- Net Composition
restriction_net = net.RestrictionNet(graph)
restriction_net.compose(property_net_1, property_net_2)
......
#!/usr/bin/python3.10
# -*-coding:Utf-8 -*
#==============================================================================
# relation_deducer_1: Rule for heuristic deduction
#------------------------------------------------------------------------------
# Heuristic deduction rule to deduce individual and relation from restriction
#==============================================================================
from rdflib import Graph
import transduction
from transduction import net
from transduction.query_builder import generate_select_query
from transduction.naming_computer import define_individual_naming_1
#==============================================================================
# Pattern Search:
# motherClass(individualNet, compositeClass),
# restriction(compositeClass, restrictionNet)
#==============================================================================
def __search_pattern(graph):
select_data_list = ['?subject_individual_net', '?predicate_property_net', '?object_class_net']
clause_list = [
'?subject_individual_net a net:Individual_Net.',
'?subject_individual_net net:hasMotherClassNet ?composite_class_net.',
'?composite_class_net a net:Composite_Class_Net.',
'?composite_class_net net:hasRestriction ?restriction_net.',
'?restriction_net a net:Restriction_Net.',
'?restriction_net net:hasRestrictionNetValue ?object_class_net.',
'?restriction_net net:hasRestrictionOnProperty ?predicate_property_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_structure(graph):
select_data_list = ['?sentenceId']
clause_list = ['?root a amr:AMR_Root.',
'?root amr:hasSentenceID ?sentenceId.']
query_code = generate_select_query(graph, select_data_list, clause_list)
result_set = graph.query(query_code)
return result_set
def __search_individual_from_restriction(graph, restriction_uri):
# To be defined
pass
def __search_relation_from_restriction(graph, restriction_uri):
# To be defined
pass
#==============================================================================
# Useful Computation Method(s)
#==============================================================================
def __get_structure(graph):
structure = 'unknown'
structure_set = __search_structure(graph)
for row in structure_set:
structure = row.sentenceId
return structure
def __define_individual_label(net):
class_name = 'thing'
class_name_list = net.class_name
if len(class_name_list) > 0:
assert len(class_name_list) == 1, f'Houston, we have a problem: too many naming'
class_name = class_name_list[0]
return f'any {class_name}'
def __propagate_relation(graph, target_net, base_leaf):
_, in_relation_set = __search_leaf_in_relation(graph, base_leaf)
for row in in_relation_set:
target_net.input_relation_list += [(row.inNet, row.inRelationRole, _)]
_, out_relation_set = __search_leaf_out_relation(graph, base_leaf)
for row in out_relation_set:
target_net.output_relation_list += [(_, row.outRelationRole, row.outNet)]
#==============================================================================
# Construct Method(s)
#==============================================================================
def __construct_individual_net(graph, mother_class_net):
# -- Net Composition
individual_net = net.IndividualNet(graph)
# -- 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(mother_class_net)
individual_net.mother_class_net = mother_class_net.uri
structure_ref = __get_structure(graph)
individual_net.structure = structure_ref
# -- Net Naming
individual_net.naming = define_individual_naming_1(mother_class_net, structure_ref)
# -- Relation Propagation
# __propagate_relation(graph, individual_net, base_leaf)
# -- Finalization
individual_net.finalize()
triple_definition = individual_net.generate_triple_definition()
return individual_net, triple_definition
def __construct_relation_net(graph, subject_net, predicate_net, object_net):
# To be defined
return None, []
#==============================================================================
# Main Method
#==============================================================================
def deduce_individual_and_relation_from_restriction(graph):
# -- Rule Initialization
rule_label = 'deduce individual and relation from restriction'
# -- Search for patterns
_, pattern_set = __search_pattern(graph)
# -- Selection Analyzing (1)
rule_triple_list = []
for pattern in pattern_set:
object_class_net = net.ClassNet(graph, uri=pattern.object_class_net)
# -- New Net Construction for Individual
new_individual_net, individual_triple_list = __construct_individual_net(graph, object_class_net)
rule_triple_list += individual_triple_list
# -- New Net Construction for Relation
new_relation_net, relation_triple_list = __construct_relation_net(
graph, pattern.subject_individual_net, pattern.predicate_property_net, new_individual_net)
rule_triple_list += relation_triple_list
return rule_label, rule_triple_list
......@@ -31,6 +31,17 @@ def __extract_naming(net, default='none'):
#==============================================================================
# Method to compute naming for Individual Net
#==============================================================================
def define_individual_naming_1(net_1, reference):
name_1 = __extract_naming(net_1, default='something')
return f'{name_1}-{reference}'
#==============================================================================
# Method to compute naming for Composite Net
#==============================================================================
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -56,7 +56,7 @@ test_data_dir = f'{INPUT_DIR_PATH}amrDocuments/'
# onto_prefix = f'SimpleTest'
# base_output_name = f'SimpleTest'
uuid_num = '03'
uuid_num = '04'
amrld_dir_path = f'{test_data_dir}dev/solar-system-{uuid_num}/'
amrld_file_path = f'{amrld_dir_path}SSC-{uuid_num}-01.stog.amr.ttl'
base_output_name = f'SolarSystemDev{uuid_num}'
......
@prefix ns1: <https://tenet.tetras-libre.fr/base-ontology#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
<https://tenet.tetras-libre.fr/extract-result#SolarSystem> a owl:Individual,
<https://tenet.tetras-libre.fr/extract-result#system> ;
rdfs:label "SolarSystem" ;
ns1:fromStructure "SSC-02-01" .
<https://tenet.tetras-libre.fr/extract-result#direct> a owl:ObjectProperty ;
rdfs:label "direct" ;
rdfs:subPropertyOf ns1:Out_ObjectProperty ;
ns1:fromStructure "SSC-02-01" .
<https://tenet.tetras-libre.fr/extract-result#dwarf-planet> a owl:Class ;
rdfs:subClassOf <https://tenet.tetras-libre.fr/extract-result#planet> ;
ns1:fromStructure "SSC-02-01" .
<https://tenet.tetras-libre.fr/extract-result#hasPart> a owl:ObjectProperty ;
rdfs:label "hasPart" ;
rdfs:subPropertyOf ns1:Out_ObjectProperty ;
ns1:fromStructure "SSC-02-01" .
<https://tenet.tetras-libre.fr/extract-result#large> a owl:Class ;
rdfs:label "large" ;
rdfs:subClassOf ns1:Entity ;
ns1:fromStructure "SSC-02-01" .
<https://tenet.tetras-libre.fr/extract-result#more> a owl:ObjectProperty ;
rdfs:label "more" ;
rdfs:subPropertyOf ns1:Out_ObjectProperty ;
ns1:fromStructure "SSC-02-01" .
<https://tenet.tetras-libre.fr/extract-result#most> a owl:ObjectProperty ;
rdfs:label "most" ;
rdfs:subPropertyOf ns1:Out_ObjectProperty ;
ns1:fromStructure "SSC-02-01" .
<https://tenet.tetras-libre.fr/extract-result#object> a owl:Class ;
rdfs:label "object" ;
rdfs:subClassOf ns1:Entity ;
ns1:fromStructure "SSC-02-01" .
<https://tenet.tetras-libre.fr/extract-result#orbit> a owl:Class ;
rdfs:label "orbit" ;
rdfs:subClassOf ns1:Entity ;
ns1:fromStructure "SSC-02-01" .
<https://tenet.tetras-libre.fr/extract-result#remain> a owl:ObjectProperty ;
rdfs:label "remain" ;
rdfs:subPropertyOf ns1:Out_ObjectProperty ;
ns1:fromStructure "SSC-02-01" .
<https://tenet.tetras-libre.fr/extract-result#small-body> a owl:Class ;
rdfs:subClassOf <https://tenet.tetras-libre.fr/extract-result#body> ;
ns1:fromStructure "SSC-02-01" .
<https://tenet.tetras-libre.fr/extract-result#sun> a owl:Class ;
rdfs:label "sun" ;
rdfs:subClassOf ns1:Entity ;
ns1:fromStructure "SSC-02-01" .
<https://tenet.tetras-libre.fr/extract-result#body> a owl:Class ;
rdfs:label "body" ;
rdfs:subClassOf ns1:Entity ;
ns1:fromStructure "SSC-02-01" .
<https://tenet.tetras-libre.fr/extract-result#dwarf> a owl:Class,
owl:Individual,
<https://tenet.tetras-libre.fr/extract-result#dwarf> ;
rdfs:label "dwarf" ;
rdfs:subClassOf ns1:Undetermined_Thing ;
ns1:fromStructure "SSC-02-01" .
<https://tenet.tetras-libre.fr/extract-result#planet> a owl:Class ;
rdfs:label "planet" ;
rdfs:subClassOf ns1:Entity ;
ns1:fromStructure "SSC-02-01" .
<https://tenet.tetras-libre.fr/extract-result#small> a owl:Class,
owl:Individual,
<https://tenet.tetras-libre.fr/extract-result#small> ;
rdfs:label "small" ;
rdfs:subClassOf ns1:Entity,
ns1:Undetermined_Thing ;
ns1:fromStructure "SSC-02-01" .
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment