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

New AMR Rule: transduction.phenomena_mod_analyzer_1

parent 76fd49c6
Branches
Tags
No related merge requests found
Showing
with 5194 additions and 276 deletions
......@@ -12,6 +12,7 @@ from scheme.amr_rule.transduction.composite_class_extractor_1 import *
from scheme.amr_rule.transduction.composite_class_extractor_2 import *
from scheme.amr_rule.transduction.phenomena_polarity_analyzer_1 import *
from scheme.amr_rule.transduction.phenomena_mod_analyzer_1 import *
from scheme.amr_rule.transduction.phenomena_or_analyzer_1 import *
from scheme.amr_rule.transduction.phenomena_or_analyzer_2 import *
......
#!/usr/bin/python3.10
# -*-coding:Utf-8 -*
#==============================================================================
# TENET: AMR CTR at 'Net Expansion' level
#------------------------------------------------------------------------------
# Module grouping compositional transduction rule_sets (CTR) for the analysis of
# AMR structures, at 'Net Expansion' level
#==============================================================================
#==============================================================================
# Query Builder Imports
#==============================================================================
#import query_builder.construct as construct
from query_builder.builders import *
from query_builder.element.net import Net
#==============================================================================
# CTR Set (CTR as Sparql querries)
#==============================================================================
rule_set = {}
# ---------------------------------------------
# Net Expansion: Degree Phenomena Net
# ---------------------------------------------
# TODO
# -- {composite_class_net.propagate_relations()}
# -- {logical_set_net.deprecate()}
# *** Complete clauses for net construction ***
# -- {composite_class_net.complete_clauses_for_construction(class_net_0.base_node)}
......@@ -131,44 +131,3 @@ rule_set['mod-phenomena-application-4'] = {
'binding': f"""
"""
}
# ---------------------------------------------
# Net Expansion: Degree Phenomena Net
# ---------------------------------------------
# TODO
# -- {composite_class_net.propagate_relations()}
# -- {logical_set_net.deprecate()}
# *** Complete clauses for net construction ***
# -- {composite_class_net.complete_clauses_for_construction(class_net_0.base_node)}
#==============================================================================
# Development Test
#==============================================================================
if __name__ == '__main__':
print('\n' + ' *** Development Test ***')
print('\n' + ' -- Test Query')
rule = rule_set['mod-phenomena-application-3']
test_query_1 = f"""[...]
CONSTRUCT {{
{rule['construction']}
}}
WHERE {{
{rule['clause']}
{rule['binding']}
}}
"""
print(test_query_1)
print('\n' + ' *** - ***')
......@@ -95,7 +95,7 @@ def __construct_restriction_net(graph, property_net_1, property_net_2):
def __construct_composite_class_net_from_3_nets(
def __construct_composite_class_net(
graph, base_class_net, core_property_net, target_class_net):
# -- Net Composition
......@@ -151,7 +151,7 @@ def extract_composite_class_1(graph):
# print(f' *** DEVTEST *** {selection_2.class_net}')
# -- New Net Construction (from 3 nets)
new_class, triple_list = __construct_composite_class_net_from_3_nets(
new_class, triple_list = __construct_composite_class_net(
graph, class_net_0, property_net, class_net_1)
# -- Resulting List Update
......
#!/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_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_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(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_restriction_net(graph, class_net_1, class_net_2)
# composite_class_net.restriction = restriction_net.uri
# -- Net Naming
composite_class_net.naming = __define_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
#==============================================================================
# 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:
# -- Net Selection
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 (from 2 nets)
new_class, triple_list = __construct_composite_class_net(
graph, class_net_1, 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()
return rule_label, rule_triple_list
\ No newline at end of file
......@@ -121,8 +121,8 @@ old_atomic_extraction_sequence = {
# 'rule_key_list': ['nov-polarity-phenomena-application']
# }
phenomena_application_mod_sequence = {
'label': 'phenomena-application-mod-sequence',
old_phenomena_application_mod_sequence = {
'label': '(old) phenomena-application-mod-sequence',
'comment': 'Application of phenomena',
'rule_key_list': ['mod-phenomena-application-1',
'mod-phenomena-application-2',
......@@ -142,23 +142,6 @@ phenomena_application_and_sequence = {
]
}
# InProgressDev_phenomena_application_sequence = {
# 'label': 'phenomena-application-sequence',
# 'comment': 'Application of phenomena',
# 'rule_key_list': ['polarity-phenomena-application',
# 'and-conjunction-phenomena-application-1-1',
# 'and-conjunction-phenomena-application-1-2',
# 'and-conjunction-phenomena-application-2',
# 'and-conjunction-phenomena-application-3-1',
# 'and-conjunction-phenomena-application-3-2',
# 'and-conjunction-phenomena-application-3-3',
# 'and-conjunction-phenomena-application-3-4',
# 'and-conjunction-phenomena-application-4',
# 'and-conjunction-phenomena-application-5',
# 'and-conjunction-phenomena-application-6'
# ]
# }
old_composite_class_extraction_sequence_1 = {
'label': '(old) composite-class-extraction-sequence-1',
......@@ -304,7 +287,8 @@ scheme = {
atomic_extraction_sequence,
phenomena_polarity_analyze_sequence,
phenomena_or_analyze_sequence,
composite_class_extraction_sequence],
composite_class_extraction_sequence,
old_phenomena_application_mod_sequence],
# 'transduction': [transduction_refinement_sequence,
# old_atomic_extraction_sequence],
......@@ -314,7 +298,7 @@ scheme = {
# old_atomic_extraction_sequence,
# # phenomena_application_polarity_sequence,
# phenomena_polarity_analyze_sequence,
# phenomena_application_mod_sequence,
# old_phenomena_application_mod_sequence,
# phenomena_application_and_sequence,
# #rule.jan_analyze_phenomena_or_1,
# #rule.jan_analyze_phenomena_or_2,
......
- INFO - [TENET] Extraction Processing
- INFO -
=== Process Initialization ===
- INFO - -- Process Setting
- INFO - ----- Corpus source: /home/lamenji/Workspace/Tetras/tenet/tests/input/amrDocuments/dev/solar-system-03/SSC-03-01.stog.amr.ttl (amr)
- INFO - ----- Base output dir: /home/lamenji/Workspace/Tetras/tenet/tests/output/SolarSystemDev03-20230405/SolarSystemDev03_factoid.ttl
- INFO - ----- technical dir path: /home/lamenji/Workspace/Tetras/tenet/tests/output/SolarSystemDev03-20230405/technical-data/
- INFO - ----- Ontology target (id): https://tenet.tetras-libre.fr/demo/03/
- INFO - ----- Current path: /home/lamenji/Workspace/Tetras/tenet/tenet
- DEBUG - ----- Config file: /home/lamenji/Workspace/Tetras/tenet/tenet/config.xml
- DEBUG -
*** Config (Full Parameters) ***
-- Base Parameters
----- config file: /home/lamenji/Workspace/Tetras/tenet/tenet/config.xml
----- uuid: https://tenet.tetras-libre.fr/demo/03/
----- technical base name: tenet.tetras-libre.fr_demo_03
----- source corpus: /home/lamenji/Workspace/Tetras/tenet/tests/input/amrDocuments/dev/solar-system-03/SSC-03-01.stog.amr.ttl
----- target reference: base
----- process level: sentence
----- source type: amr
-- Compositional Transduction Scheme (CTS)
----- CTS reference: amr_scheme_1
-- Directories
----- base directory: ./
----- structure directory: ./structure/
----- CTS directory: ./scheme/
----- target frame directory: ./../input/targetFrameStructure/
----- input document directory:
----- base output dir: /home/lamenji/Workspace/Tetras/tenet/tests/output/SolarSystemDev03-20230405/SolarSystemDev03_factoid.ttl
----- output directory: /home/lamenji/Workspace/Tetras/tenet/tests/output/SolarSystemDev03-20230405/SolarSystemDev03_factoid.ttltenet.tetras-libre.fr_demo_03-20230405/
----- sentence output directory: /home/lamenji/Workspace/Tetras/tenet/tests/output/SolarSystemDev03-20230405/technical-data/
----- technical dir path: /home/lamenji/Workspace/Tetras/tenet/tests/output/SolarSystemDev03-20230405/technical-data/
-- Config File Definition
----- schema file: ./structure/amr-rdf-schema.ttl
----- semantic net file: ./structure/semantic-net.ttl
----- config param file: ./structure/config-parameters.ttl
----- base ontology file: ./structure/base-ontology.ttl
----- CTS file: ./scheme/amr_scheme_1.py
-- Useful References for Ontology
----- base URI: https://tenet.tetras-libre.fr/working
----- ontology suffix: -ontology.ttl
----- ontology seed suffix: -ontology-seed.ttl
-- Source File Definition
----- source sentence file: /home/lamenji/Workspace/Tetras/tenet/tests/input/amrDocuments/dev/solar-system-03/SSC-03-01.stog.amr.ttl**/*.ttl
-- Target File Definition
----- frame ontology file: ./../input/targetFrameStructure/base-ontology.ttl
----- frame ontology seed file: ./../input/targetFrameStructure/base-ontology-seed.ttl
-- Output
----- ontology namespace: https://tenet.tetras-libre.fr/base-ontology/
----- output file: /home/lamenji/Workspace/Tetras/tenet/tests/output/SolarSystemDev03-20230405/technical-data/tenet.tetras-libre.fr_demo_03.ttl
*** - ***
- INFO -
=== Extraction Processing ===
- INFO - -- Work Structure Preparation
- DEBUG - --- Graph Initialization
- DEBUG - ----- Configuration Loading
- DEBUG - -------- RDF Schema (302)
- DEBUG - -------- Semantic Net Definition (513)
- DEBUG - -------- Config Parameter Definition (547)
- DEBUG - ----- Frame Ontology Loading
- DEBUG - -------- Base Ontology produced as output (577)
- DEBUG - --- Source Data Import
- DEBUG - ----- Sentence Loading
- DEBUG - -------- /home/lamenji/Workspace/Tetras/tenet/tests/input/amrDocuments/dev/solar-system-03/SSC-03-01.stog.amr.ttl (664)
- DEBUG - --- Export work graph as turtle
- DEBUG - ----- Work graph file: /home/lamenji/Workspace/Tetras/tenet/tests/output/SolarSystemDev03-20230405/technical-data/tenet.tetras-libre.fr_demo_03-0/tenet.tetras-libre.fr_demo_03.ttl
- INFO - ----- Sentence (id): SSC-03-01
- INFO - ----- Sentence (text): Of the objects that orbit the Sun indirectly—the natural satellites—two are larger than the smallest planet, Mercury, and one more almost equals it in size.
- INFO - -- Loading Extraction Scheme (amr_scheme_1)
- DEBUG - ----- Step number: 3
- INFO - -- Loading Extraction Rules (amr_rule/*)
- DEBUG - ----- Total rule number: 87
- INFO - -- Applying extraction step: preprocessing
- INFO - --- *** November Transduction *** Sequence: amrld-correcting-sequence
- DEBUG - ----- fix-amr-bug-about-system-solar-planet: 0/0 new triple (664, 0:00:00.107008)
- INFO - --- *** November Transduction *** Sequence: amr-reification-sequence
- INFO - ----- reclassify-concept-1: 10/10 new triples (674, 0:00:00.136197)
- INFO - ----- reclassify-concept-2: 8/8 new triples (682, 0:00:00.070769)
- INFO - ----- reclassify-concept-3: 24/24 new triples (706, 0:00:00.071091)
- INFO - ----- reclassify-concept-4: 28/28 new triples (734, 0:00:00.089754)
- INFO - ----- reclassify-concept-5: 4/4 new triples (738, 0:00:00.055201)
- DEBUG - ----- reify-roles-as-concept: 0/0 new triple (738, 0:00:00.055924)
- INFO - ----- reclassify-existing-variable: 85/85 new triples (823, 0:00:00.042166)
- DEBUG - ----- add-new-variable-for-reified-concept: 0/0 new triple (823, 0:00:00.058370)
- INFO - ----- add-amr-leaf-for-reclassified-concept: 63/63 new triples (886, 0:00:00.090948)
- DEBUG - ----- add-amr-leaf-for-reified-concept: 0/0 new triple (886, 0:00:00.042447)
- INFO - ----- add-amr-edge-for-core-relation: 63/63 new triples (949, 0:00:00.188802)
- DEBUG - ----- add-amr-edge-for-reified-concept: 0/0 new triple (949, 0:00:00.088148)
- INFO - ----- add-amr-edge-for-name-relation: 5/5 new triples (954, 0:00:00.100642)
- INFO - ----- add-value-for-quant-relation: 5/5 new triples (959, 0:00:00.100277)
- INFO - ----- add-amr-edge-for-polarity-relation: 5/5 new triples (964, 0:00:00.095598)
- INFO - ----- update-amr-edge-role-1: 24/24 new triples (988, 0:00:00.144545)
- INFO - ----- add-amr-root: 5/5 new triples (993, 0:00:00.031629)
- DEBUG - --- Serializing graph to tenet.tetras-libre.fr_demo_03_preprocessing
- DEBUG - ----- step: preprocessing
- DEBUG - ----- id: https://tenet.tetras-libre.fr/demo/03/
- DEBUG - ----- work_file: /home/lamenji/Workspace/Tetras/tenet/tests/output/SolarSystemDev03-20230405/technical-data/tenet.tetras-libre.fr_demo_03-0/tenet.tetras-libre.fr_demo_03_preprocessing.ttl
- DEBUG - ----- base: http://https://tenet.tetras-libre.fr/demo/03//preprocessing
- INFO - ----- 329 triples extracted during preprocessing step
- INFO - -- Applying extraction step: transduction
- INFO - --- *** February Transduction *** Sequence: atomic extraction sequence
- INFO - ----- extract atom classes: 54/54 new triples (1047, 0:00:00.287948)
- INFO - ----- extract atom individuals: 7/7 new triples (1054, 0:00:00.059652)
- INFO - ----- extract atomic properties: 112/112 new triples (1166, 0:00:00.460629)
- INFO - ----- extract atom values: 12/12 new triples (1178, 0:00:00.066341)
- INFO - ----- extract atom phenomena: 21/21 new triples (1199, 0:00:00.122670)
- INFO - ----- propagate atom relations: 32/96 new triples (1231, 0:00:00.734644)
- INFO - --- *** February Transduction *** Sequence: phenomena polarity analyze sequence
- DEBUG - ----- analyze "polarity" phenomena: 0/0 new triple (1231, 0:00:00.009165)
- INFO - --- *** February Transduction *** Sequence: phenomena or analyze sequence
- DEBUG - ----- analyze "or" phenomena (1): 0/0 new triple (1231, 0:00:00.008954)
- DEBUG - ----- analyze "or" phenomena (2): 0/0 new triple (1231, 0:00:00.010715)
- INFO - --- *** February Transduction *** Sequence: composite class extraction sequence
- INFO - ----- extract composite classes (2): 44/44 new triples (1275, 0:00:00.213418)
- DEBUG - --- Serializing graph to tenet.tetras-libre.fr_demo_03_transduction
- DEBUG - ----- step: transduction
- DEBUG - ----- id: https://tenet.tetras-libre.fr/demo/03/
- DEBUG - ----- work_file: /home/lamenji/Workspace/Tetras/tenet/tests/output/SolarSystemDev03-20230405/technical-data/tenet.tetras-libre.fr_demo_03-0/tenet.tetras-libre.fr_demo_03_transduction.ttl
- DEBUG - ----- base: http://https://tenet.tetras-libre.fr/demo/03//transduction
- INFO - ----- 282 triples extracted during transduction step
- INFO - -- Applying extraction step: generation
- INFO - --- *** November Transduction *** Sequence: main-generation-sequence
- INFO - ----- compute-uri-for-owl-declaration-1: 7/7 new triples (1282, 0:00:00.027764)
- DEBUG - ----- compute-uri-for-owl-declaration-2: 0/0 new triple (1282, 0:00:00.022131)
- INFO - ----- compute-uri-for-owl-declaration-3: 1/1 new triple (1283, 0:00:00.033529)
- DEBUG - ----- compute-uri-for-owl-declaration-4: 0/0 new triple (1283, 0:00:00.025587)
- INFO - ----- compute-uri-for-owl-declaration-5: 9/9 new triples (1292, 0:00:00.026631)
- INFO - ----- compute-uri-for-owl-declaration-6: 9/9 new triples (1301, 0:00:00.027413)
- DEBUG - ----- compute-uri-for-owl-declaration-7: 0/0 new triple (1301, 0:00:00.020196)
- INFO - ----- generate-atom-class: 21/21 new triples (1322, 0:00:00.009501)
- DEBUG - ----- classify-atom-class-1: 0/0 new triple (1322, 0:00:00.006697)
- INFO - ----- classify-atom-class-2: 7/7 new triples (1329, 0:00:00.012751)
- INFO - ----- generate-individual: 3/3 new triples (1332, 0:00:00.008921)
- DEBUG - ----- classify-individual-1: 0/0 new triple (1332, 0:00:00.009098)
- INFO - ----- classify-individual-2: 1/1 new triple (1333, 0:00:00.010522)
- INFO - ----- generate-atom-property-1: 32/32 new triples (1365, 0:00:00.011336)
- INFO - ----- generate-atom-property-12: 32/32 new triples (1397, 0:00:00.015719)
- DEBUG - ----- generate-inverse-relation: 0/0 new triple (1397, 0:00:00.005951)
- DEBUG - ----- generate-composite-class: 0/0 new triple (1397, 0:00:00.009842)
- DEBUG - ----- add-restriction-to-class-1: 0/0 new triple (1397, 0:00:00.018000)
- DEBUG - ----- add-restriction-to-class-2: 0/0 new triple (1397, 0:00:00.017471)
- DEBUG - ----- add-restriction-to-class-3: 0/0 new triple (1397, 0:00:00.013769)
- DEBUG - ----- add-restriction-to-class-4: 0/0 new triple (1397, 0:00:00.020648)
- DEBUG - ----- add-restriction-to-class-5: 0/0 new triple (1397, 0:00:00.018896)
- DEBUG - ----- add-restriction-to-class-6: 0/0 new triple (1397, 0:00:00.012682)
- INFO - --- *** February Transduction *** Sequence: property_generation_sequence
- INFO - ----- generate OWL property: 4/40 new triples (1401, 0:00:00.322023)
- DEBUG - --- Serializing graph to tenet.tetras-libre.fr_demo_03_generation
- DEBUG - ----- step: generation
- DEBUG - ----- id: https://tenet.tetras-libre.fr/demo/03/
- DEBUG - ----- work_file: /home/lamenji/Workspace/Tetras/tenet/tests/output/SolarSystemDev03-20230405/technical-data/tenet.tetras-libre.fr_demo_03-0/tenet.tetras-libre.fr_demo_03_generation.ttl
- DEBUG - ----- base: http://https://tenet.tetras-libre.fr/demo/03//generation
- INFO - ----- 126 triples extracted during generation step
- DEBUG - --- Serializing graph to factoid file (/home/lamenji/Workspace/Tetras/tenet/tests/output/SolarSystemDev03-20230405/technical-data/tenet.tetras-libre.fr_demo_03-0/tenet.tetras-libre.fr_demo_03_factoid.ttl)
- DEBUG - ----- Number of factoids: 162
- DEBUG - ----- Graph base: http://https://tenet.tetras-libre.fr/demo/03//factoid
- INFO -
=== Final Ontology Generation ===
- INFO - -- Making complete factoid graph by merging the result factoids
- INFO - ----- Total factoid number: 162
- INFO - -- Serializing graph to factoid string
- INFO - ----- Graph base: http://https://tenet.tetras-libre.fr/demo/03//factoid
- INFO - -- Serializing graph to factoid file
- INFO - ----- Ontology Turtle File: /home/lamenji/Workspace/Tetras/tenet/tests/output/SolarSystemDev03-20230405/SolarSystemDev03_factoid.ttl
- INFO -
=== Done ===
- INFO -
*** Execution Time ***
----- Function: create_ontology_from_amrld_file (tenet.main)
----- Total Time: 0:00:04.801419
----- Process Time: 0:00:04.709030
*** - ***
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
#!/usr/bin/python3.10
# -*-coding:Utf-8 -*
#==============================================================================
# TENET: Extraction Rule Test
#------------------------------------------------------------------------------
# Script to test rules under development
#==============================================================================
import subprocess, os
from rdflib import Graph, Namespace
from rdflib.namespace import NamespaceManager, FOAF, RDF
from rdflib import URIRef, Literal, BNode
FILE_PATH = f'{os.path.dirname(os.path.abspath(__file__))}'
INPUT_DIR_PATH = f'{FILE_PATH}/test_data/'
OUTPUT_DIR_PATH = f'{FILE_PATH}/test_data/'
TEST_FILE_NAME_1 = 'mod-analyzer-devGraph-1'
TEST_FILE_NAME_2 = 'mod-analyzer-devGraph-2'
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_rule.transduction import phenomena_mod_analyzer_1 as rule_1
from tenet.scheme import amr_rule
#==============================================================================
# Useful Methods
#==============================================================================
def load_test_graph(test_file_name):
print(f'\n -- Test Graph Loading')
graph = Graph()
prefix_handle.update_graph_namespacemanager(graph)
graph_path = f'{INPUT_DIR_PATH}{test_file_name}.ttl'
graph.parse(graph_path)
print(f" ----- Graph Loaded ({len(graph)})")
return graph
def define_clause_list(composition_pattern_list):
clause_list = []
for (net_1, relation, net_2) in composition_pattern_list:
clause_list.append(f'{net_1} {relation} {net_2}.')
return clause_list
def print_triple(graph, triple, num=-1):
num_str = f'[{num}]' if num > -1 else '[-]'
(s, p, o) = triple
s = __update_uri_with_prefix(graph, s)
p = __update_uri_with_prefix(graph, p)
o = __update_uri_with_prefix(graph, o)
print(f' {num_str} {s} {p} {o}')
def add_triples_in_graph(test_file_name, graph, triple_list):
print(f'\n -- Adding triple(s) in graph')
print(f" ----- Graph length before update: {len(graph)}")
print(f" ----- Number of triples to add: {len(triple_list)}")
print(f" ----- Added triples:")
n = 0
for triple in triple_list:
n += 1
print_triple(graph, triple, num=n)
graph.add(triple)
print(f" ----- Graph length after update: {len(graph)}")
output_graph_path = f'{OUTPUT_DIR_PATH}{test_file_name}.result.ttl'
output_graph_uri = f'https://amr.tetras-libre.fr/rdf/{test_file_name}/result'
print(f'\n -- Serialize test graph to {output_graph_path}')
graph.serialize(destination=output_graph_path,
format='turtle',
base=output_graph_uri)
#==============================================================================
# Development / Step Test
#==============================================================================
def test_search_pattern_1(graph):
print('\n -- Step 1: Search Pattern')
_, pattern_set = rule_1.__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.class_net_1.n3(graph.namespace_manager)}'
result_str += f' {row.class_net_2.n3(graph.namespace_manager)}'
print(result_str)
print('\n -- Step 2: Disjoint Cover Verification')
result_set = []
return pattern_set
#==============================================================================
# Unit Test
#==============================================================================
def test_rule_application(test_file_name, graph, rule):
print('\n -- Rule Test')
rule_label, new_triple_list = rule(graph)
print(f' ----- label: {rule_label}')
print(f' ----- new_triple_list ({len(new_triple_list)}):')
add_triples_in_graph(test_file_name, graph, new_triple_list)
#==============================================================================
# Test Script
#==============================================================================
if __name__ == '__main__':
print('\n *** Test Preparation ***')
graph_1 = load_test_graph(TEST_FILE_NAME_1)
print('\n \n')
print('\n ///////////////////// Extraction Rule 1')
print('\n *** Step Test ***')
pattern_set = test_search_pattern_1(graph_1)
print('\n \n')
print('\n *** Unit Test ***')
test_rule_application(TEST_FILE_NAME_1, graph_1, rule_1.analyze_phenomena_mod_1)
print('\n \n')
print('\n *** - ***')
\ No newline at end of file
......@@ -55,7 +55,7 @@ test_data_dir = f'{INPUT_DIR_PATH}amrDocuments/'
# amrld_dir_path = f'{test_data_dir}dev/test/'
# onto_prefix = f'SimpleTest'
uuid_num = '03'
uuid_num = '02'
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}'
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment