Ejemplo n.º 1
0
    def setup( az):
        d2sykr = dictOrder()
        d2vse  = dictOrder()
        for a in az.dejnosti.strip().split( '\n'):
            xx = a.split()
            if not xx: continue
            k = xx[0]
            podrazb = k[0] == '*'
            k = k.replace('*', '')
            if podrazb:
                az.dejnost_podrazbirane = k

            dd = []
            sykr = []
            sykr_avto = []
            for v in xx:
                v = v.lstrip('*')
                if v[0]=='.': appendif( sykr, v[1:] )
                v = v.lstrip('.')
                if '*' in v:
                    l,r = v.split('*')
                    vv = [ l+r[:i] for i in range( len(r))]
                    extendif( dd, vv)
                    extendif( sykr_avto, vv)
                appendif( dd, v.replace('*',''))

            d2vse[ k] = dd
            dd += [ v.replace('-',' ') for v in dd if '-' in v ]
            dd += [ cyr2lat( v) for v in dd ]
            extendif( sykr, sorted( sykr_avto, key= len))
            if sykr: d2sykr[k] = sykr
        az.dejnosti = d2vse
        az.dejnosti4vse = dict_lower( (v,k)
                for k,vv in d2vse.items()
                for v in vv
                )
        az.dejnosti4vse.update( (k,k) for k in d2vse )

        az.dejnosti2sykr = dict( (k,v[0]) for k,v in d2sykr.items() )
        ds = az.dejnosti4sykr = dict( (v,k)
                for k,vv in d2sykr.items()
                for v in vv
                )
        d = '('+'|'.join( ds.keys() )+')'
        az.re_dejnost0 = '('+d+'([.+]|\.\+))*'+d+'\.'
        az.re_dejnost  = re.compile( '^'+az.re_dejnost0)    #1
        az.re_dejnost_ = re.compile( '(^| )('+ az.re_dejnost0 +'*) +')  #много

        az.dejnosti_vazhni = [ l.split()[0].replace('*','') for l in (az.dejnosti1+az.dejnosti3).strip().split( '\n') if l.strip() ]
Ejemplo n.º 2
0
def varianti( v):
    dd = [ v.replace('*','') ]
    if '*' in v:
        l,r = v.split('*')
        for d in [ l+r[:i] for i in range( len(r))]:    #len+1 == v
            appendif( dd, d)
    appendif( dd, *[ v.replace('-','') for v in dd if '-' in v ])
    appendif( dd, *[ cyr2lat( v) for v in dd])
    if v.isdigit(): appendif( dd, int(v))
    return dd
Ejemplo n.º 3
0
def izdanie_razglobi( izdanie):
    neznajno = '?' in izdanie
    izdanie = izdanie.replace( '?','')
    i = izdanie
    godina = None
    sg = izdanie.rsplit('/',1)
    if len(sg)==2:
        i,g = (s.strip() for s in sg)
        if g: godina = g

    s = i.split('-')
    nositel = koi_nositel( i)
    izdatel = koi_izdatel( i)
    izd_kys = koi_izdatel( i, kys=True)

    pp = [ p.lower().strip('?')
            for p in (nositel, izdatel, izd_kys, r_izdateli.get( izdatel, izdatel) ) ]
    nn = []
    for a in s:
        b = a.lower()
        if not b or b in pp: continue
        if b in nositeli or b in kysi_cyr.values(): continue
        appendif( nn, a)
    nomer = '-'.join( nn)
    godina2nomer = False
    if izdatel.lower()==balkanton and nomer and nositel in (ploca, ploca1, ploca2):
        nomer = nomer.upper()
        for l,c in zip( bukvi_lat, bukvi_cyr):
            nomer = nomer.replace( l,c)
        gkm = bton_nomer2godina( nomer)
        if gkm:
            god,kod,nom = gkm
            nomer = kod.upper()+str(nom)
            if not (godina or '').strip('?'):
                godina = god
                godina2nomer = True
    if nositeli.get( izdatel)== nositel: izdatel = nositel   #ploca1/ploca2
    return DictAttr( nositel=nositel, izdatel=izdatel, nomer=nomer, neznajno= neznajno, godina=godina, godina2nomer=godina2nomer)
Ejemplo n.º 4
0
    optz.bool( 'obnovi')

    optz.bool( 'opis')
    optz.bool( 'premesti')
    optz.bool( 'izvadki')
    optz.bool( 'parcheta')
    optz.bool( 'log')
    optz.str( 'rubrika')
    optz,args = optz.get()
    obvivka.naistina = optz.zapis
    obvivka.log = optz.log #False

    if optz.izvadki or ospath.isfile( args[0] ):
        izvadki2zapis2dir2srez2opis( args[0])
    else:
        for d in appendif( [], *args):  #uniq
            assert ospath.isdir( d), d
            d = d.rstrip('/')
            fopis = d+'/opis'
            if not exists( fopis): continue
            print( d)
            with open( fopis) as f:
                opis = usability.load( f)
            ime = dai_ime( opis)
            print( ime)

            if optz.gotovo:
                gotovo( d, opis, kym= optz.gotovo, ime=ime)
            elif optz.obnovi:
                obnovi( d, opis)
            else:
Ejemplo n.º 5
0
    def _init( klas):
        if info._inited: return
        info._inited = 1

        info.stoinosti = stoinosti = DictAttr_lower()
        info.stoinosti_imena = dict()
        info.rstoinosti = dict_lower()
        def kxv2kvv( d, dict_v0_k_v1 =True):
            if isinstance( d, dict):
                for k,vv in d.items():
                    vv = vv.split()
                    if dict_v0_k_v1: yield [vv[0],k]+vv[1:]
                    else: yield [k] + vv
            else:  #list
                for kvv in d:
                    yield kvv.split()

        #TODO ioformat; обедини тези kxv2kvv с meta_prevodi и може би Abbr и prevodi ??
        for kvv in kxv2kvv( klas.stoinosti0, dict_v0_k_v1= True):
            v0 = kvv[0].replace( '*','')
            k  = kvv[1]
            for v in list(kvv):
                if '-' not in v: continue
                extendif( kvv, [v.replace('-',''), v.replace('-','_')])
            kvv1 = []
            for v in kvv:
                if '*' not in v:
                    appendif( kvv1, v)
                    continue
                l,r = v.split('*')
                extendif( kvv1, [ l+r[:i] for i in range( len(r)+1)] )
            kvv = kvv1
            for v in list(kvv):
                appendif( kvv, cyr2lat( v))

            assert '*' not in k #lat
            assert '*' not in v0 #cyr

            for v in kvv:
                assert '*' not in v, v
                assert v not in stoinosti, v
                info.rstoinosti[ v] = k
                stoinosti[ v] = v0
            info.stoinosti_imena[ v0] = kvv
        #prn( 111111111, stoinosti)
        klas.nasledimi      = [ stoinosti[k] for k in klas.nasledimi ]
        klas.izvyn_etiketi  = [ stoinosti[k] for k in klas.izvyn_etiketi ]
        klas.prevodachi     = dict( (stoinosti[k],v) for k,v in klas.prevodachi.items())

        zamestiteli_po_stoinost = DictAttr()
        for et,zam in klas.zamestiteli_po_stoinost.items():
            if not callable( zam):
                rechnik = dict_lower()
                for kvv in kxv2kvv( zam, dict_v0_k_v1 =True):
                    v0 = kvv[0]
                    for v in kvv:
                        rechnik[ v ] = v0
                zam = rechnik
            etp = stoinosti.get( et,et)     #.lat = .cyr = ...
            zamestiteli_po_stoinost[ et] = zamestiteli_po_stoinost[ etp] = zam
            if etp not in klas.prevodachi: klas.prevodachi[ etp] = zam
        klas.zamestiteli_po_stoinost = zamestiteli_po_stoinost