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() ]
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