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

New Rule to extract composite properties

parent b4eb5318
Branches
No related tags found
No related merge requests found
Showing
with 6834 additions and 2013 deletions
...@@ -36,6 +36,7 @@ from scheme.amr_master_rule.transduction.extractor.atom_relation_propagator impo ...@@ -36,6 +36,7 @@ from scheme.amr_master_rule.transduction.extractor.atom_relation_propagator impo
from scheme.amr_master_rule.transduction.extractor.composite_class_extractor_1 import * from scheme.amr_master_rule.transduction.extractor.composite_class_extractor_1 import *
from scheme.amr_master_rule.transduction.extractor.composite_class_extractor_2 import * from scheme.amr_master_rule.transduction.extractor.composite_class_extractor_2 import *
from scheme.amr_master_rule.transduction.extractor.composite_property_extractor_1 import *
from scheme.amr_master_rule.transduction.classifier.phenomena_modality_classifier import * from scheme.amr_master_rule.transduction.classifier.phenomena_modality_classifier import *
from scheme.amr_master_rule.transduction.classifier.property_class_classifier import * from scheme.amr_master_rule.transduction.classifier.property_class_classifier import *
......
#!/usr/bin/python3.10
# -*-coding:Utf-8 -*
#==============================================================================
# TENET: Rule to extract composite properties (rule 1)
#------------------------------------------------------------------------------
# Net Expansion AMR rule to extract composite properties
# Rule: property(arg1:property) => compositeProperty
#==============================================================================
from rdflib import Graph
import transduction
from transduction import net
from transduction.query_builder import generate_select_query, generate_select_distinct_query
FEATURE_CLASS_TYPE = 'base-out:Feature'
#==============================================================================
# Pattern Search: property(arg1:property)
#==============================================================================
def __search_pattern(graph):
select_data_list = ['?feature_property_net', '?target_property_net']
clause_list = ['?target_property_net a [rdfs:subClassOf* net:Property_Net].',
'FILTER NOT EXISTS {{ ?target_property_net a net:Deprecated_Net. }}',
'?feature_property_net a [rdfs:subClassOf* net:Property_Net].',
'FILTER NOT EXISTS {{ ?feature_property_net a net:Deprecated_Net. }}',
'?feature_property_net amr:role_ARG1 ?target_property_net',
'FILTER NOT EXISTS {{ ?feature_property_net amr:role_ARG0 ?other_net_0. }}',
'FILTER NOT EXISTS {{ ?feature_property_net amr:role_ARG2 ?other_net_2. }}',
'FILTER NOT EXISTS {{ ?feature_property_net amr:role_ARG3 ?other_net_3. }}']
query_code = generate_select_distinct_query(graph, select_data_list, clause_list)
result_set = graph.query(query_code)
return query_code, result_set
#==============================================================================
# Net Checking
#==============================================================================
def __verify_disjoint_cover(net_0, net_1):
check = True
for node in net_0.node:
if node in net_1.node: check = False
return check
#==============================================================================
# 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, 'Houston, we have a problem: too many naming'
naming = naming_list[0]
return naming
def __define_feature_naming(property_net):
name = __extract_naming(property_net, default='something')
return f'{name}'
def __define_composite_naming(net_1, net_2):
name_1 = __extract_naming(net_1, default='something')
name_2 = __extract_naming(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 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_feature_individual_net(graph, feature_property_net):
# -- Net Composition
individual_net = net.IndividualNet(graph)
individual_net.compose(feature_property_net)
# -- Data Computation
individual_net.class_type = FEATURE_CLASS_TYPE
# individual_net.mother_class_net = class_net.uri
# -- Net Naming
individual_name = __define_feature_naming(feature_property_net)
individual_net.naming = individual_name
individual_net.individual_label = individual_name
# -- Finalization
individual_net.finalize()
result_triple_list = individual_net.generate_triple_definition()
return individual_net, result_triple_list
def __construct_composite_property_net(graph, base_property_net, feature_class_net):
# -- Net Composition
composite_property_net = net.CompositePropertyNet(graph)
composite_property_net.compose(base_property_net, feature_class_net)
# -- Data Computation
composite_property_net.mother_property_net = base_property_net.uri
# -- Relation Propagation
__propagate_relation(composite_property_net, base_property_net)
# -- Net Naming
composite_property_net.naming = __define_composite_naming(base_property_net, feature_class_net)
# -- Finalization
composite_property_net.finalize()
result_triple_list = composite_property_net.generate_triple_definition()
return composite_property_net, result_triple_list
#==============================================================================
# Main Method
#==============================================================================
def extract_composite_property_1(graph):
# -- Rule Initialization
rule_label = 'extract composite properties (1)'
# -- Search for patterns
_, pattern_set = __search_pattern(graph)
# -- Selection Analyzing (1)
rule_triple_list = []
for pattern in pattern_set:
# -- Net Selection
feature_property_net = net.PropertyNet(graph, uri=pattern.feature_property_net)
base_property_net = net.PropertyNet(graph, uri=pattern.target_property_net)
# -- Condition: disjoint cover
if __verify_disjoint_cover(feature_property_net, base_property_net):
# -- Feature Individual Net
feature_individual_net, triple_list_1 = __construct_feature_individual_net(
graph, feature_property_net)
# -- Composite Property Net
composite_property_net, triple_list_2 = __construct_composite_property_net(
graph, base_property_net, feature_individual_net)
rule_triple_list += (triple_list_1 + triple_list_2)
# -- Deprecation
rule_triple_list += feature_property_net.deprecate()
rule_triple_list += base_property_net.deprecate()
return rule_label, rule_triple_list
\ No newline at end of file
...@@ -95,7 +95,7 @@ def __extract_naming(net, default='none'): ...@@ -95,7 +95,7 @@ def __extract_naming(net, default='none'):
naming = f'{default}' naming = f'{default}'
naming_list = net.naming naming_list = net.naming
if len(naming_list) > 0: if len(naming_list) > 0:
assert len(naming_list) == 1, f'Houston, we have a problem: too many naming' assert len(naming_list) == 1, 'Houston, we have a problem: too many naming'
naming = naming_list[0] naming = naming_list[0]
return naming return naming
......
...@@ -47,7 +47,7 @@ def __extract_naming(net, default='none'): ...@@ -47,7 +47,7 @@ def __extract_naming(net, default='none'):
naming = f'{default}' naming = f'{default}'
naming_list = net.naming naming_list = net.naming
if len(naming_list) > 0: if len(naming_list) > 0:
assert len(naming_list) == 1, f'Houston, we have a problem: too many naming' assert len(naming_list) == 1, 'Houston, we have a problem: too many naming'
naming = naming_list[0] naming = naming_list[0]
return naming return naming
......
...@@ -110,6 +110,9 @@ composite_class_extraction_sequence = ['composite class extraction sequence', ...@@ -110,6 +110,9 @@ composite_class_extraction_sequence = ['composite class extraction sequence',
rule.extract_composite_class_1, rule.extract_composite_class_1,
rule.extract_composite_class_2] rule.extract_composite_class_2]
composite_property_extraction_sequence = ['composite property extraction sequence',
rule.extract_composite_property_1]
classification_sequence_2 = ['classification sequence (2)', classification_sequence_2 = ['classification sequence (2)',
rule.classify_entity_from_core_arguments, rule.classify_entity_from_core_arguments,
rule.classify_entity_from_part_relation, rule.classify_entity_from_part_relation,
...@@ -155,6 +158,7 @@ scheme = { ...@@ -155,6 +158,7 @@ scheme = {
classification_sequence_1, classification_sequence_1,
phenomena_analyze_sequence_1, phenomena_analyze_sequence_1,
phenomena_analyze_sequence_2, phenomena_analyze_sequence_2,
composite_property_extraction_sequence,
composite_class_extraction_sequence, composite_class_extraction_sequence,
classification_sequence_2, classification_sequence_2,
specif_pattern_analyze_sequence, specif_pattern_analyze_sequence,
......
@base <https://amr.tetras-libre.fr/rdf/composite-extraction-devGraph-1/result> .
@prefix : <https://amr.tetras-libre.fr/rdf/schema#> . @prefix : <https://amr.tetras-libre.fr/rdf/schema#> .
@prefix cprm: <https://tenet.tetras-libre.fr/config/parameters#> . @prefix cprm: <https://tenet.tetras-libre.fr/config/parameters#> .
@prefix net: <https://tenet.tetras-libre.fr/semantic-net#> . @prefix net: <https://tenet.tetras-libre.fr/semantic-net#> .
......
...@@ -1019,7 +1019,6 @@ net:Individual_Net a owl:Class ; ...@@ -1019,7 +1019,6 @@ net:Individual_Net a owl:Class ;
net:atomClass_almost_a2 a net:Atom_Class_Net ; net:atomClass_almost_a2 a net:Atom_Class_Net ;
net:coverBaseNode :leaf_almost_a2 ; net:coverBaseNode :leaf_almost_a2 ;
net:coverNode :leaf_almost_a2 ; net:coverNode :leaf_almost_a2 ;
net:coverNodeCount 1 ;
net:hasClassName "almost" ; net:hasClassName "almost" ;
net:hasNaming "almost" ; net:hasNaming "almost" ;
net:hasStructure "SSC-03-01" . net:hasStructure "SSC-03-01" .
...@@ -1027,7 +1026,6 @@ net:atomClass_almost_a2 a net:Atom_Class_Net ; ...@@ -1027,7 +1026,6 @@ net:atomClass_almost_a2 a net:Atom_Class_Net ;
net:atomClass_large_l a net:Atom_Class_Net ; net:atomClass_large_l a net:Atom_Class_Net ;
net:coverBaseNode :leaf_large_l ; net:coverBaseNode :leaf_large_l ;
net:coverNode :leaf_large_l ; net:coverNode :leaf_large_l ;
net:coverNodeCount 1 ;
net:hasClassName "large" ; net:hasClassName "large" ;
net:hasNaming "large" ; net:hasNaming "large" ;
net:hasStructure "SSC-03-01" . net:hasStructure "SSC-03-01" .
...@@ -1035,7 +1033,6 @@ net:atomClass_large_l a net:Atom_Class_Net ; ...@@ -1035,7 +1033,6 @@ net:atomClass_large_l a net:Atom_Class_Net ;
net:atomClass_size_s4 a net:Atom_Class_Net ; net:atomClass_size_s4 a net:Atom_Class_Net ;
net:coverBaseNode :leaf_size_s4 ; net:coverBaseNode :leaf_size_s4 ;
net:coverNode :leaf_size_s4 ; net:coverNode :leaf_size_s4 ;
net:coverNodeCount 1 ;
net:hasClassName "size" ; net:hasClassName "size" ;
net:hasNaming "size" ; net:hasNaming "size" ;
net:hasStructure "SSC-03-01" . net:hasStructure "SSC-03-01" .
...@@ -1043,7 +1040,6 @@ net:atomClass_size_s4 a net:Atom_Class_Net ; ...@@ -1043,7 +1040,6 @@ net:atomClass_size_s4 a net:Atom_Class_Net ;
net:atomClass_small_s3 a net:Atom_Class_Net ; net:atomClass_small_s3 a net:Atom_Class_Net ;
net:coverBaseNode :leaf_small_s3 ; net:coverBaseNode :leaf_small_s3 ;
net:coverNode :leaf_small_s3 ; net:coverNode :leaf_small_s3 ;
net:coverNodeCount 1 ;
net:hasClassName "small" ; net:hasClassName "small" ;
net:hasNaming "small" ; net:hasNaming "small" ;
net:hasStructure "SSC-03-01" . net:hasStructure "SSC-03-01" .
...@@ -1051,7 +1047,6 @@ net:atomClass_small_s3 a net:Atom_Class_Net ; ...@@ -1051,7 +1047,6 @@ net:atomClass_small_s3 a net:Atom_Class_Net ;
net:atomClass_sun_s a net:Atom_Class_Net ; net:atomClass_sun_s a net:Atom_Class_Net ;
net:coverBaseNode :leaf_sun_s ; net:coverBaseNode :leaf_sun_s ;
net:coverNode :leaf_sun_s ; net:coverNode :leaf_sun_s ;
net:coverNodeCount 1 ;
net:hasClassName "sun" ; net:hasClassName "sun" ;
net:hasNaming "sun" ; net:hasNaming "sun" ;
net:hasStructure "SSC-03-01" . net:hasStructure "SSC-03-01" .
...@@ -1329,7 +1324,6 @@ net:Property_Net a owl:Class ; ...@@ -1329,7 +1324,6 @@ net:Property_Net a owl:Class ;
net:atomClass_object_o a net:Atom_Class_Net ; net:atomClass_object_o a net:Atom_Class_Net ;
net:coverBaseNode :leaf_object_o ; net:coverBaseNode :leaf_object_o ;
net:coverNode :leaf_object_o ; net:coverNode :leaf_object_o ;
net:coverNodeCount 1 ;
net:hasClassName "object" ; net:hasClassName "object" ;
net:hasNaming "object" ; net:hasNaming "object" ;
net:hasStructure "SSC-03-01" . net:hasStructure "SSC-03-01" .
...@@ -1337,7 +1331,6 @@ net:atomClass_object_o a net:Atom_Class_Net ; ...@@ -1337,7 +1331,6 @@ net:atomClass_object_o a net:Atom_Class_Net ;
net:atomClass_satellite_s2 a net:Atom_Class_Net ; net:atomClass_satellite_s2 a net:Atom_Class_Net ;
net:coverBaseNode :leaf_satellite_s2 ; net:coverBaseNode :leaf_satellite_s2 ;
net:coverNode :leaf_satellite_s2 ; net:coverNode :leaf_satellite_s2 ;
net:coverNodeCount 1 ;
net:hasClassName "satellite" ; net:hasClassName "satellite" ;
net:hasNaming "satellite" ; net:hasNaming "satellite" ;
net:hasStructure "SSC-03-01" . net:hasStructure "SSC-03-01" .
...@@ -1439,7 +1432,6 @@ net:Value_Net a owl:Class ; ...@@ -1439,7 +1432,6 @@ net:Value_Net a owl:Class ;
net:atomClass_object_o2 a net:Atom_Class_Net ; net:atomClass_object_o2 a net:Atom_Class_Net ;
net:coverBaseNode :leaf_object_o2 ; net:coverBaseNode :leaf_object_o2 ;
net:coverNode :leaf_object_o2 ; net:coverNode :leaf_object_o2 ;
net:coverNodeCount 1 ;
net:hasClassName "object" ; net:hasClassName "object" ;
net:hasNaming "object" ; net:hasNaming "object" ;
net:hasStructure "SSC-03-01" . net:hasStructure "SSC-03-01" .
...@@ -1496,7 +1488,6 @@ net:list a owl:Class ; ...@@ -1496,7 +1488,6 @@ net:list a owl:Class ;
net:atomClass_planet_p a net:Atom_Class_Net ; net:atomClass_planet_p a net:Atom_Class_Net ;
net:coverBaseNode :leaf_planet_p ; net:coverBaseNode :leaf_planet_p ;
net:coverNode :leaf_planet_p ; net:coverNode :leaf_planet_p ;
net:coverNodeCount 1 ;
net:hasClassName "planet" ; net:hasClassName "planet" ;
net:hasNaming "planet" ; net:hasNaming "planet" ;
net:hasStructure "SSC-03-01" . net:hasStructure "SSC-03-01" .
......
This diff is collapsed.
This diff is collapsed.
...@@ -17,6 +17,7 @@ INPUT_DIR_PATH = f'{FILE_PATH}/test_data/' ...@@ -17,6 +17,7 @@ INPUT_DIR_PATH = f'{FILE_PATH}/test_data/'
OUTPUT_DIR_PATH = f'{FILE_PATH}/test_data/' OUTPUT_DIR_PATH = f'{FILE_PATH}/test_data/'
TEST_FILE_NAME_1 = 'composite-extraction-devGraph-1' TEST_FILE_NAME_1 = 'composite-extraction-devGraph-1'
TEST_FILE_NAME_2 = 'composite-extraction-devGraph-2'
TEST_FILE_NAME_3 = 'composite-extraction-devGraph-3' TEST_FILE_NAME_3 = 'composite-extraction-devGraph-3'
from context import tenet from context import tenet
...@@ -25,6 +26,7 @@ from tenet.transduction import rdfterm_computer, prefix_handle ...@@ -25,6 +26,7 @@ from tenet.transduction import rdfterm_computer, prefix_handle
from tenet.transduction import net from tenet.transduction import net
from tenet.scheme.amr_master_rule.transduction.extractor import composite_class_extractor_1 as rule_1 from tenet.scheme.amr_master_rule.transduction.extractor import composite_class_extractor_1 as rule_1
from tenet.scheme.amr_master_rule.transduction.extractor import composite_class_extractor_2 as rule_2 from tenet.scheme.amr_master_rule.transduction.extractor import composite_class_extractor_2 as rule_2
from tenet.scheme.amr_master_rule.transduction.extractor import composite_property_extractor_1 as rule_3
from tenet.scheme import amr_master_rule as amr_rule from tenet.scheme import amr_master_rule as amr_rule
...@@ -125,6 +127,18 @@ def test_search_pattern_2(graph): ...@@ -125,6 +127,18 @@ def test_search_pattern_2(graph):
return pattern_set return pattern_set
def test_search_pattern_3(graph):
print('\n -- Step 1: Search Pattern')
_, pattern_set = rule_3.__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.feature_property_net.n3(graph.namespace_manager)}'
result_str += f' {row.target_property_net.n3(graph.namespace_manager)}'
print(result_str)
return pattern_set
#============================================================================== #==============================================================================
# Unit Test # Unit Test
...@@ -148,6 +162,7 @@ if __name__ == '__main__': ...@@ -148,6 +162,7 @@ if __name__ == '__main__':
print('\n *** Test Preparation ***') print('\n *** Test Preparation ***')
graph_1 = load_test_graph(TEST_FILE_NAME_1) 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) graph_3 = load_test_graph(TEST_FILE_NAME_3)
print('\n \n') print('\n \n')
...@@ -164,11 +179,21 @@ if __name__ == '__main__': ...@@ -164,11 +179,21 @@ if __name__ == '__main__':
print('\n ///////////////////// Extraction Rule 2') print('\n ///////////////////// Extraction Rule 2')
print('\n *** Step Test ***') print('\n *** Step Test ***')
pattern_set = test_search_pattern_2(graph_3) pattern_set = test_search_pattern_2(graph_2)
print('\n \n')
print('\n *** Unit Test ***')
test_rule_application(TEST_FILE_NAME_2, graph_2, rule_2.extract_composite_class_2)
print('\n \n')
print('\n ///////////////////// Extraction Rule 3')
print('\n *** Step Test ***')
pattern_set = test_search_pattern_3(graph_3)
print('\n \n') print('\n \n')
print('\n *** Unit Test ***') print('\n *** Unit Test ***')
test_rule_application(TEST_FILE_NAME_3, graph_3, rule_2.extract_composite_class_2) test_rule_application(TEST_FILE_NAME_3, graph_3, rule_3.extract_composite_property_1)
print('\n \n') print('\n \n')
print('\n *** - ***') print('\n *** - ***')
\ No newline at end of file
...@@ -17,6 +17,7 @@ INPUT_DIR_PATH = f'{FILE_PATH}/test_data/' ...@@ -17,6 +17,7 @@ INPUT_DIR_PATH = f'{FILE_PATH}/test_data/'
OUTPUT_DIR_PATH = f'{FILE_PATH}/test_data/' OUTPUT_DIR_PATH = f'{FILE_PATH}/test_data/'
TEST_FILE_NAME_1 = 'specific-devGraph-1' TEST_FILE_NAME_1 = 'specific-devGraph-1'
TEST_FILE_NAME_2 = 'specific-devGraph-2'
from context import tenet from context import tenet
from tenet.scheme.amr_master_rule.transduction.specific_analyzer import ( from tenet.scheme.amr_master_rule.transduction.specific_analyzer import (
...@@ -157,6 +158,7 @@ if __name__ == '__main__': ...@@ -157,6 +158,7 @@ if __name__ == '__main__':
print('\n *** Test Preparation ***') print('\n *** Test Preparation ***')
graph_1 = load_test_graph(TEST_FILE_NAME_1) graph_1 = load_test_graph(TEST_FILE_NAME_1)
graph_2 = load_test_graph(TEST_FILE_NAME_2)
print('\n \n') print('\n \n')
print('\n ///////////////////// Extraction Rule 1') print('\n ///////////////////// Extraction Rule 1')
...@@ -165,26 +167,31 @@ if __name__ == '__main__': ...@@ -165,26 +167,31 @@ if __name__ == '__main__':
print('\n -- Step 1: Search Pattern') print('\n -- Step 1: Search Pattern')
pattern_set = test_search_pattern_1(graph_1) pattern_set = test_search_pattern_1(graph_1)
pattern_set = test_search_pattern_1(graph_2)
print('\n \n') print('\n \n')
print('\n -- Step 2: Degree91 Feature Handle') print('\n -- Step 2: Degree91 Feature Handle')
degree_net_uri = 'https://tenet.tetras-libre.fr/semantic-net#phenomena_degree_h' degree_net_uri = 'https://tenet.tetras-libre.fr/semantic-net#phenomena_degree_h'
pattern_set = test_search_degree_feature(graph_1, degree_net_uri) pattern_set = test_search_degree_feature(graph_1, degree_net_uri)
pattern_set = test_search_degree_feature(graph_2, degree_net_uri)
print('\n \n') print('\n \n')
print('\n -- Step 3: Search for target class net (remain ARG1)') print('\n -- Step 3: Search for target class net (remain ARG1)')
remain_net_uri = 'https://tenet.tetras-libre.fr/semantic-net#atomProperty_remain_r' remain_net_uri = 'https://tenet.tetras-libre.fr/semantic-net#atomProperty_remain_r'
pattern_set = test_search_remain_arg1(graph_1, remain_net_uri) pattern_set = test_search_remain_arg1(graph_1, remain_net_uri)
pattern_set = test_search_remain_arg1(graph_2, remain_net_uri)
print('\n \n') print('\n \n')
print('\n -- Step 4: Superlative Handle (ARG5)') print('\n -- Step 4: Superlative Handle (ARG5)')
degree_net_uri = 'https://tenet.tetras-libre.fr/semantic-net#phenomena_degree_h' degree_net_uri = 'https://tenet.tetras-libre.fr/semantic-net#phenomena_degree_h'
pattern_set = test_search_degree_arg5(graph_1, degree_net_uri) pattern_set = test_search_degree_arg5(graph_1, degree_net_uri)
pattern_set = test_search_degree_arg5(graph_2, degree_net_uri)
print('\n \n') print('\n \n')
print('\n *** Unit Test ***') print('\n *** Unit Test ***')
test_rule_application(TEST_FILE_NAME_1, graph_1, rule_1.analyze_specific_pattern_1) test_rule_application(TEST_FILE_NAME_1, graph_1, rule_1.analyze_specific_pattern_1)
test_rule_application(TEST_FILE_NAME_2, graph_2, rule_1.analyze_specific_pattern_1)
print('\n \n') print('\n \n')
print('\n *** - ***') print('\n *** - ***')
\ No newline at end of file
...@@ -56,7 +56,7 @@ test_data_dir = f'{INPUT_DIR_PATH}amrDocuments/' ...@@ -56,7 +56,7 @@ test_data_dir = f'{INPUT_DIR_PATH}amrDocuments/'
# onto_prefix = f'SimpleTest' # onto_prefix = f'SimpleTest'
# base_output_name = f'SimpleTest' # base_output_name = f'SimpleTest'
uuid_num = '01' uuid_num = '02'
amrld_dir_path = f'{test_data_dir}dev/solar-system-{uuid_num}/' 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' amrld_file_path = f'{amrld_dir_path}SSC-{uuid_num}-01.stog.amr.ttl'
base_output_name = f'SolarSystemDev{uuid_num}' 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