diff --git a/requirements.txt b/requirements.txt index 1d1caf4..c767705 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ bs4 requests -wptools \ No newline at end of file +wptools +jinja2 \ No newline at end of file diff --git a/src/templates/entity.scs b/src/templates/entity.scs new file mode 100644 index 0000000..6056ae7 --- /dev/null +++ b/src/templates/entity.scs @@ -0,0 +1,18 @@ +{{identifier}} +=> nrel_main_idtf:{% for lang, label in labels %} + [{{label}}] (* <- lang_{{lang}};; *);{% endfor %} +<- rrel_key_sc_element: ... + (* + <- sc_definition;; + <= nrel_sc_text_translation:{% for lang, description in descriptions %} + ... (* -> rrel_example: [{{description}}] (* <-lang_{{lang}};; *);; *);{% endfor %}; + *); +{% if img_name %}<- rrel_key_sc_element: ... + (* + <-sc_illustration;; + <=nrel_sc_text_translation: ... + (* + -> rrel_example: "file://images/{{img_name}}" (* => nrel_format: format_{{img_format}};; *);; + *);; + *);{% endif %} +<-sc_node_not_relation;; \ No newline at end of file diff --git a/src/templates/relation.scs b/src/templates/relation.scs new file mode 100644 index 0000000..ded267a --- /dev/null +++ b/src/templates/relation.scs @@ -0,0 +1,10 @@ +{{identifier}} +=> nrel_main_idtf:{% for lang, label in labels %} + [{{label}}] (* <- lang_{{lang}};; *);{% endfor %} +<- rrel_key_sc_element: ... + (* + <- sc_definition;; + <= nrel_sc_text_translation:{% for lang, description in descriptions %} + ... (* -> rrel_example: [{{description}}] (* <-lang_{{lang}};; *);; *);{% endfor %}; + *); +<-sc_node_norole_relation;; \ No newline at end of file diff --git a/src/templates/triplets.scs b/src/templates/triplets.scs new file mode 100644 index 0000000..424203f --- /dev/null +++ b/src/templates/triplets.scs @@ -0,0 +1,2 @@ +{% for first_entity, relation, second_entity in triplets %}{{first_entity}} => {{relation}}: {{second_entity}};; +{% endfor %} \ No newline at end of file diff --git a/src/translators/JsonToScsTranslator.py b/src/translators/JsonToScsTranslator.py index df7ee3a..bba4fa4 100644 --- a/src/translators/JsonToScsTranslator.py +++ b/src/translators/JsonToScsTranslator.py @@ -2,6 +2,7 @@ import requests import re import os +from jinja2 import Environment, FileSystemLoader def json_to_scs(raw_info, save_dir): @@ -14,75 +15,52 @@ def json_to_scs(raw_info, save_dir): os.mkdir('images') except FileExistsError: pass + info = json.loads(raw_info) + jinja_env = Environment(loader=FileSystemLoader(os.path.realpath( + '{}/../templates'.format(os.path.dirname(os.path.realpath(__file__)))))) + template = jinja_env.get_template('entity.scs') for ent in info['entities'].values(): - try: - translate_entity(ent) - except Exception: - continue + translate_entity(ent, template) + template = jinja_env.get_template('relation.scs') for rlt in info['relations'].values(): - try: - translate_relation(rlt) - except Exception: - continue + translate_relation(rlt, template) - for triplet in info['triplets']: + template = jinja_env.get_template('triplets.scs') + if len(info['triplets']) != 0: scs = open('triplets.scs', 'at', encoding='utf-8') - scs.write('{} => {}: {};;\n'.format( - triplet[0], triplet[1], triplet[2])) + scs.write(template.render(triplets=info['triplets'])) scs.close() -def translate_entity(ent): - scs = open('{}.scs'.format(ent['identifier']), 'wt', encoding='utf-8') - scs.write(ent['identifier']+'\n') - scs.write('=> nrel_main_idtf:\n') - for lang, label in ent['label'].items(): - scs.write('\t[{}] (* <- lang_{};; *);\n'.format(label, lang)) - scs.write( - '<- rrel_key_sc_element: ...\n(*\n\t<- sc_definition;;\n\t<= nrel_sc_text_translation:') - for lang, description in ent['description'].items(): - scs.write( - '\n\t\t... (* -> rrel_example: [{}] (* <-lang_{};; *);; *);'.format(description, lang)) - scs.write(';\n*);\n') - - try: - image_url = ent['image_url'] - image_format = re.findall(r'\.\w*$', image_url)[0] - image_format = image_format[1:] +def translate_entity(entity, template): + if 'image_url' in entity: + image_url = entity['image_url'] + image_format = re.findall(r'\.\w*$', image_url)[0][1:] + image_name = '{}_image.{}'.format(entity['identifier'], image_format) image = requests.get(image_url) os.chdir('images') image_file = open('{}_image.{}'.format( - ent['identifier'], image_format), 'wb') + entity['identifier'], image_format), 'wb') image_file.write(image.content) image_file.close() os.chdir('..') - scs.write( - '<- rrel_key_sc_element: ...\n(*\n\t<-sc_illustration;;\n\t<=nrel_sc_text_translation: ...\n') - scs.write('\t(*\n\t\t-> rrel_example: "file://images/{}_image.{}"'.format( - ent['identifier'], image_format)) - scs.write( - ' (* => nrel_format: format_{};; *);;\n\t*);;\n*);\n'.format(image_format)) - except KeyError: - pass - scs.write('<-sc_node_not_relation;;') + rendered_tmpl = template.render(identifier=entity['identifier'], labels=entity['label'].items( + ), descriptions=entity['description'].items(), img_name=image_name, img_format=image_format) + else: + rendered_tmpl = template.render(identifier=entity['identifier'], labels=entity['label'].items( + ), descriptions=entity['description'].items()) + + scs = open('{}.scs'.format(entity['identifier']), 'wt', encoding='utf-8') + scs.write(rendered_tmpl) scs.close() -def translate_relation(rlt): - scs = open('{}.scs'.format(rlt['identifier']), 'wt', encoding='utf-8') - scs.write(rlt['identifier']+'\n') - scs.write('=> nrel_main_idtf:\n') - for lang, label in rlt['label'].items(): - scs.write('\t[{}] (* <- lang_{};; *);\n'.format(label, lang)) - scs.write( - '<- rrel_key_sc_element: ...\n(*\n\t<- sc_definition;;\n\t<= nrel_sc_text_translation:') - for lang, description in rlt['description'].items(): - scs.write( - '\n\t\t... (* -> rrel_example: [{}] (* <-lang_{};; *);; *);'.format(description, lang)) - scs.write(';\n*);\n') - scs.write('<-sc_node_norole_relation;;') +def translate_relation(relation, template): + scs = open('{}.scs'.format(relation['identifier']), 'wt', encoding='utf-8') + scs.write(template.render(identifier=relation['identifier'], labels=relation['label'].items( + ), descriptions=relation['description'].items())) scs.close()