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

Update AMR Rule to propagate relation in atomic extractor

parent 708b4c76
No related branches found
No related tags found
No related merge requests found
......@@ -56,30 +56,31 @@ def __search_structure(graph):
return 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 check: result_list.append(relation)
return result_list
def __search_leaf_in_relation(graph, base_leaf_uri):
select_data_list = ['?inRelationRole', '?inNet']
clause_list = [f'?inNet a [rdfs:subClassOf* net:Net].',
f'?inNet net:coverBaseNode ?inLeaf.',
('?inLeaf', '?relation', base_leaf_uri),
f'?relation amr:hasAmrRole ?inRelationRole.']
query_code = generate_select_query(graph, select_data_list, clause_list)
result_set = graph.query(query_code)
return query_code, result_set
def __propagate_relation(target_net, leaf):
# TODO
#target_net.output_relation_list = None
pass
def __search_leaf_out_relation(graph, base_leaf_uri):
select_data_list = ['?outRelationRole', '?outNet']
clause_list = [f'?outNet a [rdfs:subClassOf* net:Net].',
f'?outNet net:coverBaseNode ?outLeaf.',
(base_leaf_uri, '?relation', '?outLeaf'),
f'?relation amr:hasAmrRole ?outRelationRole.']
query_code = generate_select_query(graph, select_data_list, clause_list)
result_set = graph.query(query_code)
return query_code, result_set
#==============================================================================
# Construct Method(s)
# Useful Computation Method(s)
#==============================================================================
def __get_structure(graph):
......@@ -90,9 +91,19 @@ def __get_structure(graph):
return structure
def __define_naming(todo):
pass
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_atom_class_net(graph, leaf, concept_name):
......@@ -109,7 +120,7 @@ def __construct_atom_class_net(graph, leaf, concept_name):
atom_class_net.naming = concept_name
# -- Relation Propagation
__propagate_relation(atom_class_net, leaf)
__propagate_relation(graph, atom_class_net, leaf)
# -- Finalization
atom_class_net.finalize()
......
......@@ -62,30 +62,31 @@ def __search_structure(graph):
return 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 check: result_list.append(relation)
return result_list
def __search_leaf_in_relation(graph, base_leaf_uri):
select_data_list = ['?inRelationRole', '?inNet']
clause_list = [f'?inNet a [rdfs:subClassOf* net:Net].',
f'?inNet net:coverBaseNode ?inLeaf.',
('?inLeaf', '?relation', base_leaf_uri),
f'?relation amr:hasAmrRole ?inRelationRole.']
query_code = generate_select_query(graph, select_data_list, clause_list)
result_set = graph.query(query_code)
return query_code, result_set
def __propagate_relation(target_net, leaf):
# TODO
#target_net.output_relation_list = None
pass
def __search_leaf_out_relation(graph, base_leaf_uri):
select_data_list = ['?outRelationRole', '?outNet']
clause_list = [f'?outNet a [rdfs:subClassOf* net:Net].',
f'?outNet net:coverBaseNode ?outLeaf.',
(base_leaf_uri, '?relation', '?outLeaf'),
f'?relation amr:hasAmrRole ?outRelationRole.']
query_code = generate_select_query(graph, select_data_list, clause_list)
result_set = graph.query(query_code)
return query_code, result_set
#==============================================================================
# Construct Method(s)
# Useful Computation Method(s)
#==============================================================================
def __get_structure(graph):
......@@ -96,9 +97,19 @@ def __get_structure(graph):
return structure
def __define_naming(todo):
pass
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, base_leaf, concept_name, value_label, mother_class_net):
......@@ -117,7 +128,7 @@ def __construct_individual_net(
individual_net.naming = concept_name
# -- Relation Propagation
__propagate_relation(individual_net, base_leaf)
__propagate_relation(graph, individual_net, base_leaf)
# -- Finalization
individual_net.finalize()
......
......@@ -72,29 +72,31 @@ def __search_target_argument(graph, base_leaf_uri):
return 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 check: result_list.append(relation)
return result_list
def __search_leaf_in_relation(graph, base_leaf_uri):
select_data_list = ['?inRelationRole', '?inNet']
clause_list = [f'?inNet a [rdfs:subClassOf* net:Net].',
f'?inNet net:coverBaseNode ?inLeaf.',
('?inLeaf', '?relation', base_leaf_uri),
f'?relation amr:hasAmrRole ?inRelationRole.']
query_code = generate_select_query(graph, select_data_list, clause_list)
result_set = graph.query(query_code)
return query_code, result_set
def __propagate_relation(target_net, leaf):
# TODO
#target_net.output_relation_list = None
pass
def __search_leaf_out_relation(graph, base_leaf_uri):
select_data_list = ['?outRelationRole', '?outNet']
clause_list = [f'?outNet a [rdfs:subClassOf* net:Net].',
f'?outNet net:coverBaseNode ?outLeaf.',
(base_leaf_uri, '?relation', '?outLeaf'),
f'?relation amr:hasAmrRole ?outRelationRole.']
query_code = generate_select_query(graph, select_data_list, clause_list)
result_set = graph.query(query_code)
return query_code, result_set
#==============================================================================
# Construct Method(s)
# Useful Computation Method(s)
#==============================================================================
def __get_structure(graph):
......@@ -110,6 +112,22 @@ def __define_naming(predicate_label):
return naming
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_atom_property_net(graph, base_leaf, predicate_label):
# -- Net Composition
......@@ -136,7 +154,7 @@ def __construct_atom_property_net(graph, base_leaf, predicate_label):
atom_property_net.property_name12 = f'{naming}-of'
# -- Relation Propagation
__propagate_relation(atom_property_net, base_leaf)
__propagate_relation(graph, atom_property_net, base_leaf)
# -- Finalization
atom_property_net.finalize()
......
......@@ -17,7 +17,7 @@ from transduction.naming_computer import define_composite_naming_1, define_restr
#==============================================================================
# Select Pattern: property(class, or_phenomena)
# Pattern Search: property(class, or_phenomena)
#==============================================================================
def __rule_pattern_query_code(graph):
......@@ -41,7 +41,7 @@ def __search_pattern(graph):
#==============================================================================
# Search for phenomena operators
# Useful Additional Search
#==============================================================================
def __class_op_pattern_query_code(graph, phenomena_net_uri, num):
......@@ -63,7 +63,7 @@ def __search_class_phenomena_operator(graph, phenomena_net_uri):
#==============================================================================
# Relation Propagation
# Useful Computation Method(s)
#==============================================================================
def __filter_relation(relation_list):
......@@ -84,7 +84,7 @@ def __propagate_relation(target_net, base_net):
#==============================================================================
# Construct Methods: construction of composite class net
# Construct Method(s)
#==============================================================================
def __construct_restriction_net(graph, property_net_1, property_net_2):
......
......@@ -248,6 +248,7 @@ class Net:
def input_relation_list(self):
if self._input_relation_list is None:
self._input_relation_list = []
if self.uri is not None:
query_result = self.__find_input_relations_in_graph()
for row in query_result:
relation = (row.in_net, row.in_rel, self.uri)
......@@ -279,6 +280,7 @@ class Net:
def output_relation_list(self):
if self._output_relation_list is None:
self._output_relation_list = []
if self.uri is not None:
query_result = self.__find_output_relations_in_graph()
for row in query_result:
relation = (self.uri, row.out_rel, row.out_net)
......@@ -377,6 +379,23 @@ class Net:
# Triple Generation Method
#--------------------------------------------------------------------------
# -- Net Declaration
def __generate_net_declaration_triple(self):
triple_list = []
rdf_type_uri = produce_uriref(self.support_graph, RDF.type)
triple_list.append((self.uri, rdf_type_uri, self.type_uri))
if self.is_deprecated():
triple_list.append(self.__define_deprecated_clause())
return triple_list
# -- Net Attribute(s)
def __get_attr_value_list(self, attr_key):
attr_value_list = []
......@@ -413,23 +432,23 @@ class Net:
return triple_list
def __generate_net_declaration_triple(self):
# -- Net Relation(s)
def __generate_net_relation_triples(self):
triple_list = []
rdf_type_uri = produce_uriref(self.support_graph, RDF.type)
triple_list.append((self.uri, rdf_type_uri, self.type_uri))
if self.is_deprecated():
triple_list.append(self.__define_deprecated_clause())
net_relation_uri = produce_uriref(self.support_graph, 'net:Relation')
for triple in self.input_relation_list + self.output_relation_list:
_, relation, _ = triple
triple_list.append((relation, rdf_type_uri, net_relation_uri))
triple_list.append(triple)
return triple_list
def __generate_net_relation_triples(self):
triple_list = self.input_relation_list + self.output_relation_list
return triple_list
# -- Generation Triple Definition
def generate_triple_definition(self):
......
......@@ -437,9 +437,6 @@ net:Property_Axiom_Net a owl:Class ;
net:Property_Direction a owl:Class ;
rdfs:subClassOf net:Feature .
net:Relation a owl:Class ;
rdfs:subClassOf net:Net_Structure .
net:Restriction_Net a owl:Class ;
rdfs:subClassOf net:Net .
......@@ -454,39 +451,13 @@ net:atom a owl:Class ;
rdfs:label "atom" ;
rdfs:subClassOf net:Type .
net:atomClass_gravitation_g a net:Atom_Class_Net ;
net:coverBaseNode :leaf_gravitation_g ;
net:coverNode :leaf_gravitation_g ;
net:hasClassName "gravitation" ;
net:hasNaming "gravitation" ;
net:hasStructure "SSC-01-01" .
net:atomClass_object_o a net:Atom_Class_Net ;
net:coverBaseNode :leaf_object_o ;
net:coverNode :leaf_object_o ;
net:hasClassName "object" ;
net:hasNaming "object" ;
net:hasStructure "SSC-01-01" .
net:atomClass_sun_s2 a net:Atom_Class_Net ;
net:coverBaseNode :leaf_sun_s2 ;
net:coverNode :leaf_sun_s2 ;
net:hasClassName "sun" ;
net:hasNaming "sun" ;
net:hasStructure "SSC-01-01" .
net:atomClass_system_s a net:Atom_Class_Net ;
net:coverBaseNode :leaf_system_s ;
net:coverNode :leaf_system_s ;
net:hasClassName "system" ;
net:hasNaming "system" ;
net:hasStructure "SSC-01-01" .
net:atomOf a owl:AnnotationProperty ;
rdfs:label "atom of" ;
rdfs:subPropertyOf net:typeProperty .
net:atomProperty_bind_b a net:Atom_Property_Net ;
:role_ARG0 net:atomClass_gravitation_g ;
:role_ARG1 net:atomClass_system_s ;
net:coverBaseNode :leaf_bind-01_b ;
net:coverNode :leaf_bind-01_b ;
net:hasNaming "bind" ;
......@@ -540,6 +511,7 @@ net:atomProperty_hasManner_m9 a net:Atom_Property_Net ;
:leaf_orbit-01_o2 .
net:atomProperty_hasPart_p9 a net:Atom_Property_Net ;
:role_ARG0 net:atomClass_system_s ;
net:coverBaseNode :leaf_hasPart_p9 ;
net:coverNode :leaf_hasPart_p9 ;
net:hasNaming "hasPart" ;
......@@ -554,6 +526,8 @@ net:atomProperty_hasPart_p9 a net:Atom_Property_Net ;
:leaf_system_s .
net:atomProperty_orbit_o2 a net:Atom_Property_Net ;
:role_ARG0 net:atomClass_object_o ;
:role_ARG1 net:atomClass_sun_s2 ;
net:coverBaseNode :leaf_orbit-01_o2 ;
net:coverNode :leaf_orbit-01_o2 ;
net:hasNaming "orbit" ;
......@@ -690,14 +664,6 @@ net:has_target a owl:AnnotationProperty ;
rdfs:label "has target" ;
rdfs:subPropertyOf net:has_relation_value .
net:individual_system_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:hasNaming "system" ;
net:hasStructure "SSC-01-01" .
net:inverse_direction a owl:NamedIndividual .
net:listBy a owl:AnnotationProperty ;
......@@ -826,7 +792,8 @@ ns2:AMR a owl:Class ;
:hasConceptLink "or" ;
:label "conjunction-OR" .
:role_domain a owl:Class ;
:role_domain a owl:Class,
net:Relation ;
rdfs:subClassOf :AMR_NonCore_Role ;
:hasRelationName "domain" ;
:label "domain" ;
......@@ -920,6 +887,27 @@ net:Feature a owl:Class ;
net:Individual_Net a owl:Class ;
rdfs:subClassOf net:Net .
net:atomClass_gravitation_g a net:Atom_Class_Net ;
net:coverBaseNode :leaf_gravitation_g ;
net:coverNode :leaf_gravitation_g ;
net:hasClassName "gravitation" ;
net:hasNaming "gravitation" ;
net:hasStructure "SSC-01-01" .
net:atomClass_object_o a net:Atom_Class_Net ;
net:coverBaseNode :leaf_object_o ;
net:coverNode :leaf_object_o ;
net:hasClassName "object" ;
net:hasNaming "object" ;
net:hasStructure "SSC-01-01" .
net:atomClass_sun_s2 a net:Atom_Class_Net ;
net:coverBaseNode :leaf_sun_s2 ;
net:coverNode :leaf_sun_s2 ;
net:hasClassName "sun" ;
net:hasNaming "sun" ;
net:hasStructure "SSC-01-01" .
net:atomClass_system_p a net:Atom_Class_Net ;
net:coverBaseNode :leaf_system_p ;
net:coverNode :leaf_system_p ;
......@@ -934,6 +922,14 @@ net:class_list a owl:Class ;
net:has_value a owl:AnnotationProperty ;
rdfs:subPropertyOf net:netProperty .
net:individual_system_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:hasNaming "system" ;
net:hasStructure "SSC-01-01" .
net:objectType a owl:AnnotationProperty ;
rdfs:label "object type" ;
rdfs:subPropertyOf net:objectProperty .
......@@ -1083,6 +1079,14 @@ net:Class_Net a owl:Class ;
net:Property_Net a owl:Class ;
rdfs:subClassOf net:Net .
net:atomClass_system_s a net:Atom_Class_Net ;
:role_domain net:individual_system_p ;
net:coverBaseNode :leaf_system_s ;
net:coverNode :leaf_system_s ;
net:hasClassName "system" ;
net:hasNaming "system" ;
net:hasStructure "SSC-01-01" .
net:objectProperty a owl:AnnotationProperty ;
rdfs:label "object attribute" .
......@@ -1134,6 +1138,9 @@ ns2:Frame a ns2:Concept,
:toReify a owl:AnnotationProperty ;
rdfs:subPropertyOf :AMR_AnnotationProperty .
net:Relation a owl:Class ;
rdfs:subClassOf net:Net_Structure .
net:has_relation_value a owl:AnnotationProperty ;
rdfs:label "has relation value" ;
rdfs:subPropertyOf net:has_object .
......@@ -1164,11 +1171,13 @@ ns3:FrameRole a ns2:Role,
:hasConcept :concept_orbit-01 ;
:hasVariable :variable_o2 .
:role_ARG0 a owl:Class ;
:role_ARG0 a owl:Class,
net:Relation ;
rdfs:subClassOf :AMR_Core_Role ;
:label "ARG0" .
:role_ARG1 a owl:Class ;
:role_ARG1 a owl:Class,
net:Relation ;
rdfs:subClassOf :AMR_Core_Role ;
:label "ARG1" .
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment