def normalizarPorPartido(self, direccion, partido='', maxOptions=10): res = [[], [], [], []] for nd in self.normalizadores: try: if partido == '': res[2] += nd.normalizar(direccion, maxOptions) else: m = matcheaTexto(partido, nd.partido.keywords) if m: result = nd.normalizar(direccion, maxOptions) if m == MATCH_EXACTO: res[0] += result elif m == MATCH_PERMUTADO: res[1] += result elif m == MATCH_INCLUIDO: res[2] += result elif m == MATCH: res[3] += result except Exception as e: pass if len(res[0] + res[1] + res[2] + res[3]): res = (res[0] + res[1] + res[2] + res[3]) if partido != '': res = [ r for r in res if (matcheaTexto(partido, r.partido.nombre) or matcheaTexto(partido, r.localidad)) ] return res[:maxOptions] else: raise e
def normalizarPorPartido(self, direccion, partido='', maxOptions=10): res = [[], [], [], []] global errorGlobal errorGlobal = None for nd in self.normalizadores: try: if partido == '': res[2] += nd.normalizar(direccion, maxOptions) else: m = matcheaTexto(partido, nd.partido.keywords) if m: result = nd.normalizar(direccion, maxOptions) if m == MATCH_EXACTO: res[0] += result elif m == MATCH_PERMUTADO: res[1] += result elif m == MATCH_INCLUIDO: res[2] += result elif m == MATCH: res[3] += result except Exception as e: errorGlobal = e if len(res[0] + res[1] + res[2] + res[3]): res = (res[0] + res[1] + res[2] + res[3]) if partido != '': res = [r for r in res if (matcheaTexto(partido, r.partido.nombre) or matcheaTexto(partido, r.localidad))] return res[:maxOptions] else: raise errorGlobal
def test_matcheaTexto_no_normalizar_no_match(self): res = matcheaTexto('Lanus', 'Lanús', normalizar=False) self.assertEqual(res, NO_MATCH) res = matcheaTexto('- (lomas, dé, zámórá)-', 'Lomas de Zamora', normalizar=False) self.assertEqual(res, NO_MATCH) res = matcheaTexto('de lomas zamora', 'Lomas de Zamora', normalizar=False) self.assertEqual(res, NO_MATCH) res = matcheaTexto('lOMAS DE zAMORA', 'Lomas de Zamora', normalizar=False) self.assertEqual(res, NO_MATCH)
def test_matcheaTexto_permutado(self): res = matcheaTexto('de lomas zamora', 'Lomas de Zamora') self.assertEqual(res, MATCH_PERMUTADO) res = matcheaTexto('lomas zamora de', 'Lomas de Zamora') self.assertEqual(res, MATCH_PERMUTADO) res = matcheaTexto('zamora lomas de', 'Lomas de Zamora') self.assertEqual(res, MATCH_PERMUTADO) res = matcheaTexto('zamora de lomas', 'Lomas de Zamora') self.assertEqual(res, MATCH_PERMUTADO)
def test_matcheaTexto_incluido(self): res = matcheaTexto('Lomas', 'Lomas de Zamora') self.assertEqual(res, MATCH_INCLUIDO) res = matcheaTexto('Lomas de', 'Lomas de Zamora') self.assertEqual(res, MATCH_INCLUIDO) res = matcheaTexto('Lomas ZAMORA', 'Lomas de Zamora') self.assertEqual(res, MATCH_INCLUIDO) res = matcheaTexto('ZAMORA Lomas', 'Lomas de Zamora') self.assertEqual(res, MATCH_INCLUIDO)
def test_matcheaTexto_incluido(self): res = matcheaTexto('Lomas', 'Lomas de Zamora') self.assertEqual(res, MATCH_INCLUIDO) res = matcheaTexto('Lomas de', 'Lomas de Zamora') self.assertEqual(res, MATCH_INCLUIDO) res = matcheaTexto('Lomas ZAMORA', 'Lomas de Zamora') self.assertEqual(res, MATCH_INCLUIDO) res = matcheaTexto('ZAMORA Lomas', 'Lomas de Zamora') self.assertEqual(res, MATCH_INCLUIDO)
def test_matcheaTexto_permutado(self): res = matcheaTexto('de lomas zamora', 'Lomas de Zamora') self.assertEqual(res, MATCH_PERMUTADO) res = matcheaTexto('lomas zamora de', 'Lomas de Zamora') self.assertEqual(res, MATCH_PERMUTADO) res = matcheaTexto('zamora lomas de', 'Lomas de Zamora') self.assertEqual(res, MATCH_PERMUTADO) res = matcheaTexto('zamora de lomas', 'Lomas de Zamora') self.assertEqual(res, MATCH_PERMUTADO)
def _buscarPartidoLocalidad(self, texto, partido, localidad): retval = False palabras = re.split('\s', normalizarTexto(texto)) cant_palabras = len(palabras) for i in range(cant_palabras): texto_cortado = ' '.join(palabras[:i + 1]) if matcheaTexto(texto_cortado, partido) or matcheaTexto(texto_cortado, localidad): retval = True else: break return retval
def test_matcheaTexto_no_normalizar_no_match(self): res = matcheaTexto('Lanus', 'Lanús', normalizar=False) self.assertEqual(res, NO_MATCH) res = matcheaTexto('- (lomas, dé, zámórá)-', 'Lomas de Zamora', normalizar=False) self.assertEqual(res, NO_MATCH) res = matcheaTexto('de lomas zamora', 'Lomas de Zamora', normalizar=False) self.assertEqual(res, NO_MATCH) res = matcheaTexto('lOMAS DE zAMORA', 'Lomas de Zamora', normalizar=False) self.assertEqual(res, NO_MATCH)
def normalizarCalleYCalle(self, calle1='', calle2='', partido='', maxOptions=10): res = [[], [], [], []] if calle1 == '' or calle2 == '': raise Exception('Debe ingresar la calle y el cruce.') for nd in self.normalizadores: try: if partido == '': res[2] += nd.normalizarCalleYCalle(calle1, calle2, maxOptions) else: m = matcheaTexto(partido, nd.partido.keywords) if m: result = nd.normalizarCalleYCalle( calle1, calle2, maxOptions) if m == MATCH_EXACTO: res[0] += result elif m == MATCH_PERMUTADO: res[1] += result elif m == MATCH_INCLUIDO: res[2] += result elif m == MATCH: res[3] += result except Exception as e: pass if len(res[0] + res[1] + res[2] + res[3]): return (res[0] + res[1] + res[2] + res[3])[:maxOptions] else: raise e
def normalizarCalleYCalle(self, inCalle, inCruce, maxOptions=10): ''' Normaliza una direccion de tipo calle-calle @param inCalle: Calle a ser normalizada @type inCalle: String @param inCruce: Cruce a ser normalizado @type inCruce: String @param maxOptions: Maximo numero de opciones a retornar. Por defecto es 10. @type maxOptions: Integer @return: Las opciones halladas que se corresponden con dir @rtype: Array de Direccion ''' calles = self.c.buscarCalle(inCalle) opts = [[], [], [], [], []] for calle in calles: for idCruce in calle.cruces: cruces = self.c.buscarCodigo(idCruce) for cruce in cruces: res = matcheaTexto(inCruce, cruce[2]) if res: objCruce = Calle(cruce[0], cruce[1], [], cruce[4], calle.partido, cruce[5]) opts[res].append(Direccion(calle, 0, objCruce)) if (len(opts[MATCH_EXACTO]) >= maxOptions): break if (len(opts[MATCH_EXACTO]) >= maxOptions): break opts = (opts[MATCH_EXACTO] + opts[MATCH_PERMUTADO] + opts[MATCH_INCLUIDO] + opts[MATCH])[:maxOptions] if (len(opts) == 0 and len(calles) > 0): raise ErrorCruceInexistente(inCalle, [], inCruce, []) return opts
def normalizarCalleYCalle(self, inCalle, inCruce, maxOptions=10): ''' Normaliza una direccion de tipo calle-calle @param inCalle: Calle a ser normalizada @type inCalle: String @param inCruce: Cruce a ser normalizado @type inCruce: String @param maxOptions: Maximo numero de opciones a retornar. Por defecto es 10. @type maxOptions: Integer @return: Las opciones halladas que se corresponden con dir @rtype: Array de Direccion ''' calles = self.c.buscarCalle(inCalle) opts = [[], [], [], [], []] for calle in calles: for idCruce in calle.cruces: cruces = self.c.buscarCodigo(idCruce) for cruce in cruces: res = matcheaTexto(inCruce, cruce[2]) if res: objCruce = Calle(cruce[0], cruce[1], [], cruce[4], calle.partido, cruce[5]) opts[res].append(Direccion(calle, 0, objCruce)) if(len(opts[MATCH_EXACTO]) >= maxOptions): break if(len(opts[MATCH_EXACTO]) >= maxOptions): break opts = (opts[MATCH_EXACTO] + opts[MATCH_PERMUTADO] + opts[MATCH_INCLUIDO] + opts[MATCH])[:maxOptions] if(len(opts) == 0 and len(calles) > 0): raise ErrorCruceInexistente(inCalle, [], inCruce, []) return opts
def normalizarCalleYCalle(self, calle1='', calle2='', partido='', maxOptions=10): res = [[], [], [], []] global errorGlobal errorGlobal = None if calle1 == '' or calle2 == '': raise Exception('Debe ingresar la calle y el cruce.') for nd in self.normalizadores: try: if partido == '': res[2] += nd.normalizarCalleYCalle(calle1, calle2, maxOptions) else: m = matcheaTexto(partido, nd.partido.keywords) if m: result = nd.normalizarCalleYCalle(calle1, calle2, maxOptions) if m == MATCH_EXACTO: res[0] += result elif m == MATCH_PERMUTADO: res[1] += result elif m == MATCH_INCLUIDO: res[2] += result elif m == MATCH: res[3] += result except Exception as e: errorGlobal = e if len(res[0] + res[1] + res[2] + res[3]): return (res[0] + res[1] + res[2] + res[3])[:maxOptions] else: raise errorGlobal
def normalizarPorPartido(self, direccion, partido='', maxOptions=10): res = [[], [], [], []] for nd in self.normalizadores: try: if partido == '': res[2] += nd.normalizar(direccion, maxOptions) else: m = matcheaTexto(partido, nd.partido.keywords) if m: result = nd.normalizar(direccion, maxOptions) if m == MATCH_EXACTO: res[0] += result elif m == MATCH_PERMUTADO: res[1] += result elif m == MATCH_INCLUIDO: res[2] += result elif m == MATCH: res[3] += result except Exception, e: pass
result = nd.normalizar(direccion, maxOptions) if m == MATCH_EXACTO: res[0] += result elif m == MATCH_PERMUTADO: res[1] += result elif m == MATCH_INCLUIDO: res[2] += result elif m == MATCH: res[3] += result except Exception, e: pass if len(res[0] + res[1] + res[2] + res[3]): res = (res[0] + res[1] + res[2] + res[3]) if partido != '': res = [r for r in res if (matcheaTexto(partido, r.partido.nombre) or matcheaTexto(partido, r.localidad))] return res[:maxOptions] else: raise e def normalizarCalleYCalle(self, calle1='', calle2='', partido='', maxOptions=10): res = [[], [], [], []] if calle1 == '' or calle2 == '': raise Exception('Debe ingresar la calle y el cruce.') for nd in self.normalizadores: try: if partido == '': res[2] += nd.normalizarCalleYCalle(calle1, calle2, maxOptions) else:
def test_matcheaTexto_no_match(self): res = matcheaTexto('partido de Lomas de Zamora', 'Lomas de Zamora') self.assertEqual(res, NO_MATCH) res = matcheaTexto('Lanús', 'Lomas de Zamora') self.assertEqual(res, NO_MATCH)
def test_matcheaTexto_case(self): res = matcheaTexto('lOMAS DE zAMORA', 'Lomas de Zamora') self.assertEqual(res, MATCH_EXACTO)
def test_matcheaTexto_exacto(self): res = matcheaTexto('Lomas de Zamora', 'Lomas de Zamora') self.assertEqual(res, MATCH_EXACTO) res = matcheaTexto('Lanus', 'Lanús') self.assertEqual(res, MATCH_EXACTO)
def test_matcheaTexto_match(self): res = matcheaTexto('', 'Lomas de Zamora') self.assertEqual(res, MATCH) res = matcheaTexto('Lom ZAM', 'Lomas de Zamora') self.assertEqual(res, MATCH)
def test_matcheaTexto_normalizacion(self): res = matcheaTexto('- (lomas, dé, zámórá)-', 'Lomas de Zamora') self.assertEqual(res, MATCH_EXACTO)
def test_matcheaTexto_match(self): res = matcheaTexto('', 'Lomas de Zamora') self.assertEqual(res, MATCH) res = matcheaTexto('Lom ZAM', 'Lomas de Zamora') self.assertEqual(res, MATCH)
def test_matcheaTexto_normalizacion(self): res = matcheaTexto('- (lomas, dé, zámórá)-', 'Lomas de Zamora') self.assertEqual(res, MATCH_EXACTO)
def test_matcheaTexto_exacto(self): res = matcheaTexto('Lomas de Zamora', 'Lomas de Zamora') self.assertEqual(res, MATCH_EXACTO) res = matcheaTexto('Lanus', 'Lanús') self.assertEqual(res, MATCH_EXACTO)
def test_matcheaTexto_no_match(self): res = matcheaTexto('partido de Lomas de Zamora', 'Lomas de Zamora') self.assertEqual(res, NO_MATCH) res = matcheaTexto('Lanús', 'Lomas de Zamora') self.assertEqual(res, NO_MATCH)
def test_matcheaTexto_case(self): res = matcheaTexto('lOMAS DE zAMORA', 'Lomas de Zamora') self.assertEqual(res, MATCH_EXACTO)