2020-11-04 18:02:15 +00:00
|
|
|
import argparse
|
|
|
|
import os
|
|
|
|
import shutil
|
|
|
|
import lxml.etree as lxml
|
|
|
|
|
|
|
|
from constants import *
|
|
|
|
|
|
|
|
arg_parser = argparse.ArgumentParser(description='Assign parsed Slovene strings to structures and generate lexicon.')
|
|
|
|
arg_parser.add_argument('-inlist', type=str, help='Original input list file')
|
|
|
|
arg_parser.add_argument('-intei', type=str, help='Parsed and manually edited TEI file')
|
|
|
|
arg_parser.add_argument('-outstructures', type=str, help='Output structure file')
|
|
|
|
arg_parser.add_argument('-outlexicon', type=str, help='Output lexicon file')
|
|
|
|
arguments = arg_parser.parse_args()
|
|
|
|
input_list_file_name = arguments.inlist
|
|
|
|
input_tei_file_name = arguments.intei
|
|
|
|
output_structure_file_name = arguments.outstructures
|
2020-11-10 13:07:44 +00:00
|
|
|
output_lexicon_file_name = arguments.outlexicon
|
2020-11-04 18:02:15 +00:00
|
|
|
|
|
|
|
def run_pipeline(input_list_file_name, input_tei_file_name, output_lexicon_file_name, output_structure_file_name):
|
|
|
|
shutil.rmtree(TMP_DIRECTORY, True)
|
|
|
|
os.makedirs(TMP_DIRECTORY, exist_ok=True)
|
|
|
|
shutil.copyfile(input_list_file_name, STRING_LIST_FILE_NAME)
|
|
|
|
shutil.copyfile(input_tei_file_name, TEI_INIT_FILE_NAME)
|
|
|
|
run_mwe_extraction(STRUCTURE_CURRENT_FILE_NAME, TEI_INIT_FILE_NAME, MWE_CSV_1_FILE_NAME)
|
|
|
|
run_structure_assignment(STRING_LIST_FILE_NAME, TEI_INIT_FILE_NAME, MWE_CSV_1_FILE_NAME, TEI_STRUCTURE_1_FILE_NAME)
|
|
|
|
run_structure_creation(STRUCTURE_CURRENT_FILE_NAME, TEI_STRUCTURE_1_FILE_NAME, STRUCTURE_NEW_FILE_NAME)
|
|
|
|
validate_structures(STRUCTURE_NEW_FILE_NAME)
|
|
|
|
run_mwe_extraction(STRUCTURE_NEW_FILE_NAME, TEI_INIT_FILE_NAME, MWE_CSV_2_FILE_NAME)
|
|
|
|
run_structure_assignment(STRING_LIST_FILE_NAME, TEI_INIT_FILE_NAME, MWE_CSV_2_FILE_NAME, TEI_STRUCTURE_2_FILE_NAME)
|
|
|
|
run_dictionary_conversion(TEI_STRUCTURE_2_FILE_NAME, DICTIONARY_XML_FILE_NAME)
|
|
|
|
validate_dictionary(DICTIONARY_XML_FILE_NAME)
|
|
|
|
shutil.copyfile(DICTIONARY_XML_FILE_NAME, output_lexicon_file_name)
|
|
|
|
shutil.copyfile(STRUCTURE_NEW_FILE_NAME, output_structure_file_name)
|
|
|
|
|
|
|
|
def run_mwe_extraction(structure_file_name, tei_file_name, mwe_csv_file_name):
|
|
|
|
print('Extracting MWEs from tei ...')
|
|
|
|
extraction_command = ' '.join(['python', MWE_EXTRACTION_SCRIPT_NAME, structure_file_name, tei_file_name, '--all', mwe_csv_file_name, '--skip-id-check', '--fixed-restriction-order'])
|
|
|
|
print(extraction_command)
|
|
|
|
os.system(extraction_command)
|
|
|
|
|
|
|
|
def validate_structures(structure_file_name):
|
|
|
|
print('Validating updated structure specifications ...')
|
|
|
|
xml_schema = lxml.XMLSchema(lxml.parse(STRUCTURE_SCHEMA_FILE_NAME))
|
|
|
|
xml_tree = lxml.parse(structure_file_name)
|
|
|
|
xml_schema.assertValid(xml_tree)
|
|
|
|
|
|
|
|
def run_structure_assignment(input_file_name, tei_file_name, mwe_csv_file_name, output_file_name):
|
|
|
|
print('Assigning structure ids ...')
|
|
|
|
assignment_command = ' '.join(['python', STRUCTURE_ASSIGNMENT_SCRIPT_NAME, input_file_name, tei_file_name, mwe_csv_file_name, output_file_name])
|
|
|
|
os.system(assignment_command)
|
|
|
|
|
|
|
|
def run_structure_creation(input_file_name, tei_file_name, output_file_name):
|
|
|
|
print('Creating missing structures ...')
|
|
|
|
creation_command = ' '.join(['python', STRUCTURE_CREATION_SCRIPT_NAME, '-infile', input_file_name, '-tei', tei_file_name, '-outfile', output_file_name])
|
|
|
|
os.system(creation_command)
|
|
|
|
|
|
|
|
def run_dictionary_conversion(tei_file_name, xml_file_name):
|
|
|
|
print('Converting to dictionary xml format ...')
|
|
|
|
convert_command = ' '.join(['python', TEI_DICTIONARY_SCRIPT_NAME, '-infile', tei_file_name, '-outfile', xml_file_name])
|
|
|
|
os.system(convert_command)
|
|
|
|
|
|
|
|
def validate_dictionary(dictionary_file_name):
|
|
|
|
print('Validating output dictionary file ...')
|
|
|
|
xml_schema = lxml.XMLSchema(lxml.parse(DICTIONARY_SCHEMA_FILE_NAME))
|
|
|
|
xml_tree = lxml.parse(dictionary_file_name)
|
|
|
|
xml_schema.assertValid(xml_tree)
|
|
|
|
|
|
|
|
run_pipeline(input_list_file_name, input_tei_file_name, output_lexicon_file_name, output_structure_file_name)
|