__author__ = 'Tauren'



class Standards:


    def __init__(self):
        pass

    cardinals = {
            'zero' : '0', 'one' : '1',  'two' : '2',
            'three' : '3', 'four' : '4', 'five' : '5',
            'six' : '6', 'seven' : '7', 'eight' : '8',
            'nine' : '9', 'ten' : '10', 'eleven' : '11',
            'twelve' : '12', 'thirteen' : '13', 'fourteen' : '14',
            'fifteen' : '15', 'sixteen' : '16', 'seventeen' : '17',
            'eighteen' : '18', 'nineteen' : '19'
    }

    ordinals = {
            'zeroth' : '0th', 'first' : '1st',
            'second' : '2nd', 'third' : '3rd',
            'fourth' : '4th', 'fifth' : '5th',
            'sixth' : '6th', 'seventh' : '7th',
            'eighth' : '8th', 'ninth' : '9th',
            'tenth' : '10th', 'eleventh' : '11th',
            'twelfth' : '12th', 'thirteenth' : '13th',
            'fourteenth' : '14th', 'fifteenth' : '15th',
            'sixteenth' : '16th', 'seventeenth' : '17th',
            'eighteenth' : '18th', 'nineteenth' : '19th'
    }

    street_direction = {
            'E' : 'E',
            'N' : 'N',
            'S' : 'S',
            'W' : 'W',
            'EAST' : 'E',
            'NORTH' : 'N',
            'SOUTH' : 'S',
            'WEST' : 'W',
            'NORTHEAST' : 'NE',
            'NORTHWEST' : 'NW',
            'SOUTHEAST' : 'SE',
            'SOUTHWEST' : 'SW',
            'NE' : 'NE',
            'NW' : 'NW',
            'SE' : 'SE',
            'SW' : 'SW'
    }


    units = { 'APARTMENT' : 'APT',
            'BASEMENT' : 'BSMT',    # * Does not require secondary range number to follow
            'BUILDING' : 'BLDG',
            'DEPARTMENT' : 'DEPT',
            'FLOOR' : 'FL',
            'FRONT' : 'FRNT',       # * Does not require secondary range number to follow
            'HANGAR' : 'HNGR',
            'LOBBY' : 'LBBY',       # * Does not require secondary range number to follow
            'LOT' : 'LOT',
            'LOWER' : 'LOWR',       # * Does not require secondary range number to follow
            'OFFICE' : 'OFC',       # * Does not require secondary range number to follow
            'PENTHOUSE' : 'PH',     # * Does not require secondary range number to follow
            'PIER' : 'PIER',
            'REAR' : 'REAR',            # * Does not require secondary range number to follow
            'ROOM' : 'RM',
            'SIDE' : 'SIDE',            # * Does not require secondary range number to follow
            'SLIP' : 'SLIP',
            'SPACE' : 'SPC',
            'STOP' : 'STOP',
            'SUITE' : 'STE',
            'TRAILER' : 'TRLR',
            'UNIT' : 'UNIT',
            'UPPER' : 'UPPR',            # * Does not require secondary range number to follow
            'NO' : 'NO',
            'NUMBER' : 'NUMBER',
            'NUM' : 'NUM',
            'HOUSE' : 'HOUSE'
    }

    """ Prefix Street Types
    This data was taken from distinct values in the TigerLine database
    and ran agaist TIGER/LINE standards documentation in the appendix*.
    * Take from Geocommons Geocoder
    """
    tiger_prefix_types = {
            'ARC' : 'ARC',
            'ARCADE' : 'ARC',
            'AUTOPISTA' : 'AUTOPISTA',
            'AVE' : 'AVE',
            'AVENIDA' : 'AVE',
            'AVENUE' : 'AVE',
            'BIA HWY' : 'BIA HWY',
            'BIA RD' : 'BIA RD',
            'BIA RTE' : 'BIA RTE',
            'BLM RD' : 'BLM RD',
            'BLVD' : 'BLVD',
            'BOULEVARD' : 'BLVD',
            'BULEVAR' : 'BULEVAR',
            'BUREAU OF INDIAN AFFAIRS HIGHWAY' : 'BIA HWY',
            'BUREAU OF INDIAN AFFAIRS ROAD' : 'BIA RD',
            'BUREAU OF INDIAN AFFAIRS ROUTE' : 'BIA RTE',
            'BUREAU OF LAND MANAGEMENT ROAD' : 'BLM RD',
            'BYP' : 'BYP',
            'BYPASS' : 'BYP',
            'CALLE' : 'CLL',
            'CALLEJA' : 'CALLEJA',
            'CALLEJON' : 'CALLEJON',
            'CAM' : 'CAM',
            'CAMINITO' : 'CMT',
            'CAMINO' : 'CAM',
            'CARR' : 'CARR',
            'CARRETERA' : 'CARR',
            'CER' : 'CER',
            'CERRADA' : 'CER',
            'CLL' : 'CLL',
            'CMNS' : 'CMNS',
            'CMT' : 'CMT',
            'CO HWY' : 'CO HWY',
            'CO LN' : 'CO LN',
            'CO RD' : 'CO RD',
            'CO RTE' : 'CO RTE',
            'CO ST AID HWY' : 'CO ST AID HWY',
            'CO TRUNK HWY' : 'CO TRUNK HWY',
            'CO TRUNK RD' : 'CO TRUNK RD',
            'COMMONS' : 'CMNS',
            'CORTE' : 'CORTE',
            'COUNTY HIGHWAY' : 'CO HWY',
            'COUNTY LANE' : 'CO LN',
            'COUNTY ROAD' : 'CO RD',
            'COUNTY ROUTE' : 'CO RTE',
            'COUNTY STATE AID HIGHWAY' : 'CO ST AID HWY',
            'COUNTY TRUNK HIGHWAY' : 'CO TRUNK HWY',
            'COUNTY TRUNK ROAD' : 'CO TRUNK RD',
            'COURT' : 'CT',
            'CT' : 'CT',
            'CIR' : 'CIR',
            'CIRCULO' : 'CIR',
            'DC HWY' : 'DC HWY',
            'DELTA RD' : 'DELTA RD',
            'DELTA ROAD' : 'DELTA RD',
            'DISTRICT OF COLUMBIA HIGHWAY' : 'DC HWY',
            'DRIVEWAY' : 'DRIVEWAY',
            'ENT' : 'ENT',
            'ENTRADA' : 'ENT',
            'EXPRESO' : 'EXPRESO',
            'EXPRESSWAY' : 'EXPY',
            'EXPY' : 'EXPY',
            'FM' : 'FM',
            'FS RD' : 'FS RD',
            'FARM RD' : 'FARM RD',
            'FARM ROAD' : 'FARM RD',
            'FARM-TO-MARKET ROAD' : 'FM',
            'FIRE CNTRL RD' : 'FIRE CNTRL RD',
            'FIRE CONTROL ROAD' : 'FIRE CNTRL RD',
            'FIRE DIST RD' : 'FIRE DIST RD',
            'FIRE DISTRICT ROAD' : 'FIRE DIST RD',
            'FIRE LANE' : 'FIRE LN',
            'FIRE LN' : 'FIRE LN',
            'FIRE RD' : 'FIRE RD',
            'FIRE ROAD' : 'FIRE RD',
            'FIRE ROUTE' : 'FIRE RTE',
            'FIRE RTE' : 'FIRE RTE',
            'FIRE TRAIL' : 'FIRE TRL',
            'FIRE TRL' : 'FIRE TRL',
            'FOREST HIGHWAY' : 'FOREST HWY',
            'FOREST HWY' : 'FOREST HWY',
            'FOREST RD' : 'FOREST RD',
            'FOREST ROAD' : 'FOREST RD',
            'FOREST ROUTE' : 'FOREST RTE',
            'FOREST RTE' : 'FOREST RTE',
            'FOREST SERVICE ROAD' : 'FS RD',
            'HIGHWAY' : 'HWY',
            'HWY' : 'HWY',
            'I-' : 'I-',
            'INDIAN ROUTE' : 'INDIAN RTE',
            'INDIAN RTE' : 'INDIAN RTE',
            'INDIAN SERVICE ROUTE' : 'INDIAN SVC RTE',
            'INDIAN SVC RTE' : 'INDIAN SVC RTE',
            'INTERSTATE HIGHWAY' : 'I-',
            'LANE' : 'LN',
            'LN' : 'LN',
            'LOGGING RD' : 'LOGGING RD',
            'LOGGING ROAD' : 'LOGGING RD',
            'LOOP' : 'LOOP',
            'NAT FOR DEV RD' : 'NAT FOR DEV RD',
            'NATIONAL FOREST DEVELOPMENT ROAD' : 'NAT FOR DEV RD',
            'NAVAJO SERVICE ROUTE' : 'NAVAJO SVC RTE',
            'NAVAJO SVC RTE' : 'NAVAJO SVC RTE',
            'PARISH RD' : 'PARISH RD',
            'PARISH ROAD' : 'PARISH RD',
            'PASAJE' : 'PASAJE',
            'PASEO' : 'PSO',
            'PASSAGE' : 'PSGE',
            'PLA' : 'PLA',
            'PLACITA' : 'PLA',
            'PLAZA' : 'PLZ',
            'PLZ' : 'PLZ',
            'POINT' : 'PT',
            'PSGE' : 'PSGE',
            'PSO' : 'PSO',
            'PT' : 'PT',
            'PUENTE' : 'PUENTE',
            'RM' : 'RM',
            'RANCH RD' : 'RANCH RD',
            'RANCH ROAD' : 'RANCH RD',
            'RANCH TO MARKET ROAD' : 'RM',
            'RD' : 'RD',
            'RESERVATION HIGHWAY' : 'RESVN HWY',
            'RESVN HWY' : 'RESVN HWY',
            'ROAD' : 'RD',
            'ROUTE' : 'RTE',
            'ROW' : 'ROW',
            'RTE' : 'RTE',
            'RUE' : 'RUE',
            'RUTA' : 'RUTA',
            'SEC' : 'SEC',
            'SECTOR' : 'SEC',
            'SENDERO' : 'SENDERO',
            'SERVICE ROAD' : 'SVC RD',
            'SKWY' : 'SKWY',
            'SKYWAY' : 'SKWY',
            'SQ' : 'SQ',
            'SQUARE' : 'SQ',
            'ST FS RD' : 'ST FS RD',
            'ST TRUNK HWY' : 'ST TRUNK HWY',
            'STATE FOREST SERVICE ROAD' : 'ST FS RD',
            'STATE HIGHWAY' : 'STATE HWY',
            'STATE HWY' : 'STATE HWY',
            'STATE LOOP' : 'STATE LOOP',
            'STATE RD' : 'STATE RD',
            'STATE ROAD' : 'STATE RD',
            'STATE ROUTE' : 'STATE RTE',
            'STATE RTE' : 'STATE RTE',
            'STATE SPUR' : 'STATE SPUR',
            'STATE TRUNK HIGHWAY' : 'ST TRUNK HWY',
            'SVC RD' : 'SVC RD',
            'TER' : 'TER',
            'TERRACE' : 'TER',
            'TOWN HIGHWAY' : 'TOWN HWY',
            'TOWN HWY' : 'TOWN HWY',
            'TOWN RD' : 'TOWN RD',
            'TOWN ROAD' : 'TOWN RD',
            'TOWNSHIP HIGHWAY' : 'TWP HWY',
            'TOWNSHIP ROAD' : 'TWP RD',
            'TRAIL' : 'TRL',
            'TRIBAL RD' : 'TRIBAL RD',
            'TRIBAL ROAD' : 'TRIBAL RD',
            'TRL' : 'TRL',
            'TUNL' : 'TUNL',
            'TUNNEL' : 'TUNL',
            'TWP HWY' : 'TWP HWY',
            'TWP RD' : 'TWP RD',
            'US FOREST SERVICE HIGHWAY' : 'USFS HWY',
            'US FOREST SERVICE ROAD' : 'USFS RD',
            'US HIGHWAY' : 'US HWY',
            'US HWY' : 'US HWY',
            'US ROUTE' : 'US RTE',
            'US RTE' : 'US RTE',
            'USFS HWY' : 'USFS HWY',
            'USFS RD' : 'USFS RD',
            'VER' : 'VER',
            'VEREDA' : 'VER',
            'VIA' : 'VIA',
            'VIS' : 'VIS',
            'VISTA' : 'VIS',
    }



    """ TIGER/LINE street type suffix.
    Street types taken from actual tiger/line database and
    ran against the suffix abbreviation listing*.
    USPS streets type standards data was also merged into this.
    * Dataset taken from Geocommons Geocoder.
    """
    tiger_street_types = {
            '4WD TRL' : '4WD TRL',
            'ALLEY' : 'ALY',
            'ALY' : 'ALY',
            'ARC' : 'ARC',
            'ARCADE' : 'ARC',
            'AVE' : 'AVE',
            'AVENIDA' : 'AVE',
            'AVENUE' : 'AVE',
            'BELTWAY' : 'BELTWAY',
            'BLVD' : 'BLVD',
            'BOULEVARD' : 'BLVD',
            'BRG' : 'BRG',
            'BRIDGE' : 'BRG',
            'BYP' : 'BYP',
            'BYPASS' : 'BYP',
            'CAUSEWAY' : 'CSWY',
            'CIR' : 'CIR',
            'CIRCLE' : 'CIR',
            'CMN' : 'CMN',
            'CMNS' : 'CMNS',
            'COMMON' : 'CMN',
            'COMMONS' : 'CMNS',
            'CORNERS' : 'CORS',
            'CORS' : 'CORS',
            'COURT' : 'CT',
            'COURTS' : 'CTS',
            'CRES' : 'CRES',
            'CRESCENT' : 'CRES',
            'CREST' : 'CRST',
            'CROSSING' : 'XING',
            'CRST' : 'CRST',
            'CSWY' : 'CSWY',
            'CT' : 'CT',
            'CTS' : 'CTS',
            'CUTOFF' : 'CUTOFF',
            'DR' : 'DR',
            'DRIVE' : 'DR',
            'DRIVEWAY' : 'DRIVEWAY',
            'ESPLANADE' : 'ESPLANADE',
            'ESTATES' : 'ESTS',
            'ESTS' : 'ESTS',
            'EXPRESSWAY' : 'EXPY',
            'EXPY' : 'EXPY',
            'FOREST HIGHWAY' : 'FOREST HWY',
            'FOREST HWY' : 'FOREST HWY',
            'FORK' : 'FRK',
            'FOUR-WHEEL DRIVE TRAIL' : '4WD TRL',
            'FREEWAY' : 'FWY',
            'FRK' : 'FRK',
            'FWY' : 'FWY',
            'GRADE' : 'GRADE',
            'HEIGHTS' : 'HTS',
            'HIGHWAY' : 'HWY',
            'HTS' : 'HTS',
            'HWY' : 'HWY',
            'JEEP TRAIL' : 'JEEP TRL',
            'JEEP TRL' : 'JEEP TRL',
            'LANDING' : 'LNDG',
            'LANE' : 'LN',
            'LN' : 'LN',
            'LNDG' : 'LNDG',
            'LOGGING RD' : 'LOGGING RD',
            'LOGGING ROAD' : 'LOGGING RD',
            'LOOP' : 'LOOP',
            'MOTORWAY' : 'MTWY',
            'MTWY' : 'MTWY',
            'OPAS' : 'OPAS',
            'OVAL' : 'OVAL',
            'OVERPASS' : 'OPAS',
            'PARKWAY' : 'PKWY',
            'PASS' : 'PASS',
            'PASSAGE' : 'PSGE',
            'PATH' : 'PATH',
            'PIKE' : 'PIKE',
            'PKWY' : 'PKWY',
            'PL' : 'PL',
            'PLACE' : 'PL',
            'PLAZA' : 'PLZ',
            'PLZ' : 'PLZ',
            'POINT' : 'PT',
            'POINTE' : 'POINTE',
            'PROMENADE' : 'PROMENADE',
            'PSGE' : 'PSGE',
            'PT' : 'PT',
            'RR' : 'RR',
            'RAILROAD' : 'RR',
            'RAILWAY' : 'RLWY',
            'RAMP' : 'RAMP',
            'RD' : 'RD',
            'RIV' : 'RIV',
            'RIVER' : 'RIV',
            'RLWY' : 'RLWY',
            'ROAD' : 'RD',
            'ROADWAY' : 'ROADWAY',
            'ROUTE' : 'RTE',
            'ROW' : 'ROW',
            'RTE' : 'RTE',
            'RUE' : 'RUE',
            'SERVICE ROAD' : 'SVC RD',
            'SKWY' : 'SKWY',
            'SKYWAY' : 'SKWY',
            'SPUR' : 'SPUR',
            'SQ' : 'SQ',
            'SQUARE' : 'SQ',
            'ST' : 'ST',
            'STRA' : 'STRA',
            'STRAVENUE' : 'STRA',
            'STREET' : 'ST',
            'STRIP' : 'STRIP',
            'SVC RD' : 'SVC RD',
            'TER' : 'TER',
            'TERRACE' : 'TER',
            'THOROUGHFARE' : 'THOROUGHFARE',
            'TOLLWAY' : 'TOLLWAY',
            'TPKE' : 'TPKE',
            'TRACE' : 'TRCE',
            'TRAFFICWAY' : 'TRFY',
            'TRAIL' : 'TRL',
            'TRCE' : 'TRCE',
            'TRFY' : 'TRFY',
            'TRL' : 'TRL',
            'TROLLEY' : 'TROLLEY',
            'TRUCK TRAIL' : 'TRUCK TRL',
            'TRUCK TRL' : 'TRUCK TRL',
            'TUNL' : 'TUNL',
            'TUNNEL' : 'TUNL',
            'TURNPIKE' : 'TPKE',
            'VIADUCT' : 'VIADUCT',
            'VIEW' : 'VW',
            'VIS' : 'VIS',
            'VISTA' : 'VIS',
            'VW' : 'VW',
            'WALK' : 'WALK',
            'WALKWAY' : 'WALKWAY',
            'WAY' : 'WAY',
            'XING' : 'XING',
    }

    """ usps standardized street values """
    usps_street_types = {
            'ALLEE' : 'ALY',
            'ALLEY' : 'ALY',
            'ALLY' : 'ALY',
            'ALY' : 'ALY',
            'ANEX' : 'ANX',
            'ANNEX' : 'ANX',
            'ANX' : 'ANX',
            'ARC' : 'ARC',
            'ARCADE' : 'ARC',
            'AV' : 'AVE',
            'AVE' : 'AVE',
            'AVEN' : 'AVE',
            'AVENU' : 'AVE',
            'AVENUE' : 'AVE',
            'AVN' : 'AVE',
            'AVNUE' : 'AVE',
            'BAYOO' : 'BYU',
            'BAYOU' : 'BYU',
            'BCH' : 'BCH',
            'BEACH' : 'BCH',
            'BEND' : 'BND',
            'BLF' : 'BLF',
            'BLUF' : 'BLF',
            'BLUFF' : 'BLF',
            'BLUFFS' : 'BLFS',
            'BLVD' : 'BLVD',
            'BND' : 'BND',
            'BOT' : 'BTM',
            'BOTTM' : 'BTM',
            'BOTTOM' : 'BTM',
            'BOUL' : 'BLVD',
            'BOULEVARD' : 'BLVD',
            'BOULV' : 'BLVD',
            'BR' : 'BR',
            'BRANCH' : 'BR',
            'BRDGE' : 'BRG',
            'BRG' : 'BRG',
            'BRIDGE' : 'BRG',
            'BRK' : 'BRK',
            'BRNCH' : 'BR',
            'BROOK' : 'BRK',
            'BROOKS' : 'BRKS',
            'BTM' : 'BTM',
            'BURG' : 'BG',
            'BURGS' : 'BGS',
            'BYP' : 'BYP',
            'BYPA' : 'BYP',
            'BYPAS' : 'BYP',
            'BYPASS' : 'BYP',
            'BYPS' : 'BYP',
            'CAMP' : 'CP',
            'CANYN' : 'CYN',
            'CANYON' : 'CYN',
            'CAPE' : 'CPE',
            'CAUSEWAY' : 'CSWY',
            'CAUSWAY' : 'CSWY',
            'CEN' : 'CTR',
            'CENT' : 'CTR',
            'CENTER' : 'CTR',
            'CENTERS' : 'CTRS',
            'CENTR' : 'CTR',
            'CENTRE' : 'CTR',
            'CIR' : 'CIR',
            'CIRC' : 'CIR',
            'CIRCL' : 'CIR',
            'CIRCLE' : 'CIR',
            'CIRCLES' : 'CIRS',
            'CK' : 'CRK',
            'CLB' : 'CLB',
            'CLF' : 'CLF',
            'CLFS' : 'CLFS',
            'CLIFF' : 'CLF',
            'CLIFFS' : 'CLFS',
            'CLUB' : 'CLB',
            'CMP' : 'CP',
            'CNTER' : 'CTR',
            'CNTR' : 'CTR',
            'CNYN' : 'CYN',
            'COMMON' : 'CMN',
            'COR' : 'COR',
            'CORNER' : 'COR',
            'CORNERS' : 'CORS',
            'CORS' : 'CORS',
            'COURSE' : 'CRSE',
            'COURT' : 'CT',
            'COURTS' : 'CTS',
            'COVE' : 'CV',
            'COVES' : 'CVS',
            'CP' : 'CP',
            'CPE' : 'CPE',
            'CR' : 'CRK',
            'CRCL' : 'CIR',
            'CRCLE' : 'CIR',
            'CRECENT' : 'CRES',
            'CREEK' : 'CRK',
            'CRES' : 'CRES',
            'CRESCENT' : 'CRES',
            'CRESENT' : 'CRES',
            'CREST' : 'CRST',
            'CRK' : 'CRK',
            'CROSSING' : 'XING',
            'CROSSROAD' : 'XRD',
            'CRSCNT' : 'CRES',
            'CRSE' : 'CRSE',
            'CRSENT' : 'CRES',
            'CRSNT' : 'CRES',
            'CRSSING' : 'XING',
            'CRSSNG' : 'XING',
            'CRT' : 'CT',
            'CSWY' : 'CSWY',
            'CT' : 'CTS',
            'CTR' : 'CTR',
            'CURVE' : 'CURV',
            'CV' : 'CV',
            'CYN' : 'CYN',
            'DALE' : 'DL',
            'DAM' : 'DM',
            'DIV' : 'DV',
            'DIVIDE' : 'DV',
            'DL' : 'DL',
            'DM' : 'DM',
            'DR' : 'DR',
            'DRIV' : 'DR',
            'DRIVE' : 'DR',
            'DRIVES' : 'DRS',
            'DRV' : 'DR',
            'DV' : 'DV',
            'DVD' : 'DV',
            'EST' : 'EST',
            'ESTATE' : 'EST',
            'ESTATES' : 'ESTS',
            'ESTS' : 'ESTS',
            'EXP' : 'EXPY',
            'EXPR' : 'EXPY',
            'EXPRESS' : 'EXPY',
            'EXPRESSWAY' : 'EXPY',
            'EXPW' : 'EXPY',
            'EXPY' : 'EXPY',
            'EXT' : 'EXT',
            'EXTENSION' : 'EXT',
            'EXTENSIONS' : 'EXTS',
            'EXTN' : 'EXT',
            'EXTNSN' : 'EXT',
            'EXTS' : 'EXTS',
            'FALL' : 'FALL',
            'FALLS' : 'FLS',
            'FERRY' : 'FRY',
            'FIELD' : 'FLD',
            'FIELDS' : 'FLDS',
            'FLAT' : 'FLT',
            'FLATS' : 'FLTS',
            'FLD' : 'FLD',
            'FLDS' : 'FLDS',
            'FLS' : 'FLS',
            'FLT' : 'FLT',
            'FLTS' : 'FLTS',
            'FORD' : 'FRD',
            'FORDS' : 'FRDS',
            'FOREST' : 'FRST',
            'FORESTS' : 'FRST',
            'FORG' : 'FRG',
            'FORGE' : 'FRG',
            'FORGES' : 'FRGS',
            'FORK' : 'FRK',
            'FORKS' : 'FRKS',
            'FORT' : 'FT',
            'FRD' : 'FRD',
            'FREEWAY' : 'FWY',
            'FREEWY' : 'FWY',
            'FRG' : 'FRG',
            'FRK' : 'FRK',
            'FRKS' : 'FRKS',
            'FRRY' : 'FRY',
            'FRST' : 'FRST',
            'FRT' : 'FT',
            'FRWAY' : 'FWY',
            'FRWY' : 'FWY',
            'FRY' : 'FRY',
            'FT' : 'FT',
            'FWY' : 'FWY',
            'GARDEN' : 'GDN',
            'GARDENS' : 'GDNS',
            'GARDN' : 'GDN',
            'GATEWAY' : 'GTWY',
            'GATEWY' : 'GTWY',
            'GATWAY' : 'GTWY',
            'GDN' : 'GDN',
            'GDNS' : 'GDNS',
            'GLEN' : 'GLN',
            'GLENS' : 'GLNS',
            'GLN' : 'GLN',
            'GRDEN' : 'GDN',
            'GRDN' : 'GDN',
            'GRDNS' : 'GDNS',
            'GREEN' : 'GRN',
            'GREENS' : 'GRNS',
            'GRN' : 'GRN',
            'GROV' : 'GRV',
            'GROVE' : 'GRV',
            'GROVES' : 'GRVS',
            'GRV' : 'GRV',
            'GTWAY' : 'GTWY',
            'GTWY' : 'GTWY',
            'HARB' : 'HBR',
            'HARBOR' : 'HBR',
            'HARBORS' : 'HBRS',
            'HARBR' : 'HBR',
            'HAVEN' : 'HVN',
            'HAVN' : 'HVN',
            'HBR' : 'HBR',
            'HEIGHT' : 'HTS',
            'HEIGHTS' : 'HTS',
            'HGTS' : 'HTS',
            'HIGHWAY' : 'HWY',
            'HIGHWY' : 'HWY',
            'HILL' : 'HL',
            'HILLS' : 'HLS',
            'HIWAY' : 'HWY',
            'HIWY' : 'HWY',
            'HL' : 'HL',
            'HLLW' : 'HOLW',
            'HLS' : 'HLS',
            'HOLLOW' : 'HOLW',
            'HOLLOWS' : 'HOLW',
            'HOLW' : 'HOLW',
            'HOLWS' : 'HOLW',
            'HRBOR' : 'HBR',
            'HT' : 'HTS',
            'HTS' : 'HTS',
            'HVN' : 'HVN',
            'HWAY' : 'HWY',
            'HWY' : 'HWY',
            'INLET' : 'INLT',
            'INLT' : 'INLT',
            'IS' : 'IS',
            'ISLAND' : 'IS',
            'ISLANDS' : 'ISS',
            'ISLE' : 'ISLE',
            'ISLES' : 'ISLE',
            'ISLND' : 'IS',
            'ISLNDS' : 'ISS',
            'ISS' : 'ISS',
            'JCT' : 'JCT',
            'JCTION' : 'JCT',
            'JCTN' : 'JCT',
            'JCTNS' : 'JCTS',
            'JCTS' : 'JCTS',
            'JUNCTION' : 'JCT',
            'JUNCTIONS' : 'JCTS',
            'JUNCTN' : 'JCT',
            'JUNCTON' : 'JCT',
            'KEY' : 'KY',
            'KEYS' : 'KYS',
            'KNL' : 'KNL',
            'KNLS' : 'KNLS',
            'KNOL' : 'KNL',
            'KNOLL' : 'KNL',
            'KNOLLS' : 'KNLS',
            'KY' : 'KY',
            'KYS' : 'KYS',
            'LA' : 'LN',
            'LAKE' : 'LK',
            'LAKES' : 'LKS',
            'LAND' : 'LAND',
            'LANDING' : 'LNDG',
            'LANE' : 'LN',
            'LANES' : 'LN',
            'LCK' : 'LCK',
            'LCKS' : 'LCKS',
            'LDG' : 'LDG',
            'LDGE' : 'LDG',
            'LF' : 'LF',
            'LGT' : 'LGT',
            'LIGHT' : 'LGT',
            'LIGHTS' : 'LGTS',
            'LK' : 'LK',
            'LKS' : 'LKS',
            'LN' : 'LN',
            'LNDG' : 'LNDG',
            'LNDNG' : 'LNDG',
            'LOAF' : 'LF',
            'LOCK' : 'LCK',
            'LOCKS' : 'LCKS',
            'LODG' : 'LDG',
            'LODGE' : 'LDG',
            'LOOP' : 'LOOP',
            'LOOPS' : 'LOOP',
            'MALL' : 'MALL',
            'MANOR' : 'MNR',
            'MANORS' : 'MNRS',
            'MDW' : 'MDW',
            'MDWS' : 'MDWS',
            'MEADOW' : 'MDW',
            'MEADOWS' : 'MDWS',
            'MEDOWS' : 'MDWS',
            'MEWS' : 'MEWS',
            'MILL' : 'ML',
            'MILLS' : 'MLS',
            'MISSION' : 'MSN',
            'MISSN' : 'MSN',
            'ML' : 'ML',
            'MLS' : 'MLS',
            'MNR' : 'MNR',
            'MNRS' : 'MNRS',
            'MNT' : 'MT',
            'MNTAIN' : 'MTN',
            'MNTN' : 'MTN',
            'MNTNS' : 'MTNS',
            'MOTORWAY' : 'MTWY',
            'MOUNT' : 'MT',
            'MOUNTAIN' : 'MTN',
            'MOUNTAINS' : 'MTNS',
            'MOUNTIN' : 'MTN',
            'MSN' : 'MSN',
            'MSSN' : 'MSN',
            'MT' : 'MT',
            'MTIN' : 'MTN',
            'MTN' : 'MTN',
            'NCK' : 'NCK',
            'NECK' : 'NCK',
            'ORCH' : 'ORCH',
            'ORCHARD' : 'ORCH',
            'ORCHRD' : 'ORCH',
            'OVAL' : 'OVAL',
            'OVERPASS' : 'OPAS',
            'OVL' : 'OVAL',
            'PARK' : 'PARK',
            'PARKS' : 'PARK',
            'PARKWAY' : 'PKWY',
            'PARKWAYS' : 'PKWY',
            'PARKWY' : 'PKWY',
            'PASS' : 'PASS',
            'PASSAGE' : 'PSGE',
            'PATH' : 'PATH',
            'PATHS' : 'PATH',
            'PIKE' : 'PIKE',
            'PIKES' : 'PIKE',
            'PINE' : 'PNE',
            'PINES' : 'PNES',
            'PK' : 'PARK',
            'PKWAY' : 'PKWY',
            'PKWY' : 'PKWY',
            'PKWYS' : 'PKWY',
            'PKY' : 'PKWY',
            'PL' : 'PL',
            'PLACE' : 'PL',
            'PLAIN' : 'PLN',
            'PLAINES' : 'PLNS',
            'PLAINS' : 'PLNS',
            'PLAZA' : 'PLZ',
            'PLN' : 'PLN',
            'PLNS' : 'PLNS',
            'PLZ' : 'PLZ',
            'PLZA' : 'PLZ',
            'PNES' : 'PNES',
            'POINT' : 'PT',
            'POINTS' : 'PTS',
            'PORT' : 'PRT',
            'PORTS' : 'PRTS',
            'PR' : 'PR',
            'PRAIRIE' : 'PR',
            'PRARIE' : 'PR',
            'PRK' : 'PARK',
            'PRR' : 'PR',
            'PRT' : 'PRT',
            'PRTS' : 'PRTS',
            'PT' : 'PT',
            'PTS' : 'PTS',
            'RAD' : 'RADL',
            'RADIAL' : 'RADL',
            'RADIEL' : 'RADL',
            'RADL' : 'RADL',
            'RAMP' : 'RAMP',
            'RANCH' : 'RNCH',
            'RANCHES' : 'RNCH',
            'RAPID' : 'RPD',
            'RAPIDS' : 'RPDS',
            'RD' : 'RD',
            'RDG' : 'RDG',
            'RDGE' : 'RDG',
            'RDGS' : 'RDGS',
            'RDS' : 'RDS',
            'REST' : 'RST',
            'RIDGE' : 'RDG',
            'RIDGES' : 'RDGS',
            'RIV' : 'RIV',
            'RIVER' : 'RIV',
            'RIVR' : 'RIV',
            'RNCH' : 'RNCH',
            'RNCHS' : 'RNCH',
            'ROAD' : 'RD',
            'ROADS' : 'RDS',
            'ROUTE' : 'RTE',
            'ROW' : 'ROW',
            'RPD' : 'RPD',
            'RPDS' : 'RPDS',
            'RST' : 'RST',
            'RUE' : 'RUE',
            'RUN' : 'RUN',
            'RVR' : 'RIV',
            'SHL' : 'SHL',
            'SHLS' : 'SHLS',
            'SHOAL' : 'SHL',
            'SHOALS' : 'SHLS',
            'SHOAR' : 'SHR',
            'SHOARS' : 'SHRS',
            'SHORE' : 'SHR',
            'SHORES' : 'SHRS',
            'SHR' : 'SHR',
            'SHRS' : 'SHRS',
            'SKYWAY' : 'SKWY',
            'SMT' : 'SMT',
            'SPG' : 'SPG',
            'SPGS' : 'SPGS',
            'SPNG' : 'SPG',
            'SPNGS' : 'SPGS',
            'SPRING' : 'SPG',
            'SPRINGS' : 'SPGS',
            'SPRNG' : 'SPG',
            'SPRNGS' : 'SPGS',
            'SPUR' : 'SPUR',
            'SPURS' : 'SPUR',
            'SQ' : 'SQ',
            'SQR' : 'SQ',
            'SQRE' : 'SQ',
            'SQRS' : 'SQS',
            'SQU' : 'SQ',
            'SQUARE' : 'SQ',
            'SQUARES' : 'SQS',
            'ST' : 'ST',
            'STA' : 'STA',
            'STATION' : 'STA',
            'STATN' : 'STA',
            'STN' : 'STA',
            'STR' : 'ST',
            'STRA' : 'STRA',
            'STRAV' : 'STRA',
            'STRAVE' : 'STRA',
            'STRAVEN' : 'STRA',
            'STRAVENUE' : 'STRA',
            'STRAVN' : 'STRA',
            'STREAM' : 'STRM',
            'STREET' : 'ST',
            'STREETS' : 'STS',
            'STREME' : 'STRM',
            'STRM' : 'STRM',
            'STRT' : 'ST',
            'STRVN' : 'STRA',
            'STRVNUE' : 'STRA',
            'SUMIT' : 'SMT',
            'SUMITT' : 'SMT',
            'SUMMIT' : 'SMT',
            'TER' : 'TER',
            'TERR' : 'TER',
            'TERRACE' : 'TER',
            'THROUGHWAY' : 'TRWY',
            'TPK' : 'TPKE',
            'TPKE' : 'TPKE',
            'TR' : 'TRL',
            'TRACE' : 'TRCE',
            'TRACES' : 'TRCE',
            'TRACK' : 'TRAK',
            'TRACKS' : 'TRAK',
            'TRAFFICWAY' : 'TRFY',
            'TRAIL' : 'TRL',
            'TRAILS' : 'TRL',
            'TRAK' : 'TRAK',
            'TRCE' : 'TRCE',
            'TRFY' : 'TRFY',
            'TRK' : 'TRAK',
            'TRKS' : 'TRAK',
            'TRL' : 'TRL',
            'TRLS' : 'TRL',
            'TRNPK' : 'TPKE',
            'TRPK' : 'TPKE',
            'TUNEL' : 'TUNL',
            'TUNL' : 'TUNL',
            'TUNLS' : 'TUNL',
            'TUNNEL' : 'TUNL',
            'TUNNELS' : 'TUNL',
            'TUNNL' : 'TUNL',
            'TURNPIKE' : 'TPKE',
            'TURNPK' : 'TPKE',
            'UN' : 'UN',
            'UNDERPASS' : 'UPAS',
            'UNION' : 'UN',
            'UNIONS' : 'UNS',
            'VALLEY' : 'VLY',
            'VALLEYS' : 'VLYS',
            'VALLY' : 'VLY',
            'VDCT' : 'VIA',
            'VIA' : 'VIA',
            'VIADCT' : 'VIA',
            'VIADUCT' : 'VIA',
            'VIEW' : 'VW',
            'VIEWS' : 'VWS',
            'VILL' : 'VLG',
            'VILLAG' : 'VLG',
            'VILLAGE' : 'VLG',
            'VILLAGES' : 'VLGS',
            'VILLE' : 'VL',
            'VILLG' : 'VLG',
            'VILLIAGE' : 'VLG',
            'VIS' : 'VIS',
            'VIST' : 'VIS',
            'VISTA' : 'VIS',
            'VL' : 'VL',
            'VLG' : 'VLG',
            'VLGS' : 'VLGS',
            'VLLY' : 'VLY',
            'VLY' : 'VLY',
            'VLYS' : 'VLYS',
            'VST' : 'VIS',
            'VSTA' : 'VIS',
            'VW' : 'VW',
            'VWS' : 'VWS',
            'WALK' : 'WALK',
            'WALKS' : 'WALK',
            'WALL' : 'WALL',
            'WAY' : 'WAY',
            'WAYS' : 'WAYS',
            'WELL' : 'WL',
            'WELLS' : 'WLS',
            'WLS' : 'WLS',
            'WY' : 'WAY',
            'XING' : 'XING'
    }

    states = {
            'ALABAMA' : 'AL',
            'ALASKA' : 'AK',
            'AMERICAN SAMOA' : 'AS',
            'ARIZONA' : 'AZ',
            'ARKANSAS' : 'AR',
            'CALIFORNIA' : 'CA',
            'COLORADO' : 'CO',
            'CONNECTICUT' : 'CT',
            'DELAWARE' : 'DE',
            'DISTRICT OF COLUMBIA' : 'DC',
            'FEDERATED STATES OF MICRONESIA' : 'FM',
            'FLORIDA' : 'FL',
            'GEORGIA' : 'GA',
            'GUAM GU' : 'GU',
            'HAWAII' : 'HI',
            'IDAHO' : 'ID',
            'ILLINOIS' : 'IL',
            'INDIANA' : 'IN',
            'IOWA' : 'IA',
            'KANSAS' : 'KS',
            'KENTUCKY' : 'KY',
            'LOUISIANA' : 'LA',
            'MAINE' : 'ME',
            'MARSHALL ISLANDS' : 'MH',
            'MARYLAND' : 'MD',
            'MASSACHUSETTS' : 'MA',
            'MICHIGAN' : 'MI',
            'MINNESOTA' : 'MN',
            'MISSISSIPPI' : 'MS',
            'MISSOURI' : 'MO',
            'MONTANA' : 'MT',
            'NEBRASKA' : 'NE',
            'NEVADA' : 'NV',
            'NEW HAMPSHIRE' : 'NH',
            'NEW JERSEY' : 'NJ',
            'NEW MEXICO' : 'NM',
            'NEW YORK' : 'NY',
            'NORTH CAROLINA' : 'NC',
            'NORTH DAKOTA' : 'ND',
            'N CAROLINA' : 'NC',
            'N DAKOTA' : 'ND',
            'NORTHERN MARIANA ISLANDS' : 'MP',
            'OHIO' : 'OH',
            'OKLAHOMA' : 'OK',
            'OREGON' : 'OR',
            'PALAU' : 'PW',
            'PENNSYLVANIA' : 'PA',
            'PUERTO RICO' : 'PR',
            'RHODE ISLAND' : 'RI',
            'SOUTH CAROLINA' : 'SC',
            'SOUTH DAKOTA' : 'SD',
            'S CAROLINA' : 'SC',
            'S DAKOTA' : 'SD',
            'TENNESSEE' : 'TN',
            'TEXAS' : 'TX',
            'UTAH' : 'UT',
            'VERMONT' : 'VT',
            'VIRGIN ISLANDS' : 'VI',
            'VIRGINIA' : 'VA',
            'WASHINGTON' : 'WA',
            'WEST VIRGINIA' : 'WV',
            'W VIRGINIA' : 'WV',
            'WISCONSIN' : 'WI',
            'WYOMING' : 'WY'
    }

    states_v2 = {
                'WA' : 'WASHINGTON',
                'FLORIDA' : 'FLORIDA',
                'VIRGINIA' : 'VIRGINIA',
                'WI' : 'WISCONSIN',
                'WV' : 'WEST VIRGINIA',
                'W VIRGINIA' : 'W VIRGINIA',
                'WY' : 'WYOMING',
                'FEDERATED STATES OF MICRONESIA' : 'FEDERATED STATES OF MICRONESIA',
                'CONNECTICUT' : 'CONNECTICUT',
                'S CAROLINA' : 'S CAROLINA',
                'CT' : 'CONNECTICUT',
                'RI' : 'RHODE ISLAND',
                'NEW MEXICO' : 'NEW MEXICO',
                'GU' : 'GUAM GU',
                'PALAU' : 'PALAU',
                'COLORADO' : 'COLORADO',
                'MINNESOTA' : 'MINNESOTA',
                'GA' : 'GEORGIA',
                'N DAKOTA' : 'N DAKOTA',
                'OK' : 'OKLAHOMA',
                'NORTH DAKOTA' : 'NORTH DAKOTA',
                'OH' : 'OHIO',
                'PENNSYLVANIA' : 'PENNSYLVANIA',
                'RHODE ISLAND' : 'RHODE ISLAND',
                'NEW HAMPSHIRE' : 'NEW HAMPSHIRE',
                'MISSOURI' : 'MISSOURI',
                'OR' : 'OREGON',
                'VERMONT' : 'VERMONT',
                'GEORGIA' : 'GEORGIA',
                'NEW YORK' : 'NEW YORK',
                'GUAM GU' : 'GUAM GU',
                'PR' : 'PUERTO RICO',
                'PW' : 'PALAU',
                'HAWAII' : 'HAWAII',
                'PA' : 'PENNSYLVANIA',
                'MASSACHUSETTS' : 'MASSACHUSETTS',
                'MICHIGAN' : 'MICHIGAN',
                'WYOMING' : 'WYOMING',
                'WASHINGTON' : 'WASHINGTON',
                'OREGON' : 'OREGON',
                'ME' : 'MAINE',
                'MD' : 'MARYLAND',
                'MA' : 'MASSACHUSETTS',
                'UT' : 'UTAH',
                'MO' : 'MISSOURI',
                'MN' : 'MINNESOTA',
                'MI' : 'MICHIGAN',
                'MH' : 'MARSHALL ISLANDS',
                'DISTRICT OF COLUMBIA' : 'DISTRICT OF COLUMBIA',
                'MT' : 'MONTANA',
                'MONTANA' : 'MONTANA',
                'MP' : 'NORTHERN MARIANA ISLANDS',
                'MS' : 'MISSISSIPPI',
                'WEST VIRGINIA' : 'WEST VIRGINIA',
                'MARSHALL ISLANDS' : 'MARSHALL ISLANDS',
                'NC' : 'N CAROLINA',
                'IOWA' : 'IOWA',
                'KANSAS' : 'KANSAS',
                'UTAH' : 'UTAH',
                'NORTH CAROLINA' : 'NORTH CAROLINA',
                'NE' : 'NEBRASKA',
                'SOUTH CAROLINA' : 'SOUTH CAROLINA',
                'SOUTH DAKOTA' : 'SOUTH DAKOTA',
                'ALABAMA' : 'ALABAMA',
                'FL' : 'FLORIDA',
                'FM' : 'FEDERATED STATES OF MICRONESIA',
                'IDAHO' : 'IDAHO',
                'NH' : 'NEW HAMPSHIRE',
                'NJ' : 'NEW JERSEY',
                'NM' : 'NEW MEXICO',
                'DELAWARE' : 'DELAWARE',
                'ND' : 'NORTH DAKOTA',
                'ALASKA' : 'ALASKA',
                'NY' : 'NEW YORK',
                'PUERTO RICO' : 'PUERTO RICO',
                'NV' : 'NEVADA',
                'MISSISSIPPI' : 'MISSISSIPPI',
                'CO' : 'COLORADO',
                'NEW JERSEY' : 'NEW JERSEY',
                'CA' : 'CALIFORNIA',
                'DC' : 'DISTRICT OF COLUMBIA',
                'VIRGIN ISLANDS' : 'VIRGIN ISLANDS',
                'NEVADA' : 'NEVADA',
                'S DAKOTA' : 'S DAKOTA',
                'ARIZONA' : 'ARIZONA',
                'WISCONSIN' : 'WISCONSIN',
                'OKLAHOMA' : 'OKLAHOMA',
                'KENTUCKY' : 'KENTUCKY',
                'KS' : 'KANSAS',
                'HI' : 'HAWAII',
                'SC' : 'SOUTH CAROLINA',
                'KY' : 'KENTUCKY',
                'MAINE' : 'MAINE',
                'SD' : 'S DAKOTA',
                'DE' : 'DELAWARE',
                'AMERICAN SAMOA' : 'AMERICAN SAMOA',
                'CALIFORNIA' : 'CALIFORNIA',
                'TX' : 'TEXAS',
                'LA' : 'LOUISIANA',
                'ILLINOIS' : 'ILLINOIS',
                'TN' : 'TENNESSEE',
                'TENNESSEE' : 'TENNESSEE',
                'OHIO' : 'OHIO',
                'MARYLAND' : 'MARYLAND',
                'VA' : 'VIRGINIA',
                'VI' : 'VIRGIN ISLANDS',
                'AK' : 'ALASKA',
                'N CAROLINA' : 'N CAROLINA',
                'AL' : 'ALABAMA',
                'AS' : 'AMERICAN SAMOA',
                'AR' : 'ARKANSAS',
                'VT' : 'VERMONT',
                'IL' : 'ILLINOIS',
                'IN' : 'INDIANA',
                'IA' : 'IOWA',
                'INDIANA' : 'INDIANA',
                'AZ' : 'ARIZONA',
                'LOUISIANA' : 'LOUISIANA',
                'ID' : 'IDAHO',
                'NORTHERN MARIANA ISLANDS' : 'NORTHERN MARIANA ISLANDS',
                'NEBRASKA' : 'NEBRASKA',
                'ARKANSAS' : 'ARKANSAS',
                'TEXAS' : 'TEXAS'
    }