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

Update AMR Rule: transduction.odrl_rule_extractor

parent 84e8fc6a
No related branches found
No related tags found
No related merge requests found
......@@ -32,14 +32,15 @@ def __get_query_code(graph, phenomena_uri, arg_relation):
clause_list = [f'?phenomena_net a [rdfs:subClassOf* net:Phenomena_Net].',
f'?phenomena_net {PHENOMENA_TYPE_RELATION} {phenomena_uri}.',
f'FILTER NOT EXISTS {{ ?phenomena_net a net:Deprecated_Net. }}',
f'?phenomena_net {arg_relation} ?action_net.']
f'?phenomena_net {arg_relation} ?action_net.',
f'?action_net a [rdfs:subClassOf* net:Action_Net].']
return generate_select_query(graph, select_data_list, clause_list)
def __search_pattern(graph, phenomena_uri):
query_code = ''
result_set = []
for arg_relation in ['amr:role_arg1', 'amr:role_arg2']:
for arg_relation in ['amr:role_ARG1', 'amr:role_ARG2']:
query_code = __get_query_code(graph, phenomena_uri, arg_relation)
result_set += graph.query(query_code)
return query_code, result_set
......@@ -54,22 +55,6 @@ def __define_naming(rule_relation):
return f'{rule_relation}'
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 __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)
......@@ -83,7 +68,7 @@ def __construct_rule_net(graph, rule_relation, phenomena_net, action_net):
# -- Data Computation
rule_net.rule_relation_name = rule_relation
rule_net.rule_action_net = action_net
rule_net.rule_action_net = action_net.uri
# -- Relation Propagation
# None
......
......@@ -72,25 +72,25 @@
- 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 (551, 0:00:00.026090)
- DEBUG - ----- fix-amr-bug-about-system-solar-planet: 0/0 new triple (551, 0:00:00.026522)
- INFO - --- *** November Transduction *** Sequence: amr-reification-sequence
- INFO - ----- reclassify-concept-1: 5/5 new triples (556, 0:00:00.155584)
- DEBUG - ----- reclassify-concept-2: 0/0 new triple (556, 0:00:00.088235)
- INFO - ----- reclassify-concept-3: 4/4 new triples (560, 0:00:00.062718)
- INFO - ----- reclassify-concept-4: 4/4 new triples (564, 0:00:00.082489)
- INFO - ----- reclassify-concept-5: 4/4 new triples (568, 0:00:00.068534)
- DEBUG - ----- reify-roles-as-concept: 0/0 new triple (568, 0:00:00.064127)
- INFO - ----- reclassify-existing-variable: 17/17 new triples (585, 0:00:00.046664)
- DEBUG - ----- add-new-variable-for-reified-concept: 0/0 new triple (585, 0:00:00.064438)
- INFO - ----- add-amr-leaf-for-reclassified-concept: 12/12 new triples (597, 0:00:00.041507)
- DEBUG - ----- add-amr-leaf-for-reified-concept: 0/0 new triple (597, 0:00:00.038529)
- INFO - ----- add-amr-edge-for-core-relation: 9/9 new triples (606, 0:00:00.110154)
- DEBUG - ----- add-amr-edge-for-reified-concept: 0/0 new triple (606, 0:00:00.078440)
- INFO - ----- add-amr-edge-for-name-relation: 5/5 new triples (611, 0:00:00.069045)
- DEBUG - ----- add-value-for-quant-relation: 0/0 new triple (611, 0:00:00.160406)
- INFO - ----- add-amr-edge-for-polarity-relation: 5/5 new triples (616, 0:00:00.077850)
- INFO - ----- update-amr-edge-role-1: 5/5 new triples (621, 0:00:00.035889)
- INFO - ----- add-amr-root: 5/5 new triples (626, 0:00:00.024260)
- INFO - ----- reclassify-concept-1: 5/5 new triples (556, 0:00:00.105608)
- DEBUG - ----- reclassify-concept-2: 0/0 new triple (556, 0:00:00.064289)
- INFO - ----- reclassify-concept-3: 4/4 new triples (560, 0:00:00.048410)
- INFO - ----- reclassify-concept-4: 4/4 new triples (564, 0:00:00.058512)
- INFO - ----- reclassify-concept-5: 4/4 new triples (568, 0:00:00.041019)
- DEBUG - ----- reify-roles-as-concept: 0/0 new triple (568, 0:00:00.043750)
- INFO - ----- reclassify-existing-variable: 17/17 new triples (585, 0:00:00.031118)
- DEBUG - ----- add-new-variable-for-reified-concept: 0/0 new triple (585, 0:00:00.042439)
- INFO - ----- add-amr-leaf-for-reclassified-concept: 12/12 new triples (597, 0:00:00.040535)
- DEBUG - ----- add-amr-leaf-for-reified-concept: 0/0 new triple (597, 0:00:00.039820)
- INFO - ----- add-amr-edge-for-core-relation: 9/9 new triples (606, 0:00:00.092282)
- DEBUG - ----- add-amr-edge-for-reified-concept: 0/0 new triple (606, 0:00:00.083474)
- INFO - ----- add-amr-edge-for-name-relation: 5/5 new triples (611, 0:00:00.080671)
- DEBUG - ----- add-value-for-quant-relation: 0/0 new triple (611, 0:00:00.079411)
- INFO - ----- add-amr-edge-for-polarity-relation: 5/5 new triples (616, 0:00:00.081605)
- INFO - ----- update-amr-edge-role-1: 5/5 new triples (621, 0:00:00.050274)
- INFO - ----- add-amr-root: 5/5 new triples (626, 0:00:00.032472)
- DEBUG - --- Serializing graph to tenet.tetras-libre.fr_demo_clara_03_preprocessing
- DEBUG - ----- step: preprocessing
- DEBUG - ----- id: https://tenet.tetras-libre.fr/demo/clara/03/
......@@ -99,47 +99,47 @@
- INFO - ----- 75 triples extracted during preprocessing step
- INFO - -- Applying extraction step: transduction
- INFO - --- *** February Transduction *** Sequence: atomic extraction sequence
- INFO - ----- extract atom classes: 12/12 new triples (638, 0:00:00.060479)
- INFO - ----- extract atom individuals: 7/7 new triples (645, 0:00:00.049196)
- INFO - ----- extract atomic properties: 13/13 new triples (658, 0:00:00.044546)
- INFO - ----- extract atom values: 10/10 new triples (668, 0:00:00.055160)
- INFO - ----- extract atom phenomena: 7/7 new triples (675, 0:00:00.050796)
- INFO - ----- propagate atom relations: 11/22 new triples (686, 0:00:00.409716)
- INFO - ----- extract atom classes: 12/12 new triples (638, 0:00:00.069749)
- INFO - ----- extract atom individuals: 7/7 new triples (645, 0:00:00.050061)
- INFO - ----- extract atomic properties: 13/13 new triples (658, 0:00:00.127397)
- INFO - ----- extract atom values: 10/10 new triples (668, 0:00:00.050948)
- INFO - ----- extract atom phenomena: 7/7 new triples (675, 0:00:00.041708)
- INFO - ----- propagate atom relations: 11/22 new triples (686, 0:00:00.311171)
- INFO - --- *** February Transduction *** Sequence: phenomena analyze sequence (1)
- DEBUG - ----- analyze "polarity" phenomena (1): 0/0 new triple (686, 0:00:00.010474)
- INFO - ----- analyze "polarity" phenomena (2): 12/14 new triples (698, 0:00:00.074936)
- DEBUG - ----- analyze modifier phenomena (mod): 0/0 new triple (698, 0:00:00.013942)
- DEBUG - ----- analyze "polarity" phenomena (1): 0/0 new triple (686, 0:00:00.009125)
- INFO - ----- analyze "polarity" phenomena (2): 12/14 new triples (698, 0:00:00.076581)
- DEBUG - ----- analyze modifier phenomena (mod): 0/0 new triple (698, 0:00:00.009838)
- INFO - --- *** February Transduction *** Sequence: phenomena analyze sequence (2)
- DEBUG - ----- analyze "or" phenomena (1): 0/0 new triple (698, 0:00:00.016933)
- DEBUG - ----- analyze "or" phenomena (2): 0/0 new triple (698, 0:00:00.015729)
- DEBUG - ----- analyze "or" phenomena (1): 0/0 new triple (698, 0:00:00.010714)
- DEBUG - ----- analyze "or" phenomena (2): 0/0 new triple (698, 0:00:00.014737)
- INFO - --- *** February Transduction *** Sequence: composite class extraction sequence
- INFO - ----- extract composite classes (1): 23/24 new triples (721, 0:00:00.125977)
- DEBUG - ----- extract composite classes (2): 0/0 new triple (721, 0:00:00.018812)
- INFO - ----- extract composite classes (1): 23/24 new triples (721, 0:00:00.126944)
- DEBUG - ----- extract composite classes (2): 0/0 new triple (721, 0:00:00.025372)
- INFO - --- *** February Transduction *** Sequence: ODRL extraction sequence
- INFO - ----- extract ODRL actions: 12/14 new triples (733, 0:00:00.085487)
- DEBUG - ----- extract ODRL rules: 0/0 new triple (733, 0:00:00.065613)
- INFO - ----- extract ODRL actions: 12/14 new triples (733, 0:00:00.093927)
- INFO - ----- extract ODRL rules: 11/11 new triples (744, 0:00:00.116949)
- DEBUG - --- Serializing graph to tenet.tetras-libre.fr_demo_clara_03_transduction
- DEBUG - ----- step: transduction
- DEBUG - ----- id: https://tenet.tetras-libre.fr/demo/clara/03/
- DEBUG - ----- work_file: /home/lamenji/Workspace/Tetras/tenet/tests/output/aos03-20230413/technical-data/tenet.tetras-libre.fr_demo_clara_03-0/tenet.tetras-libre.fr_demo_clara_03_transduction.ttl
- DEBUG - ----- base: http://https://tenet.tetras-libre.fr/demo/clara/03//transduction
- INFO - ----- 107 triples extracted during transduction step
- INFO - ----- 118 triples extracted during transduction step
- INFO - -- Applying extraction step: generation
- INFO - --- *** February Transduction *** Sequence: ODRL Rule Generation Sequence
- DEBUG - ----- generate ODRL rule: 0/0 new triple (733, 0:00:00.007352)
- INFO - ----- generate ODRL rule: 1/1 new triple (745, 0:00:00.016414)
- DEBUG - --- Serializing graph to tenet.tetras-libre.fr_demo_clara_03_generation
- DEBUG - ----- step: generation
- DEBUG - ----- id: https://tenet.tetras-libre.fr/demo/clara/03/
- DEBUG - ----- work_file: /home/lamenji/Workspace/Tetras/tenet/tests/output/aos03-20230413/technical-data/tenet.tetras-libre.fr_demo_clara_03-0/tenet.tetras-libre.fr_demo_clara_03_generation.ttl
- DEBUG - ----- base: http://https://tenet.tetras-libre.fr/demo/clara/03//generation
- INFO - ----- 0 triples extracted during generation step
- INFO - ----- 1 triples extracted during generation step
- DEBUG - --- Serializing graph to factoid file (/home/lamenji/Workspace/Tetras/tenet/tests/output/aos03-20230413/technical-data/tenet.tetras-libre.fr_demo_clara_03-0/tenet.tetras-libre.fr_demo_clara_03_factoid.ttl)
- DEBUG - ----- Number of factoids: 0
- DEBUG - ----- Number of factoids: 1
- DEBUG - ----- Graph base: http://https://tenet.tetras-libre.fr/demo/clara/03//factoid
- INFO -
=== Final Ontology Generation ===
- INFO - -- Making complete factoid graph by merging the result factoids
- INFO - ----- Total factoid number: 0
- INFO - ----- Total factoid number: 1
- INFO - -- Serializing graph to factoid string
- INFO - ----- Graph base: http://https://tenet.tetras-libre.fr/demo/clara/03//factoid
- INFO - -- Serializing graph to factoid file
......@@ -149,6 +149,6 @@
- INFO -
*** Execution Time ***
----- Function: create_ontology_from_amrld_file (tenet.main)
----- Total Time: 0:00:02.801447
----- Process Time: 0:00:02.754288
----- Total Time: 0:00:02.567053
----- Process Time: 0:00:02.538713
*** - ***
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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 = 'odrl-rule-devGraph-1'
TEST_FILE_NAME_2 = 'odrl-rule-devGraph-2'
TEST_FILE_NAME_3 = 'odrl-rule-devGraph-3'
from context import tenet
from tenet.scheme.amr_clara_rule.transduction import odrl_rule_extractor as rule_1
from tenet.scheme import amr_clara_rule as rule
from tenet.transduction import net
from tenet.transduction.rdfterm_computer import __update_uri_with_prefix
from tenet.transduction import prefix_handle
#==============================================================================
# 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 print_net_attributes(net):
print(f'\n *** Net attributes ({net.type_id}: {net.uri}) ***')
for attr in net.attr_list:
net_attr_ref = f'net.{attr}'
print(f' ----- {attr}: {eval(net_attr_ref)}')
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
graph_length = len(graph)
for triple in triple_list:
graph.add(triple)
if graph_length < len(graph):
n += 1
graph_length = len(graph)
print_triple(graph, triple, num=n)
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 Test
#==============================================================================
def test_search_pattern_1(graph, phenomena_uri):
query_code, pattern_set = rule_1.__search_pattern(graph, phenomena_uri)
print(f'\n ----- query code: {query_code}')
print(f'\n ----- number of selection found: {len(pattern_set)}')
for selection in pattern_set:
result_str = f'>>> '
result_str += f'{selection.phenomena_net.n3(graph.namespace_manager)}'
result_str += f' {selection.action_net.n3(graph.namespace_manager)}'
print(result_str)
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}')
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)
graph_2 = load_test_graph(TEST_FILE_NAME_2)
graph_3 = load_test_graph(TEST_FILE_NAME_3)
print('\n \n')
print('\n ///////////////////// Extraction Rule 1')
print('\n *** Step Test ***')
print('\n -- Step 1: Search Pattern')
for (rule_relation, phenomena_uri) in rule_1.MODALITY_TABLE:
pattern_set = test_search_pattern_1(graph_1, phenomena_uri)
print('\n \n')
print('\n *** Unit Test ***')
test_rule_application(TEST_FILE_NAME_1, graph_1, rule.extract_odrl_rule)
test_rule_application(TEST_FILE_NAME_2, graph_2, rule.extract_odrl_rule)
test_rule_application(TEST_FILE_NAME_3, graph_3, rule.extract_odrl_rule)
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