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

New AMR Rule: transduction.atom_phenomena_extractor

parent f6580a24
No related branches found
No related tags found
No related merge requests found
......@@ -24,14 +24,10 @@ def __search_pattern(graph):
select_data_list = ['?baseLeaf', '?phenomenaLabel', '?relationConceptPhenomena', '?relationConceptLabel']
clause_list = [f'?baseLeaf a amr:AMR_Leaf.',
f'?baseLeaf amr:hasConcept ?concept.',
f'?baseLeaf amr:hasVariable ?variable.',
f'?variable amr:label ?varLabel.',
f'?concept rdfs:subClassOf amr:AMR_Relation_Concept.',
f'?concept amr:hasPhenomenaLink ?relationConceptPhenomena.',
f'?concept amr:label ?relationConceptLabel.',
f'?relationConceptPhenomena amr:label ?phenomenaLabel.',
f'?baseLeaf ?relation ?argLeaf.',
f'?relation amr:hasAmrRole ?someArgRole.']
f'?relationConceptPhenomena amr:label ?phenomenaLabel.']
query_code = generate_select_query(graph, select_data_list, clause_list)
result_set = graph.query(query_code)
return query_code, result_set
......@@ -92,20 +88,6 @@ def __get_structure(graph):
return structure
def __define_naming(value_label):
value_label = value_label.replace(' ', '#')
value_label = value_label.replace('-', '#')
word_set = value_label.split('#')
first = True
for word in word_set:
if first:
naming = word
first = False
else:
naming += word.capitalize()
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:
......@@ -120,30 +102,30 @@ def __propagate_relation(graph, target_net, base_leaf):
# Construct Method(s)
#==============================================================================
def __construct_individual_net(
graph, base_leaf, concept_name, value_label, mother_class_net):
def __construct_phenomena_net(
graph, base_leaf, phenomena_label, relation_concept_phenomena, relation_concept_label):
# -- Net Composition
individual_net = net.IndividualNet(graph)
phenomena_net = net.PhenomenaNet(graph)
# -- Data Computation
individual_net.base_node = base_leaf
individual_net.node = base_leaf
individual_net.individual_label = value_label
individual_net.mother_class_net = mother_class_net
individual_net.structure = __get_structure(graph)
phenomena_net.base_node = base_leaf
phenomena_net.node = base_leaf
phenomena_net.phenomena_type = relation_concept_phenomena
phenomena_net.phenomena_ref = relation_concept_label
phenomena_net.structure = __get_structure(graph)
# -- Net Naming
individual_net.naming = __define_naming(value_label)
phenomena_net.naming = phenomena_label
# -- Relation Propagation
__propagate_relation(graph, individual_net, base_leaf)
__propagate_relation(graph, phenomena_net, base_leaf)
# -- Finalization
individual_net.finalize()
triple_definition = individual_net.generate_triple_definition()
phenomena_net.finalize()
triple_definition = phenomena_net.generate_triple_definition()
return individual_net, triple_definition
return phenomena_net, triple_definition
......@@ -164,8 +146,12 @@ def extract_atom_phenomena(graph):
for pattern in pattern_set:
# -- New Net Construction (from 3 nets)
new_class, triple_list = __construct_individual_net(
graph, pattern.baseLeaf, pattern.conceptName, pattern.valueLabel, pattern.classNet)
new_class, triple_list = __construct_phenomena_net(
graph,
pattern.baseLeaf,
pattern.phenomenaLabel,
pattern.relationConceptPhenomena,
pattern.relationConceptLabel)
# -- Resulting List Update
# class_net_list.append(new_class)
......
......@@ -428,9 +428,6 @@ net:Object a owl:Class ;
rdfs:label "Object using in semantic net instance" ;
rdfs:subClassOf net:Net_Structure .
net:Phenomena_Net a owl:Class ;
rdfs:subClassOf net:Net .
net:Property_Axiom_Net a owl:Class ;
rdfs:subClassOf net:Axiom_Net .
......@@ -468,32 +465,8 @@ net:atomProperty_bind_b a net:Atom_Property_Net ;
net:targetArgumentNode :leaf_gravitation_g,
:leaf_system_s .
net:atomProperty_direct_d a net:Atom_Property_Net ;
net:coverBaseNode :leaf_direct-02_d ;
net:coverNode :leaf_direct-02_d ;
net:hasNaming "direct" ;
net:hasPropertyName "direct" ;
net:hasPropertyName01 "directing" ;
net:hasPropertyName10 "direct-by" ;
net:hasPropertyName12 "direct-of" ;
net:hasPropertyType owl:ObjectProperty ;
net:hasStructure "SSC-01-01" ;
net:isCoreRoleLinked "true" .
net:atomProperty_direct_d2 a net:Atom_Property_Net ;
net:coverBaseNode :leaf_direct-02_d2 ;
net:coverNode :leaf_direct-02_d2 ;
net:hasNaming "direct" ;
net:hasPropertyName "direct" ;
net:hasPropertyName01 "directing" ;
net:hasPropertyName10 "direct-by" ;
net:hasPropertyName12 "direct-of" ;
net:hasPropertyType owl:ObjectProperty ;
net:hasStructure "SSC-01-01" ;
net:isCoreRoleLinked "true" ;
net:targetArgumentNode :value_negative .
net:atomProperty_hasManner_m9 a net:Atom_Property_Net ;
:role_ARG1 net:phenomena_conjunction-OR_o3 ;
net:coverBaseNode :leaf_hasManner_m9 ;
net:coverNode :leaf_hasManner_m9 ;
net:hasNaming "hasManner" ;
......@@ -509,6 +482,7 @@ net:atomProperty_hasManner_m9 a net:Atom_Property_Net ;
net:atomProperty_hasPart_p9 a net:Atom_Property_Net ;
:role_ARG0 net:atomClass_system_s ;
:role_ARG1 net:phenomena_conjunction-AND_a ;
net:coverBaseNode :leaf_hasPart_p9 ;
net:coverNode :leaf_hasPart_p9 ;
net:hasNaming "hasPart" ;
......@@ -789,16 +763,6 @@ ns2:AMR a owl:Class ;
:fromAmrLk ns11:sun ;
:label "sun" .
:phenomena_conjunction_and a owl:Class ;
rdfs:subClassOf :phenomena_conjunction ;
:hasConceptLink "and" ;
:label "conjunction-AND" .
:phenomena_conjunction_or a owl:Class ;
rdfs:subClassOf :phenomena_conjunction ;
:hasConceptLink "or" ;
:label "conjunction-OR" .
:role_domain a owl:Class,
net:Relation ;
rdfs:subClassOf :AMR_NonCore_Role ;
......@@ -901,20 +865,6 @@ net:atomClass_gravitation_g a net:Atom_Class_Net ;
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 ;
......@@ -922,6 +872,31 @@ net:atomClass_system_p a net:Atom_Class_Net ;
net:hasNaming "system" ;
net:hasStructure "SSC-01-01" .
net:atomProperty_direct_d a net:Atom_Property_Net ;
net:coverBaseNode :leaf_direct-02_d ;
net:coverNode :leaf_direct-02_d ;
net:hasNaming "direct" ;
net:hasPropertyName "direct" ;
net:hasPropertyName01 "directing" ;
net:hasPropertyName10 "direct-by" ;
net:hasPropertyName12 "direct-of" ;
net:hasPropertyType owl:ObjectProperty ;
net:hasStructure "SSC-01-01" ;
net:isCoreRoleLinked "true" .
net:atomProperty_direct_d2 a net:Atom_Property_Net ;
net:coverBaseNode :leaf_direct-02_d2 ;
net:coverNode :leaf_direct-02_d2 ;
net:hasNaming "direct" ;
net:hasPropertyName "direct" ;
net:hasPropertyName01 "directing" ;
net:hasPropertyName10 "direct-by" ;
net:hasPropertyName12 "direct-of" ;
net:hasPropertyType owl:ObjectProperty ;
net:hasStructure "SSC-01-01" ;
net:isCoreRoleLinked "true" ;
net:targetArgumentNode :value_negative .
net:class_list a owl:Class ;
rdfs:label "classList" ;
rdfs:subClassOf net:Type .
......@@ -941,6 +916,26 @@ net:objectType a owl:AnnotationProperty ;
rdfs:label "object type" ;
rdfs:subPropertyOf net:objectProperty .
net:phenomena_conjunction-AND_a a net:Phenomena_Net ;
:role_op1 net:atomClass_sun_s2 ;
:role_op2 net:atomClass_object_o ;
net:coverBaseNode :leaf_and_a ;
net:coverNode :leaf_and_a ;
net:hasNaming "conjunction-AND" ;
net:hasPhenomenaRef "and" ;
net:hasPhenomenaType :phenomena_conjunction_and ;
net:hasStructure "SSC-01-01" .
net:phenomena_conjunction-OR_o3 a net:Phenomena_Net ;
:role_op1 net:atomProperty_direct_d ;
:role_op2 net:atomProperty_direct_d2 ;
net:coverBaseNode :leaf_or_o3 ;
net:coverNode :leaf_or_o3 ;
net:hasNaming "conjunction-OR" ;
net:hasPhenomenaRef "or" ;
net:hasPhenomenaType :phenomena_conjunction_or ;
net:hasStructure "SSC-01-01" .
<http://amr.isi.edu/amr_data/SSC-01-01#a> a ns2:and ;
ns11:op1 <http://amr.isi.edu/amr_data/SSC-01-01#s2> ;
ns11:op2 <http://amr.isi.edu/amr_data/SSC-01-01#o> ;
......@@ -1028,12 +1023,6 @@ ns2:or a ns2:Concept ;
:hasLink a owl:AnnotationProperty ;
rdfs:subPropertyOf :AMR_AnnotationProperty .
:leaf_and_a a :AMR_Leaf ;
:edge_a_op1_s2 :leaf_sun_s2 ;
:edge_a_op2_o :leaf_object_o ;
:hasConcept :concept_and ;
:hasVariable :variable_a .
:leaf_bind-01_b a :AMR_Leaf ;
:edge_b_ARG0_g :leaf_gravitation_g ;
:edge_b_ARG1_s :leaf_system_s ;
......@@ -1054,12 +1043,6 @@ ns2:or a ns2:Concept ;
:hasVariable :variable_p9 ;
:isReifiedLeaf true .
:leaf_or_o3 a :AMR_Leaf ;
:edge_o3_op1_d :leaf_direct-02_d ;
:edge_o3_op2_d2 :leaf_direct-02_d2 ;
:hasConcept :concept_or ;
:hasVariable :variable_o3 .
:phenomena_conjunction a owl:Class ;
rdfs:subClassOf :AMR_Phenomena ;
:hasConceptLink "contrast-01",
......@@ -1067,11 +1050,23 @@ ns2:or a ns2:Concept ;
"neither" ;
:label "conjunction" .
:role_op1 a owl:Class ;
:phenomena_conjunction_and a owl:Class ;
rdfs:subClassOf :phenomena_conjunction ;
:hasConceptLink "and" ;
:label "conjunction-AND" .
:phenomena_conjunction_or a owl:Class ;
rdfs:subClassOf :phenomena_conjunction ;
:hasConceptLink "or" ;
:label "conjunction-OR" .
:role_op1 a owl:Class,
net:Relation ;
rdfs:subClassOf :AMR_Op_Role ;
:label "op1" .
:role_op2 a owl:Class ;
:role_op2 a owl:Class,
net:Relation ;
rdfs:subClassOf :AMR_Op_Role ;
:label "op2" .
......@@ -1083,12 +1078,29 @@ 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 .
net:Property_Net a owl:Class ;
rdfs:subClassOf net:Net .
net:Value_Net a owl:Class ;
rdfs:subClassOf net:Net .
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 ;
:role_domain net:individual_SolarSystem_p ;
net:coverBaseNode :leaf_system_s ;
......@@ -1148,9 +1160,6 @@ 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 .
......@@ -1171,10 +1180,22 @@ ns3:FrameRole a ns2:Role,
:AMR_Term_Concept a owl:Class ;
rdfs:subClassOf :AMR_Concept .
:leaf_and_a a :AMR_Leaf ;
:edge_a_op1_s2 :leaf_sun_s2 ;
:edge_a_op2_o :leaf_object_o ;
:hasConcept :concept_and ;
:hasVariable :variable_a .
:leaf_gravitation_g a :AMR_Leaf ;
:hasConcept :concept_gravitation ;
:hasVariable :variable_g .
:leaf_or_o3 a :AMR_Leaf ;
:edge_o3_op1_d :leaf_direct-02_d ;
:edge_o3_op2_d2 :leaf_direct-02_d2 ;
:hasConcept :concept_or ;
:hasVariable :variable_o3 .
:leaf_orbit-01_o2 a :AMR_Leaf ;
:edge_o2_ARG0_o :leaf_object_o ;
:edge_o2_ARG1_s2 :leaf_sun_s2 ;
......@@ -1222,6 +1243,9 @@ sys:Out_Structure a owl:Class ;
net:Atom_Class_Net a owl:Class ;
rdfs:subClassOf net:Class_Net .
net:Relation a owl:Class ;
rdfs:subClassOf net:Net_Structure .
net:netProperty a owl:AnnotationProperty ;
rdfs:label "netProperty" .
......
......@@ -125,6 +125,19 @@ def test_search_pattern_4(graph):
return pattern_set
def test_search_pattern_5(graph):
_, pattern_set = rule_5.__search_pattern(graph)
print(f'\n ----- number of selection found: {len(pattern_set)}')
for row in pattern_set:
result_str = f'>>> '
result_str += f'{row.baseLeaf.n3(graph.namespace_manager)}'
result_str += f' {row.phenomenaLabel.n3(graph.namespace_manager)}'
result_str += f' {row.relationConceptPhenomena.n3(graph.namespace_manager)}'
result_str += f' {row.relationConceptLabel.n3(graph.namespace_manager)}'
print(result_str)
return pattern_set
def test_search_structure(graph):
result_set = rule_3.__search_structure(graph)
print(f'\n ----- number of selection found: {len(result_set)}')
......@@ -165,6 +178,7 @@ if __name__ == '__main__':
print('\n -- Step 1: Search Pattern')
pattern_set = test_search_pattern_1(graph)
test_search_structure(graph)
print('\n \n')
......@@ -190,7 +204,6 @@ if __name__ == '__main__':
print('\n -- Step 1: Search Pattern')
pattern_set = test_search_pattern_3(graph)
test_search_structure(graph)
print('\n \n')
......@@ -203,7 +216,6 @@ if __name__ == '__main__':
print('\n -- Step 1: Search Pattern')
pattern_set = test_search_pattern_4(graph)
test_search_structure(graph)
print('\n \n')
......@@ -211,4 +223,16 @@ if __name__ == '__main__':
test_rule_application(graph, rule_4.extract_atom_value)
print('\n \n')
print('\n ///////////////////// Extraction Rule 5')
print('\n *** Step Test ***')
print('\n -- Step 1: Search Pattern')
pattern_set = test_search_pattern_5(graph)
print('\n \n')
print('\n *** Unit Test ***')
test_rule_application(graph, rule_5.extract_atom_phenomena)
print('\n \n')
print('\n *** - ***')
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment