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

from typing import List
Victor Zimmermann's avatar
Victor Zimmermann committed
import os
import numpy as np
Victor Zimmermann's avatar
Victor Zimmermann committed
import json
Victor Zimmermann's avatar
Victor Zimmermann committed
def check_format(json_file):
    if os.path.exists(json_file):
        with open(json_file,'r') as jf:
            return json.loads(jf.read())
    elif type(json_file)=str:
        return json.loads(json_file)
    elif type(json_file)=dict:
        return json_file
    else:
        raise TypeError('Input not convertible.')

class Verse:
    
    self.readings = list()
    self.author = None
    self.work = None
    self.place = None
    
Victor Zimmermann's avatar
Victor Zimmermann committed
    def __init__(self, verse:str):
        self.from_verse(verse)
Victor Zimmermann's avatar
Victor Zimmermann committed
    def from_verse(verse):
        self.text = verse
        pass
Victor Zimmermann's avatar
Victor Zimmermann committed
    def from_json(json_file):
        raw = check_format(json_file)
Victor Zimmermann's avatar
Victor Zimmermann committed
        self.text = raw['verse']
        self.author = raw['source']['author']
        self.work = raw['source']['work']
        self.place = raw['source']['place']
Victor Zimmermann's avatar
Victor Zimmermann committed
        for reading in raw['readings']:
            self.readings.append(Reading.from_json(reading))
            
Victor Zimmermann's avatar
Victor Zimmermann committed
    def to_json():
        pass
            
class Reading:
    
    self.tokens = list()
    
    def __init__(self, tokens:List[Token]):
        self.tokens = tokens
Victor Zimmermann's avatar
Victor Zimmermann committed
        
    def from_json(json_file):
        raw = check_format(json_file)
        for token in raw["tokens"]:
            self.tokens.append(Token.from_json(token))
Victor Zimmermann's avatar
Victor Zimmermann committed

    def to_json():
        pass
    
Victor Zimmermann's avatar
Victor Zimmermann committed
    self.syllables = list()
    
    def __init__(self, token:str, span:List[int],
                 syllables:List[Syllable]=list):
        if len(token) != span[1]-span[0]:
            raise ValueError('Token length does not match token span.')
        else:
            self.text = token
            self.span = span
            self.syllables = syllables

Victor Zimmermann's avatar
Victor Zimmermann committed
    def from_json(json_file):
        raw = check_format(json_file)
        
        self.span = raw['span']
        self.text = raw['token']
        
        for syllable in raw['syllables']:
            self.syllables.append(Syllable.from_json(syllable))
Victor Zimmermann's avatar
Victor Zimmermann committed
    def to_json():
        pass


class Syllable:

Victor Zimmermann's avatar
Victor Zimmermann committed
    self.phenomena = dict()

    def __init__(self, syllable:str,
                 span:List[int], idx:int,
                 syllable_length:int, vowel_length:int,
                 phenomena:dict=dict()):
        if len(syllable) != span[1]-span[0]:
            raise ValueError('Syllable length does not match syllable span.')
        else:
            self.text = syllable
            self.span = span
            self.id = idx
            self.syllable_length = syllable_length
            self.vowel_length = vowel_length
            self.phenomena = phenomena
            
Victor Zimmermann's avatar
Victor Zimmermann committed
    def from_json(json_file):
        raw = check_format(json_file)
        
        self.id = raw['id']
        self.span = raw['span']
        self.text = raw['syllable']
        self.syllable_length = raw['syllable_length']
        self.vowel_length = raw['vowel_length']
        if raw['phenomena']:
            for phenomenon in raw['phenomena']:
                self.phenomena.append(Syllable.from_json(syllable))
Victor Zimmermann's avatar
Victor Zimmermann committed

    def to_json():
        pass
 
        
class Phenomenon:
    
Victor Zimmermann's avatar
Victor Zimmermann committed
    def __init__(self, name:str, caused_by=None, overruled_by=None,
                 chars=None, typus=None, omitted=None):
        self.name = name
        self.caused_by = caused_by
        self.overruled_by = overruled_by
Victor Zimmermann's avatar
Victor Zimmermann committed
        
        self.chars = chars
        self.typus = typus
        self.omitted = omitted
Victor Zimmermann's avatar
Victor Zimmermann committed
    def positional_lengthening(self, chars:str, caused_by=None, overruled_by=None):
        self.__init__(self, 'positional lengthening', caused_by, overruled_by)
        self.chars = chars
        
Victor Zimmermann's avatar
Victor Zimmermann committed
    def iambic_shortening(self, typus:str, caused_by=None, overruled_by=None):
        self.__init__(self, 'iambic shortening', caused_by, overruled_by)
        self.typus = typus
        
Victor Zimmermann's avatar
Victor Zimmermann committed
    def s_elision(self, caused_by=None, overruled_by=None):
        self.__init__(self, 's-elision', caused_by, overruled_by)
        self.omitted = 's'
Victor Zimmermann's avatar
Victor Zimmermann committed
    def verse_end(self, caused_by=None, overruled_by=None):
        self.__init__(self,'verse end', caused_by, overruled_by)
Victor Zimmermann's avatar
Victor Zimmermann committed

    def from_json(json_file):
        raw = check_format(json_file)
        pass

    def to_json(self):
        pass


class MultisyllablePhenomenon(Phenomenon):
    
Victor Zimmermann's avatar
Victor Zimmermann committed
    def __init__(self, name:str, beginning:int, end:int,
                 caused_by=None, overruled_by=None):
        Phenomenon.__init__(self, name, caused_by=None, overruled_by=None)
        self.beginning = beginning
        self.end = end
      
Victor Zimmermann's avatar
Victor Zimmermann committed
    def apheresis(self, beginning, end, caused_by=None, overruled_by=None):
        MultisyllablePhenomenon.__init__(self, 'apheresis', beginning, end,
                                         caused_by, overruled_by)
Victor Zimmermann's avatar
Victor Zimmermann committed
    def synizesis(self, beginning, end, caused_by=None, overruled_by=None):
        MultisyllablePhenomenon.__init__(self, 'synizesis', beginning, end,
                                         caused_by, overruled_by)
Victor Zimmermann's avatar
Victor Zimmermann committed
    def from_json(json_file):
        raw = check_format(json_file)
        pass

    def to_json(self):
        pass