Ignore:
Timestamp:
11/12/18 13:09:35 (13 months ago)
Author:
mjuckes
Message:

01.00.29 candidate

File:
1 edited

Legend:

Unmodified
Added
Removed
  • CMIP6dreqbuild/trunk/src/framework/titles.py

    r1289 r1291  
    11 
     2import collections, autocorrect, shelve 
     3import re 
    24from dreqPy import dreq 
    35dq = dreq.loadDreq() 
    46 
    5  
    6  
    7  
    8 #>> for i in dq.coll['var'].items: 
    9 #>>    for w in i.title.split(): 
    10 #>>      words[w].add( i.title ) 
    11 #>> k3 = [w for w in words if len(w) == 3] 
    12 #>> khy = [k for k in words if k.find('-') != -1] 
    13 #>> khy = [k for k in words if k.find('-') != -1] 
    14 #>> khy = [k for k in words if k.find('-') != -1] 
    15  
    16  
     7re_nm = re.compile( '[0-9]+(nm|m|hPa)' ) 
     8 
     9class BuildWl(object): 
     10  def __init__(self): 
     11    self.cc = collections.defaultdict( set ) 
     12  def add(self,k,v): 
     13    self.cc[k].add(v) 
     14 
     15 
     16words = collections.defaultdict( set ) 
     17wl = collections.defaultdict( set ) 
     18def getstuff(): 
     19  khyzz = collections.defaultdict( set ) 
     20  for i in dq.coll['var'].items: 
     21    for w in i.title.split(): 
     22      words[w].add( i.title ) 
     23      wl[w.lower()].add( i.title ) 
     24 
     25  bl = dict() 
     26  for x in range(1,8): 
     27    bl[x] = [w for w in words if len(w) == x] 
     28 
     29  khy = [k for k in words if k.find('-') != -1] 
     30  for k in khy: 
     31    this = k.replace('-',' ').lower() 
     32    for i in dq.coll['var'].items: 
     33      if i.title.lower().find( this ) != -1: 
     34        khyzz[k.lower()].add( i.title ) 
     35  return words, wl, khy, khyzz, bl 
     36  
    1737 
    1838special = dict() 
     
    2747lower[1] = ['a'] 
    2848lower[2] = ['as', 'at', 'by', 'in', 'nm', 'of', 'on', 'or', 'to'] 
    29  
    3049lower[3] = [ 'and', 'any', 'but', 'for',  'non', 'nor', 'not', 'out', 'per', 'the'] 
    31  
    32  
    33 lower[4] = ['into', 'onto', 'over', 'than', 'with'] 
    34  
    35 special[1] = ['X', 'Y', 'T'] 
    36 special[2] = ['10', '1H', '1m', '2H', '2m', '3D', '50', 'C3', 'C4', 'CO', 'D:', 'H2', 'N2', 'NO', 'Ox', 'O2', 'O3', 'OD', 'OH', 'XY', 'pH'] 
    37 special[3] = ['100', '10m', '13C', '14C', '17O', '18O', '20C', '440', '443', '500', '550', '850', '865', '870', 'CH4', 'CO2', 'CWD', 'DMS', 'HCl', 'HO2', 'N2O', 'NH3', 'NH4', 'NHx', 'NO2', 'NO3', 'NOx', 'NOy', 'NPP', 'O1d',  'PAN', 'PBL', 'PO2', 'SF6', 'SO2', 'SO4', 'SWE', 'TEM', 'TOA', 'hPa'] 
    38 special[4] = ['1000', '100m', '300m', '700m', 'C2H2', 'C2H6', 'C3H6', 'C3H8', 'CFAD', 'MISR', 'PCO2', 'PM10' ] 
     50lower[4] = ['into', 'onto', 'over', 'than', 'with', 'from'] 
     51lower[5] = ['neither','either','degree'] 
     52 
     53special[1] = ['X', 'Y', 'T', 'O', 'D'] 
     54special[2] = ['10', '1H', '1m', '2H', '2m', '3D', '50', 'C3', 'C4', 'CO', 'H2', 'N2', 'NO', 'Ox', 'O2', 'O3', 'OD', 'OH', 'XY', 'pH'] 
     55special[3] = ['100', '10m', '13C', '14C', '17O', '18O', '20C', '440', '443', '500', '550', '850', '865', '870', 'CH4', 'CO2', 'CWD', 'DMS', 'HCl', 'HO2', 'N2O', 'NH3', 'NH4', 'NHx', 'NO2', 'NO3', 'NOx', 'NOy', 'NPP', 'O1D',  'PAN', 'PBL', 'PO2', 'SF6', 'SO2', 'SO4', 'SWE', 'TEM', 'TOA', 'hPa'] 
     56special[4] = ['1000', '100m', '300m', '700m', 'C2H2', 'C2H6', 'C3H6', 'C3H8', 'CFAD', 'HNO3', 'MISR', 'PCO2', 'PM10' ] 
    3957special[5] = ['10hPa', '13CO2', '14CO2', '2000m', '4XCO2', '550nm', 'CFC11', 'CFC12', 'DI14C', 'ISCCP', 'MODIS', 'NMVOC', 'PM1.0', 'PM2.5', 'UGRID'] 
    4058special[6] = ['CFC113', 'HCFC22']  
    4159special[7] = ['CALIPSO', 'PARASOL'] 
    42 special[8] = ['(=dp/dt)', '13Carbon', '14Carbon', '2D-field', 'CH3COCH3'] 
    43  
    44 class Frag(object): 
    45   def __init__(self,s): 
     60special[8] = ['(=dp/dt)', '13Carbon', '14Carbon', 'CH3COCH3', 'CloudSat'] 
     61 
     62people = set( ['Leovy', 'Hibler', 'Wesely', 'Eliassen', 'Vaisala', 'Redi', 'Boussinesq' ] ) 
     63vocab = set( ['Dianeutral', 'Diazotrophs', 'Downwelling', 'Epineutral', 'Landuse', 'Longwave', 'Meltpond', 'Mesozooplankton', 'Methanogenesis', 'Methanotrophy', 'Microzooplankton', 'Needleleaf', 'Picophytoplankton', 'Streamfunction', 'Submesoscale', 'Thermosteric'] ) 
     64 
     65class Specials(object): 
     66  def __init__(self): 
     67    self.ll = set() 
     68    self.uu = set() 
     69    for k,v in lower.items(): 
     70      for x in v: 
     71         self.ll.add(x) 
     72 
     73    for k,v in special.items(): 
     74      for x in v: 
     75         self.uu.add(x) 
     76 
     77    hyphen02 = set(['Run-off','Air-to-Sea','2D-Field','3D-Field']) 
     78    self.ehy = dict() 
     79    for k in hyphen02: 
     80      self.ehy[ k.lower() ] = k 
     81 
     82specials = Specials() 
     83 
     84re_x = re.compile( '([;:,\-\(\)"\'\_+*><=/.\[\]])' ) 
     85re_n = re.compile( '[0-9]\.*[0-9]' ) 
     86re_chem = re.compile( '^(((C|N|O|Br|F|Fe|H|Ca|Cl|Ch|S|Si)[0-9xy]{0,4}){1,6})$' ) 
     87 
     88def cleantext(ss): 
     89  res = set( re_x.findall( ss ) ) 
     90  print res 
     91  for x in res: 
     92    ss = ss.replace( x, ' ' ) 
     93  print ss 
     94  ss = ' '.join( [x.strip() for x in ss.split() ] ) 
     95  return ss 
     96   
     97 
     98def mycap(s): 
     99  if s in specials.ll: 
     100    return s.lower() 
     101  elif s in specials.uu: 
     102    return s 
     103  elif re_nm.match(s): 
     104    return s 
     105  else: 
     106    return s.capitalize() 
     107 
     108def getFrag(name): 
     109 class Frag(object): 
     110  words = collections.defaultdict( set ) 
     111  wl = collections.defaultdict( set ) 
     112  wl2 = BuildWl() 
     113  def __init__(self,s,ttl): 
    46114    self.prf = '' 
    47115    self.sfx = '' 
    48     if s[0] in ['(',',','.']: 
     116    if s[0] in ['(',',','.','"']: 
    49117      self.prf = s[0] 
    50     if s[-1] in [')',',']: 
     118    if s[-1] in [')',',','.','"',';']: 
    51119      self.sfx = s[-1] 
    52120    self.word = s[len(self.prf):len(s)-len(self.sfx)] 
     121    self.words[self.word].add( ttl ) 
     122    self.ttl = ttl 
    53123  
    54124  def cap(self): 
    55     return ''.join( [self.prf,self.word.capitalize(),self.sfx] ) 
     125    if self.word.find( '-' ) != -1: 
     126      if self.word.lower() in specials.ehy: 
     127        this = specials.ehy[self.word.lower()] 
     128      else: 
     129        this = '-'.join( [mycap(x) for x in self.word.split('-')] ) 
     130    else: 
     131      this = mycap( self.word ) 
     132       
     133    if len(this) == 1: 
     134      print 'L1: ',self.word, this 
     135 
     136    self.wl[this].add( self.ttl ) 
     137    self.wl2.add(this, self.ttl ) 
     138    self.styled = this 
     139 
     140    return ''.join( [self.prf,this,self.sfx] ) 
     141 
    56142  def low(self): 
     143    self.wl[self.word.lower()].add( self.ttl ) 
     144    self.wl2.add(self.word.lower(), self.ttl ) 
     145    self.styled = self.word.lower() 
    57146    return ''.join( [self.prf,self.word.lower(),self.sfx] ) 
    58   def full(self): 
     147 
     148  def full(self,save=True): 
     149    if save: 
     150      self.wl[self.word].add( self.ttl ) 
     151      self.wl2.add(self.word, self.ttl ) 
     152      self.styled = self.word 
    59153    return ''.join( [self.prf,self.word,self.sfx] ) 
     154 
     155 Frag.__name__ = name 
     156 return Frag 
    60157 
    61158class TitleCase(object): 
    62159  def __init__(self): 
     160    self.frag = getFrag( 'FragVar' ) 
     161    self.fragd = getFrag( 'FragDesc' ) 
     162    self.sh = shelve.open( 'inSh/titleCase' ) 
     163    self.desc = set() 
     164    self.chem = set() 
    63165    specials = set() 
    64166    lowers = set() 
     
    72174    ee = dict() 
    73175    for i in dq.coll['var'].items: 
    74       parts = [Frag(x) for x in i.title.split() ] 
    75       pold = [x.full() for x in parts] 
     176      parts = [self.frag(x,i.title) for x in i.title.split() ] 
     177      for x in cleantext( i.description ).split(): 
     178        if len( re_n.findall(x) ) == 0: 
     179          if re_chem.match(x) == None: 
     180            y = self.fragd(x,i.description) 
     181            y.low() 
     182            self.desc.add( y.word.lower() ) 
     183          else: 
     184            self.chem.add( x ) 
     185 
     186      pold = [x.full(save=False) for x in parts] 
    76187      pnew = [] 
    77188      if parts[0].word in specials: 
     
    87198        else: 
    88199          pnew.append( p.cap() ) 
     200        if p.styled == 'ice': 
     201          print 'ICE:: ',parts 
     202        elif p.word.lower() == 'ice': 
     203          print 'ice: ',p.word,p.styled, parts 
     204 
    89205      if pold != pnew: 
    90206         ee[tuple(pnew)] = pold 
     
    92208 
    93209     
    94     for l in sorted( ee.keys()[:25] ): 
     210    for l in sorted( ee.keys() ): 
    95211         print '----------------' 
    96          print ' '.join(ee[l]) 
    97          print ' '.join(l) 
     212         old = ' '.join(ee[l]) 
     213         print old 
     214         new = ' '.join(l) 
     215         print new 
     216         self.sh[old] = new 
     217 
    98218    print 'NUMBER OF CHANGES: ', len(ee) 
    99219 
     
    105225       
    106226 
    107 tc = TitleCase() 
    108 tc.list() 
     227class MyChecker(object): 
     228  def __init__(self,tag,frag,full=True): 
     229    self.full = full 
     230    self.tag = tag 
     231    self.frag = frag 
     232    self.ns = self.nc = self.ne = 0 
     233    self.known = autocorrect.word.KNOWN_WORDS.union( [x.lower() for x in vocab] ).union( (x.lower() for x in people) ) 
     234 
     235 
     236  def check(self,k,key=None): 
     237    if key == None: 
     238      key = k 
     239    if k in specials.uu: 
     240      self.ns += 1 
     241    elif k.lower() in self.known: 
     242      self.nc += 1 
     243    else: 
     244      if self.full: 
     245        print '%sUNKNOWN: ' % self.tag, k, self.frag.wl[key] 
     246      else: 
     247        print '%sUNKNOWN: ' % self.tag, k, list( self.frag.wl[key] )[0][:80] 
     248      self.ne += 1 
     249 
     250def run(): 
     251  tc = TitleCase() 
     252  tc.list() 
     253 
     254  myCheck = MyChecker('v::', tc.frag) 
     255 
     256  for k in sorted( tc.frag.wl.keys() ): 
     257    if k.find('-') != -1: 
     258      for x in k.split( '-'): 
     259        myCheck.check(x,key=k) 
     260    else: 
     261      myCheck.check(k) 
     262 
     263  myCheck = MyChecker( 'd::', tc.fragd, full=False) 
     264  for k in sorted( tc.fragd.wl.keys() ): 
     265    if k.find('-') != -1: 
     266      for x in k.split( '-'): 
     267        myCheck.check(x,key=k) 
     268    else: 
     269      myCheck.check(k) 
     270 
     271  print myCheck.ns, myCheck.nc, myCheck.ne 
     272  tc.sh.close() 
     273  return tc 
     274 
     275if __name__ == "__main__": 
     276  tc = run() 
     277 
Note: See TracChangeset for help on using the changeset viewer.