Skip to content

Commit

Permalink
refactor(translating): use templates rendering
Browse files Browse the repository at this point in the history
Now instead strings formatting are using templates rendering.
Added templates for entity, relation and triplets.
  • Loading branch information
pavellos21 committed Jul 12, 2020
1 parent 6ed0ada commit 65525b7
Show file tree
Hide file tree
Showing 5 changed files with 61 additions and 52 deletions.
3 changes: 2 additions & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
bs4
requests
wptools
wptools
jinja2
18 changes: 18 additions & 0 deletions src/templates/entity.scs
Original file line number Diff line number Diff line change
@@ -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;;
10 changes: 10 additions & 0 deletions src/templates/relation.scs
Original file line number Diff line number Diff line change
@@ -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;;
2 changes: 2 additions & 0 deletions src/templates/triplets.scs
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
{% for first_entity, relation, second_entity in triplets %}{{first_entity}} => {{relation}}: {{second_entity}};;
{% endfor %}
80 changes: 29 additions & 51 deletions src/translators/JsonToScsTranslator.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import requests
import re
import os
from jinja2 import Environment, FileSystemLoader


def json_to_scs(raw_info, save_dir):
Expand All @@ -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()

0 comments on commit 65525b7

Please sign in to comment.