Skip to content
Snippets Groups Projects
extract_verses_by_meters.py 1.36 KiB
Newer Older
#!/usr/bin/python3
# -*- coding: utf-8 -*-

import argparse
import json
import os

import allzweckmesser as azm


def main(hypotactic_dir, top_out_dir, meters=['hexameter']):
    corpus = azm.corpus.HypotacticCorpus.from_directory(hypotactic_dir)
    for document in corpus.documents:
        doc_out_dir = os.path.join(top_out_dir, document.title)
        os.makedirs(doc_out_dir, exist_ok=True)
        for meter in meters:
            verses_for_meter = [
                azm.corpus.HypotacticLine(line).verse.to_dict()
                for line in document.get_lines_with_meter([meter])
            ]
            if verses_for_meter:
                with open(os.path.join(doc_out_dir, '{}.json'.format(meter)),
                        'w') as f:
                    json.dump(verses_for_meter, f)


def parse_args_and_main():
    d = 'Extract lines from a Hypotactic corpus'
    parser = argparse.ArgumentParser(description=d)
    parser.add_argument('--meters', '-m', nargs='+',
                        help='Meters of the lines to extract')
    parser.add_argument('hypotactic_dir',
                        help='Top level directory of the Hypotactic corpus')
    parser.add_argument('top_out_dir',
                        help='Top level directory of the created JSON files')
    args = parser.parse_args()
    main(**vars(args))


if __name__ == '__main__':
    parse_args_and_main()