Esempio n. 1
0
class CalleYCalleTestCase(unittest.TestCase):
    p = Partido('jose_c_paz', u'José C. Paz', u'Partido de José C. Paz',
                2430431)
    nd = NormalizadorDirecciones(p)
    cargarCallejeroEstatico(nd.c)

    def _checkDireccion(self, direccion, codigo_calle, nombre_calle,
                        codigo_cruce, nombre_cruce, codigo_partido, localidad):
        self.assertTrue(isinstance(direccion, Direccion))
        self.assertEqual(direccion.tipo, CALLE_Y_CALLE)
        self.assertEqual(direccion.calle.codigo, codigo_calle)
        self.assertEqual(direccion.calle.nombre, nombre_calle)
        self.assertEqual(direccion.cruce.codigo, codigo_cruce)
        self.assertEqual(direccion.cruce.nombre, nombre_cruce)
        self.assertEqual(direccion.partido.codigo, codigo_partido)
        self.assertEqual(direccion.localidad, localidad)

    def testCalleInexistente01(self):
        self.assertRaises(ErrorCalleInexistente, self.nd.normalizar,
                          u'Elm street y Roque Sáenz Peña')

    def testCalleInexistente02(self):
        self.assertRaises(ErrorCruceInexistente, self.nd.normalizar,
                          u'Roque Sáenz Peña y kokusai dori')

    def testCalle1UnicaCalle2UnicaCruceInexistente(self):
        try:
            self.nd.normalizar('Mateo Bootz y pavon')
        except Exception, e:
            self.assertTrue(isinstance(e, ErrorCruceInexistente))
Esempio n. 2
0
class CalleAlturaTestCase(unittest.TestCase):
    p = Partido('jose_c_paz', u'José C. Paz', u'Partido de José C. Paz',
                2430431)
    nd_jcp = NormalizadorDirecciones(p)
    cargarCallejeroEstatico(nd_jcp.c)

    p = Partido('la_plata', u'La Plata', u'Partido de La Plata', 2499263)
    nd_lp = NormalizadorDirecciones(p)
    cargarCallejeroEstatico(nd_lp.c)

    def _checkDireccion(self, direccion, codigo, nombre, altura):
        self.assertTrue(isinstance(direccion, Direccion))
        self.assertEqual(direccion.calle.codigo, codigo)
        self.assertEqual(direccion.calle.nombre, nombre)
        self.assertEqual(direccion.altura, altura)

    def testCalleInexistente(self):
        self.assertRaises(ErrorCalleInexistente, self.nd_jcp.normalizar,
                          "Evergreen Terrace 742")

    def testCalleInexistente2(self):
        self.assertRaises(ErrorCalleInexistente, self.nd_jcp.normalizar,
                          "av arcos 1234")

    def testUnicaCalleExistente(self):
        res = self.nd_jcp.normalizar(u'Roque Sáenz Peña 5050')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, "Deberia haber un unico matching")
        self._checkDireccion(res[0], 77440, u'Roque Sáenz Peña', 5050)

    def testUnicaCalleExistenteConAlturaInexistente(self):
        self.assertRaises(ErrorCalleInexistenteAEsaAltura,
                          self.nd_jcp.normalizar, u'Roque Sáenz Peña 505')

    def testMuchasCallesSinAlturaValida(self):
        try:
            self.nd_jcp.normalizar(u'santiago 5000')
            self.assertTrue(False, "Si llega aca es que no tiro la excepcion")
        except Exception, e:
            self.assertTrue(isinstance(e, ErrorCalleInexistenteAEsaAltura))
Esempio n. 3
0
class NormalizadorDireccionesAMBACalleAlturaTestCase(unittest.TestCase):
    partidos = [
        'almirante_brown', 'jose_c_paz', 'lomas_de_zamora', 'quilmes',
        'san_isidro', 'vicente_lopez'
    ]
    nd = NormalizadorDireccionesAMBA(include_list=partidos)
    for n in nd.normalizadores:
        cargarCallejeroEstatico(n.c)

    def _checkDireccion(self, direccion, codigo, nombre, altura,
                        codigo_partido, localidad):
        self.assertTrue(isinstance(direccion, Direccion))
        self.assertEqual(direccion.calle.codigo, codigo)
        self.assertEqual(direccion.calle.nombre, nombre)
        self.assertEqual(direccion.altura, altura)
        self.assertEqual(direccion.partido.codigo, codigo_partido)
        self.assertEqual(direccion.localidad, localidad)

    def testNormalizador_NomalizarCalleInexistente(self):
        self.assertRaises(ErrorCalleInexistente, self.nd.normalizar,
                          'kokusai dori 1865')

    def testNormalizador_NomalizarDireccionInexistenteEnPartido(self):
        self.assertRaises(ErrorCalleInexistente, self.nd.normalizar,
                          'O\'Higgins 1479, Lomas de Zamora')

    def testNormalizador_RestaurantDeLosKao(self):
        res = self.nd.normalizar(u'O\'Higgins 1479, Florida')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(
            len(res), 1,
            u'Debería haber 1 matching/s. Hay {0}'.format(len(res)))
        self._checkDireccion(res[0], 4882, u'O\'Higgins', 1479,
                             'vicente_lopez', u'Florida')

    def testNormalizador_DireccionEnVariosPartidos(self):
        res = self.nd.normalizar(u'pavón 4450')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(
            len(res), 2,
            u'Debería haber 2 matching/s. Hay {0}'.format(len(res)))
        self._checkDireccion(res[0], 278904, u'Pavón', 4450, 'jose_c_paz',
                             u'José C. Paz')
        self._checkDireccion(res[1], 214876, u'Diagonal Pavón', 4450,
                             'vicente_lopez', u'Florida Oeste')
Esempio n. 4
0
class NormalizadorDireccionesAMBACalleYCalleTestCase(unittest.TestCase):
    partidos = [
        'hurlingham', 'ituzaingo', 'jose_c_paz', 'la_matanza', 'san_isidro',
        'san_miguel'
    ]
    nd = NormalizadorDireccionesAMBA(include_list=partidos)
    for n in nd.normalizadores:
        cargarCallejeroEstatico(n.c)

    def _checkDireccion(self, direccion, codigo_calle, nombre_calle,
                        codigo_cruce, nombre_cruce, codigo_partido, localidad):
        self.assertTrue(isinstance(direccion, Direccion))
        self.assertEqual(direccion.tipo, CALLE_Y_CALLE)
        self.assertEqual(direccion.calle.codigo, codigo_calle)
        self.assertEqual(direccion.calle.nombre, nombre_calle)
        self.assertEqual(direccion.cruce.codigo, codigo_cruce)
        self.assertEqual(direccion.cruce.nombre, nombre_cruce)
        self.assertEqual(direccion.partido.codigo, codigo_partido)
        self.assertEqual(direccion.localidad, localidad)

    def testCalleInexistente01(self):
        self.assertRaises(ErrorCalleInexistente, self.nd.normalizar,
                          u'Elm street y Roque Sáenz Peña')

    def testCalleInexistente02(self):
        self.assertRaises(ErrorCruceInexistente, self.nd.normalizar,
                          u'Roque Sáenz Peña y kokusai dori')

    def testDireccionExistentePeroEnOtroPartido(self):
        res = self.nd.normalizar(u'Europa y Darwin, Ituzaingo')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(
            len(res), 1,
            u'Debería haber 1 matching/s. Hay {0}'.format(len(res)))
        self._checkDireccion(res[0], 6895, u'Europa', 6953, u'Darwin',
                             'ituzaingo', u'Ituzaingó')

        self.assertRaises(ErrorCalleInexistente, self.nd.normalizar,
                          u'Europa y Darwin, La Matanza')

    def testDireccionExistentePeroEnOtraLocalidad(self):
        res = self.nd.normalizar(u'Europa y Darwin, Ituzaingo')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(
            len(res), 1,
            u'Debería haber 1 matching/s. Hay {0}'.format(len(res)))
        self._checkDireccion(res[0], 6895, u'Europa', 6953, u'Darwin',
                             'ituzaingo', u'Ituzaingó')

        self.assertRaises(ErrorCalleInexistente, self.nd.normalizar,
                          u'Europa y Darwin, Villa Udaondo')

    def testNormalizador_DireccionEnVariosPartidos(self):
        res = self.nd.normalizar(u'san martin y peron')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(
            len(res), 2,
            u'Debería haber 2 matching/s. Hay {0}'.format(len(res)))
        self._checkDireccion(res[0], 46673, u'Avenida General San Martín',
                             82054, u'Av. Eva Perón', 'la_matanza',
                             u'Ramos Mejia')
        self._checkDireccion(res[1], 12124, u'General José de San Martín',
                             293550, u'Avenida Eva Duarte de Perón',
                             'san_miguel', u'Campo de Mayo')

    def testNormalizador_PartidoConNumero(self):
        res = self.nd.normalizar(
            u'Pablo Ceretti y Jorge Cardassy, 20 de Junio')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(
            len(res), 1,
            u'Debería haber 1 matching/s. Hay {0}'.format(len(res)))
        self._checkDireccion(res[0], 232752, u'Pablo Ceretti', 232731,
                             u'Jorge Cardassy', 'la_matanza', u'20 de Junio')
Esempio n. 5
0
class BuscadorDireccionesTestCase(unittest.TestCase):
    p = Partido('lomas_de_zamora', u'Lomas de Zamora', u'Partido de Lomas de Zamora', 2400639)
    nd = NormalizadorDirecciones(p)
    cargarCallejeroEstatico(nd.c)

    def _checkDireccionCalleAltura(self, direccion, codigo_calle, nombre_calle, altura_calle, codigo_partido, localidad):
        self.assertTrue(isinstance(direccion, Direccion))
        self.assertEqual(direccion.tipo, CALLE_ALTURA)
        self.assertEqual(direccion.calle.codigo, codigo_calle)
        self.assertEqual(direccion.calle.nombre, nombre_calle)
        self.assertEqual(direccion.altura, altura_calle)
        self.assertEqual(direccion.partido.codigo, codigo_partido)
        self.assertEqual(direccion.localidad, localidad)

    def _checkDireccionCalleYCalle(self, direccion, codigo_calle, nombre_calle, codigo_cruce, nombre_cruce, codigo_partido, localidad):
        self.assertTrue(isinstance(direccion, Direccion))
        self.assertEqual(direccion.tipo, CALLE_Y_CALLE)
        self.assertEqual(direccion.calle.codigo, codigo_calle)
        self.assertEqual(direccion.calle.nombre, nombre_calle)
        self.assertEqual(direccion.cruce.codigo, codigo_cruce)
        self.assertEqual(direccion.cruce.nombre, nombre_cruce)
        self.assertEqual(direccion.partido.codigo, codigo_partido)
        self.assertEqual(direccion.localidad, localidad)

    def test_Error_en_texto_vacio(self):
        self.assertRaises(ErrorTextoSinDireccion, self.nd.buscarDireccion, '')

    def test_Error_en_texto_sin_y_e_o_numeros(self):
        self.assertRaises(ErrorTextoSinDireccion, self.nd.buscarDireccion, u'Este texto no tiene dirección.')

    def test_Error_en_texto_con_palabra_con_y(self):
        self.assertRaises(ErrorTextoSinDireccion, self.nd.buscarDireccion, u'Este texto no tiene dirección, pero tiene yeeee.')

################
# Calle altura #
################

    def test_Error_en_texto_que_no_es_direccion(self):
        self.assertRaises(ErrorTextoSinDireccion, self.nd.buscarDireccion, 'Kokusai Doori 1262')

    def test_Error_direccion_con_altura_invalida(self):
        self.assertRaises(ErrorTextoSinDireccion, self.nd.buscarDireccion, 'Arenales 2563')

    def test_CalleAltura_al_comienzo_del_texto(self):
        res = self.nd.buscarDireccion(u'Loria 341, a metros de la estación.')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 0)
        self.assertEqual(res[0]['texto'], u'Loria 341')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 18074, u'Mariano Sánchez de Loria', 341, 'lomas_de_zamora', 'Lomas de Zamora')

    def test_CalleAltura_al_final_del_texto(self):
        res = self.nd.buscarDireccion(u'Cerca de la estación de lomas. Laprida 11')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 31)
        self.assertEqual(res[0]['texto'], u'Laprida 11')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 18028, u'Laprida', 11, 'lomas_de_zamora', 'Lomas de Zamora')

    def test_CalleAltura_al_comienzo_y_al_final_del_texto(self):
        res = self.nd.buscarDireccion(u'Belgrano 840')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 0)
        self.assertEqual(res[0]['texto'], u'Belgrano 840')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 34017, u'Belgrano', 840, 'lomas_de_zamora', 'Lomas de Zamora')

    def test_CalleAltuta_conector_al(self):
        # Sin conector:
        res = self.nd.buscarDireccion(u'Ubicado en Boedo 150, a metros de la estación de Lomas de Zamora.')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 11)
        self.assertEqual(res[0]['texto'], u'Boedo 150')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 323730, u'Mariano Boedo', 150, 'lomas_de_zamora', 'Lomas de Zamora')

        # Con conector:
        res = self.nd.buscarDireccion(u'Ubicado en Boedo al 150, a metros de la estación de Lomas de Zamora.')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 11)
        self.assertEqual(res[0]['texto'], u'Boedo al 150')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 323730, u'Mariano Boedo', 150, 'lomas_de_zamora', 'Lomas de Zamora')

        # Palabra que termina con el conector (al)
        res = self.nd.buscarDireccion(u'Ubicado en Arenal 53, a metros de la estación de Lomas de Zamora.')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 11)
        self.assertEqual(res[0]['texto'], u'Arenal 53')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 360326, u'General Arenales', 53, 'lomas_de_zamora', 'Lomas de Zamora')

    def test_CalleAltura_calle_con_y(self):
        res = self.nd.buscarDireccion(u'Ubicado en Carlos Guido y Spano 701, a metros de la estación de Lomas de Zamora.')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 11)
        self.assertEqual(res[0]['texto'], u'Carlos Guido y Spano 701')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 20400, u'Carlos Guido y Spano', 701, 'lomas_de_zamora', 'Temperley')

    def test_CalleAltura_calle_con_1_o_mas_palabras(self):
        # 1 palabra
        res = self.nd.buscarDireccion(u'Ubicado en Pedernera 86, a metros de la estación de Lomas de Zamora.')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 11)
        self.assertEqual(res[0]['texto'], u'Pedernera 86')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 34037, u'Pedernera', 86, 'lomas_de_zamora', 'Lomas de Zamora')

        # 2 palabras
        res = self.nd.buscarDireccion(u'Ubicado en Julio Fonrouge 356, a metros de la estación de Lomas de Zamora.')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 11)
        self.assertEqual(res[0]['texto'], u'Julio Fonrouge 356')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 160708, u'Julio Fonrouge', 356, 'lomas_de_zamora', 'Lomas de Zamora')

        # 3 palabras
        res = self.nd.buscarDireccion(u'Ubicado en Monseñor Alejandro Schell 166, a metros de la estación de Lomas de Zamora.')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 11)
        self.assertEqual(res[0]['texto'], u'Monseñor Alejandro Schell 166')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 34039, u'Monseñor Alejandro Schell', 166, 'lomas_de_zamora', 'Lomas de Zamora')

        # 4 palabras
        res = self.nd.buscarDireccion(u'Ubicado en Capitán de Fragata Moyano 701, a metros de la estación de Lomas de Zamora.')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 11)
        self.assertEqual(res[0]['texto'], u'Capitán de Fragata Moyano 701')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 30647, u'Capitán de Fragata Moyano', 701, 'lomas_de_zamora', 'Llavallol')

        # un exceso...
        res = self.nd.buscarDireccion(u'Ubicado en Av. General Carlos María de Alvear 426, a metros de la estación de Lomas de Zamora.')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 11)
        self.assertEqual(res[0]['texto'], u'Av. General Carlos María de Alvear 426')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 18772, u'Av. General Carlos María de Alvear', 426, 'lomas_de_zamora', 'Lomas de Zamora')

    def test_CalleAltura_calle_string_y_unicode(self):
        # string
        res = self.nd.buscarDireccion('Ubicado en sarandi 359.')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 11)
        self.assertEqual(res[0]['texto'], 'sarandi 359')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 34004, u'Sarandi', 359, 'lomas_de_zamora', 'Lomas de Zamora')

        # unicode
        res = self.nd.buscarDireccion(u'Ubicado en sarandí 359.')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 11)
        self.assertEqual(res[0]['texto'], u'sarandí 359')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 34004, u'Sarandi', 359, 'lomas_de_zamora', 'Lomas de Zamora')

    def test_CalleAltura_2_direcciones(self):
        res = self.nd.buscarDireccion(u'Ubicado en balcarce 325 y balcarce 327')
        self.assertEqual(len(res), 2)

        self.assertEqual(res[0]['posicion'], 11)
        self.assertEqual(res[0]['texto'], u'balcarce 325')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 34011, u'Balcarce', 325, 'lomas_de_zamora', 'Lomas de Zamora')

        self.assertEqual(res[1]['posicion'], 26)
        self.assertEqual(res[1]['texto'], u'balcarce 327')
        self._checkDireccionCalleAltura(res[1]['direcciones'][0], 34011, u'Balcarce', 327, 'lomas_de_zamora', 'Lomas de Zamora')

    def test_CalleAltura_direccion_ambigua(self):
        res = self.nd.buscarDireccion(u'Ubicado en la calle martín 731')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 20)
        self.assertEqual(res[0]['texto'], u'martín 731')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 18763, u'General José de San Martín', 731, 'lomas_de_zamora', 'Lomas de Zamora')
        self._checkDireccionCalleAltura(res[0]['direcciones'][1], 19098, u'Martín Capello', 731, 'lomas_de_zamora', 'Banfield')
        self._checkDireccionCalleAltura(res[0]['direcciones'][2], 19144, u'Av. General Martín Rodríguez', 731, 'lomas_de_zamora', 'Villa Centenario')

    def test_CalleAltura_direccion_con_calle_con_numero(self):
        res = self.nd.buscarDireccion(u'12 de octubre 535')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 0)
        self.assertEqual(res[0]['texto'], u'12 de octubre 535')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 18579, u'12 de Octubre', 535, 'lomas_de_zamora', 'Lomas de Zamora')

    def test_CalleAltura_ejemplos_que_motivaron_esta_funcion_y_otros(self):
        # Direccion con piso y depto
        res = self.nd.buscarDireccion(u'Loria 341 piso 5 dpto C.')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 0)
        self.assertEqual(res[0]['texto'], u'Loria 341')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 18074, u'Mariano Sánchez de Loria', 341, 'lomas_de_zamora', 'Lomas de Zamora')

        # Direccion con varias alturas
        res = self.nd.buscarDireccion(u'Dirección: Portela 576/578/580')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 11)
        self.assertEqual(res[0]['texto'], u'Portela 576')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 18287, u'Francisco Portela', 576, 'lomas_de_zamora', 'Lomas de Zamora')

        # Direccion con codigo postal
        res = self.nd.buscarDireccion(u'boedo 367, cp 1832')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 0)
        self.assertEqual(res[0]['texto'], u'boedo 367')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 323730, u'Mariano Boedo', 367, 'lomas_de_zamora', 'Lomas de Zamora')

        # Direccion formato calle al altura
        res = self.nd.buscarDireccion(u'Palacios al 1200')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 0)
        self.assertEqual(res[0]['texto'], u'Palacios al 1200')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 628, u'General Palacios', 1200, 'lomas_de_zamora', 'Banfield')

        # Direccion con calles laterales
        res = self.nd.buscarDireccion(u'España 37 - Entre Gorriti y Laprida')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 0)
        self.assertEqual(res[0]['texto'], u'España 37')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 18117, u'España', 37, 'lomas_de_zamora', 'Lomas de Zamora')

        # Direccion con calles laterales
        res = self.nd.buscarDireccion(u'Av. H. Yrigoyen 9399 esq. Oliden')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 0)
        self.assertEqual(res[0]['texto'], u'Av. H. Yrigoyen 9399')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 252522, u'Avenida Hipólito Yrigoyen', 9399, 'lomas_de_zamora', 'Lomas de Zamora')

        # Direccion con zonas de referencia
        res = self.nd.buscarDireccion(u'Vicente Oliden 2385 -Parque Barón - Lomas de Zamora')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 0)
        self.assertEqual(res[0]['texto'], u'Vicente Oliden 2385')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 18214, u'Vicente Oliden', 2385, 'lomas_de_zamora', 'Lomas de Zamora')

    def test_CalleYCalle_ojo_con_este_caso_calle_con_numeros_al_comienzo(self):
        res = self.nd.buscarDireccion(u'30 de Septiembre 3750, a metros de la estación.')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 0)
        self.assertEqual(res[0]['texto'], u'30 de Septiembre 3750')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 123232, u'30 de Septiembre', 3750, 'lomas_de_zamora', 'Temperley')

    def test_CalleYCalle_ojo_con_este_caso_calle_con_numeros_en_medio(self):
        res = self.nd.buscarDireccion(u'Ubicado en 30 de Septiembre 3750, a metros de la estación.')
        self.assertEqual(len(res), 2)

        self.assertEqual(res[0]['posicion'], 8)
        self.assertEqual(res[0]['texto'], u'en 30')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 18586, u'Entre Ríos', 30, 'lomas_de_zamora', 'Lomas de Zamora')
        self._checkDireccionCalleAltura(res[0]['direcciones'][1], 18600, u'Enrique Sántos Discépolo', 30, 'lomas_de_zamora', 'Lomas de Zamora')
        self._checkDireccionCalleAltura(res[0]['direcciones'][2], 45454, u'Blanco Encalada', 30, 'lomas_de_zamora', 'Temperley')

        self.assertEqual(res[1]['posicion'], 11)
        self.assertEqual(res[1]['texto'], u'30 de Septiembre 3750')
        self._checkDireccionCalleAltura(res[1]['direcciones'][0], 123232, u'30 de Septiembre', 3750, 'lomas_de_zamora', 'Temperley')

#################
# Calle y calle #
#################

    def test_error_en_texto_que_no_es_esquina(self):
        # no calle y no calle
        self.assertRaises(ErrorTextoSinDireccion, self.nd.buscarDireccion, u'Kokusai Doori y aoi michi')
        self.assertRaises(ErrorTextoSinDireccion, self.nd.buscarDireccion, u'国際通り y 青道')
        # calle y no calle
        self.assertRaises(ErrorTextoSinDireccion, self.nd.buscarDireccion, u'Laprida y aoi michi')
        # no calle y calle
        self.assertRaises(ErrorTextoSinDireccion, self.nd.buscarDireccion, u'Kokusai Doori y Boedo')

    def test_error_en_calles_que_no_se_cruzan(self):
        self.assertRaises(ErrorTextoSinDireccion, self.nd.buscarDireccion, u'Fonrouge y Lamadrid')

    def test_CalleYCalle_direccion_en_distintas_parte_del_texto(self):
        # Comienzo
        res = self.nd.buscarDireccion(u'Loria y Sarmiento, a metros de la estación.')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 0)
        self.assertEqual(res[0]['texto'], u'Loria y Sarmiento,')
        self._checkDireccionCalleYCalle(res[0]['direcciones'][0], 18074, u'Mariano Sánchez de Loria', 18120, u'Domingo Faustino Sarmiento', 'lomas_de_zamora', u'Lomas de Zamora')
        # Medio
        res = self.nd.buscarDireccion(u'Ubicado en Loria y Sarmiento, a metros de la estación.')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 11)
        self.assertEqual(res[0]['texto'], u'Loria y Sarmiento,')
        self._checkDireccionCalleYCalle(res[0]['direcciones'][0], 18074, u'Mariano Sánchez de Loria', 18120, u'Domingo Faustino Sarmiento', 'lomas_de_zamora', u'Lomas de Zamora')
        # Final
        res = self.nd.buscarDireccion(u'Ubicado en Loria y Sarmiento.')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 11)
        self.assertEqual(res[0]['texto'], u'Loria y Sarmiento.')
        self._checkDireccionCalleYCalle(res[0]['direcciones'][0], 18074, u'Mariano Sánchez de Loria', 18120, u'Domingo Faustino Sarmiento', 'lomas_de_zamora', u'Lomas de Zamora')
        # Comienzo y final
        res = self.nd.buscarDireccion(u'Loria y Sarmiento')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 0)
        self.assertEqual(res[0]['texto'], u'Loria y Sarmiento')
        self._checkDireccionCalleYCalle(res[0]['direcciones'][0], 18074, u'Mariano Sánchez de Loria', 18120, u'Domingo Faustino Sarmiento', 'lomas_de_zamora', u'Lomas de Zamora')

    def test_CalleYCalle_direcciones_con_y_y_con_e(self):
        # Con y
        res = self.nd.buscarDireccion(u'Loria y España')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 0)
        self.assertEqual(res[0]['texto'], u'Loria y España')
        self._checkDireccionCalleYCalle(res[0]['direcciones'][0], 18074, u'Mariano Sánchez de Loria', 18117, u'España', 'lomas_de_zamora', u'Lomas de Zamora')
        # Con e
        res = self.nd.buscarDireccion(u'Loria e Italia')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 0)
        self.assertEqual(res[0]['texto'], u'Loria e Italia')
        self._checkDireccionCalleYCalle(res[0]['direcciones'][0], 18074, u'Mariano Sánchez de Loria', 18119, u'Italia', 'lomas_de_zamora', u'Lomas de Zamora')

    def test_CalleYCalle_direccion_con_calles_de_una_palabra(self):
        res = self.nd.buscarDireccion(u'Arenales y Fonrouge')
        self.assertEqual(len(res), 1, u'Debería haber 1 dirección. Hay {0}'.format(len(res)))
        self.assertEqual(len(res[0]['direcciones']), 1, u'Debería haber 1 matching/s. Hay {0}'.format(len(res[0]['direcciones'])))
        self.assertEqual(res[0]['posicion'], 0)
        self.assertEqual(res[0]['texto'], u'Arenales y Fonrouge')
        self._checkDireccionCalleYCalle(res[0]['direcciones'][0], 360326, u'General Arenales', 160708, u'Julio Fonrouge', 'lomas_de_zamora', u'Lomas de Zamora')

        res = self.nd.buscarDireccion(u'Loria e italia')
        self.assertEqual(len(res), 1, u'Debería haber 1 dirección. Hay {0}'.format(len(res)))
        self.assertEqual(len(res[0]['direcciones']), 1, u'Debería haber 1 matching/s. Hay {0}'.format(len(res[0]['direcciones'])))
        self.assertEqual(res[0]['posicion'], 0)
        self.assertEqual(res[0]['texto'], u'Loria e italia')
        self._checkDireccionCalleYCalle(res[0]['direcciones'][0], 18074, u'Mariano Sánchez de Loria', 18119, u'Italia', 'lomas_de_zamora', u'Lomas de Zamora')

        res = self.nd.buscarDireccion(u'malabia y palacios')
        self.assertEqual(len(res), 1, u'Debería haber 1 dirección. Hay {0}'.format(len(res)))
        self.assertEqual(len(res[0]['direcciones']), 1, u'Debería haber 1 matching/s. Hay {0}'.format(len(res[0]['direcciones'])))
        self.assertEqual(res[0]['posicion'], 0)
        self.assertEqual(res[0]['texto'], u'malabia y palacios')
        self._checkDireccionCalleYCalle(res[0]['direcciones'][0], 553, u'Malabia', 628, u'General Palacios', 'lomas_de_zamora', u'Banfield')

        res = self.nd.buscarDireccion(u'brown y peron')
        self.assertEqual(len(res), 1, u'Debería haber 1 dirección. Hay {0}'.format(len(res)))
        self.assertEqual(len(res[0]['direcciones']), 1, u'Debería haber 1 matching/s. Hay {0}'.format(len(res[0]['direcciones'])))
        self.assertEqual(res[0]['posicion'], 0)
        self.assertEqual(res[0]['texto'], u'brown y peron')
        self._checkDireccionCalleYCalle(res[0]['direcciones'][0], 25606, u'Almirante Brown', 196982, u'Av. Eva Perón', 'lomas_de_zamora', u'Temperley')

    def test_CalleYCalle_direccion_con_calles_de_mas_de_una_palabra(self):
        res = self.nd.buscarDireccion(u'General Arenales y Julio Fonrouge')
        self.assertEqual(len(res), 1, u'Debería haber 1 dirección. Hay {0}'.format(len(res)))
        self.assertEqual(len(res[0]['direcciones']), 1, u'Debería haber 1 matching/s. Hay {0}'.format(len(res[0]['direcciones'])))
        self.assertEqual(res[0]['posicion'], 0)
        self.assertEqual(res[0]['texto'], u'General Arenales y Julio Fonrouge')
        self._checkDireccionCalleYCalle(res[0]['direcciones'][0], 360326, u'General Arenales', 160708, u'Julio Fonrouge', 'lomas_de_zamora', u'Lomas de Zamora')

    def test_CalleYCalle_el_orden_de_los_factores_altera_el_producto(self):
        res = self.nd.buscarDireccion(u'Arenales y Fonrouge')
        self.assertEqual(len(res), 1, u'Debería haber 1 dirección. Hay {0}'.format(len(res)))
        self.assertEqual(len(res[0]['direcciones']), 1, u'Debería haber 1 matching/s. Hay {0}'.format(len(res[0]['direcciones'])))
        self._checkDireccionCalleYCalle(res[0]['direcciones'][0], 360326, u'General Arenales', 160708, u'Julio Fonrouge', 'lomas_de_zamora', u'Lomas de Zamora')

        res = self.nd.buscarDireccion(u'Fonrouge y Arenales')
        self.assertEqual(len(res), 1, u'Debería haber 1 dirección. Hay {0}'.format(len(res)))
        self.assertEqual(len(res[0]['direcciones']), 1, u'Debería haber 1 matching/s. Hay {0}'.format(len(res[0]['direcciones'])))
        self._checkDireccionCalleYCalle(res[0]['direcciones'][0], 160708, u'Julio Fonrouge', 360326, u'General Arenales', 'lomas_de_zamora', u'Lomas de Zamora')

    def test_CalleYCalle_ojo_con_este_caso_palabra_colada(self):
        res = self.nd.buscarDireccion(u'Loria y Meeks, a metros de la estación.')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 0)
        self.assertEqual(res[0]['texto'], u'Loria y Meeks, a')
        self._checkDireccionCalleYCalle(res[0]['direcciones'][0], 18074, u'Mariano Sánchez de Loria', 18112, u'Av. Meeks', 'lomas_de_zamora', u'Lomas de Zamora')
Esempio n. 6
0
class NormalizadorDireccionesAMBAConCabaTestCase(unittest.TestCase):
    partidos = ['caba', 'lomas_de_zamora', 'jose_c_paz']
    nd = NormalizadorDireccionesAMBA(include_list=partidos)
    for n in nd.normalizadores:
        if n.partido.codigo != 'caba':
            cargarCallejeroEstatico(n.c)

    def _checkDireccion(self, direccion, codigo_calle, nombre_calle, altura,
                        codigo_partido, localidad):
        self.assertTrue(isinstance(direccion, Direccion))
        self.assertEqual(direccion.tipo, CALLE_ALTURA)
        self.assertEqual(direccion.calle.codigo, codigo_calle)
        self.assertEqual(direccion.calle.nombre, nombre_calle)
        self.assertEqual(direccion.altura, altura)
        self.assertEqual(direccion.partido.codigo, codigo_partido)
        self.assertEqual(direccion.localidad, localidad)

    def testDireccionEnCabaYConurbano(self):
        res = self.nd.normalizar(u'Arenales 806')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(
            len(res), 3,
            u'Debería haber 3 matching/s. Hay {0}'.format(len(res)))

        self._checkDireccion(res[0], 1104, u'ARENALES', 806, 'caba', u'CABA')
        self._checkDireccion(res[1], 53565, u'Gral Arenales', 806,
                             'jose_c_paz', u'José C. Paz')
        self._checkDireccion(res[2], 360326, u'General Arenales', 806,
                             'lomas_de_zamora', u'Lomas de Zamora')

    def testDireccionSoloEnCaba(self):
        res = self.nd.normalizar(u'Callao 1536')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(
            len(res), 1,
            u'Debería haber 1 matching/s. Hay {0}'.format(len(res)))

        self._checkDireccion(res[0], 3030, u'CALLAO AV.', 1536, 'caba',
                             u'CABA')

    def testDireccionSoloEnConurbano(self):
        res = self.nd.normalizar(u'Laprida 890')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(
            len(res), 2,
            u'Debería haber 2 matching/s. Hay {0}'.format(len(res)))

        self._checkDireccion(res[0], 156179, u'Laprida', 890, 'jose_c_paz',
                             u'José C. Paz')
        self._checkDireccion(res[1], 18028, u'Laprida', 890, 'lomas_de_zamora',
                             u'Lomas de Zamora')

    def testDireccionEnCabaYConurbanoConFiltroEnCaba(self):
        res = self.nd.normalizar(u'Arenales 806, caba')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(
            len(res), 1,
            u'Debería haber 1 matching/s. Hay {0}'.format(len(res)))

        self._checkDireccion(res[0], 1104, u'ARENALES', 806, 'caba', u'CABA')

    def testDireccionEnCabaYConurbanoConFiltroEnConurbano1(self):
        res = self.nd.normalizar(u'Arenales 806, lomas')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(
            len(res), 1,
            u'Debería haber 1 matching/s. Hay {0}'.format(len(res)))

        self._checkDireccion(res[0], 360326, u'General Arenales', 806,
                             'lomas_de_zamora', u'Lomas de Zamora')

    def testDireccionEnCabaYConurbanoConFiltroEnConurbano2(self):
        res = self.nd.normalizar(u'Arenales 806, Jose c Paz')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(
            len(res), 1,
            u'Debería haber 1 matching/s. Hay {0}'.format(len(res)))

        self._checkDireccion(res[0], 53565, u'Gral Arenales', 806,
                             'jose_c_paz', u'José C. Paz')

    def testNormalizador_normalizar_calles_como_av_o_pje(self):
        casos = [
            u'Avenida Paraná 853, caba', u'Paraná avenida 853, caba',
            u'Paraná avda 853, caba', u'AV. Paraná 853, caba',
            u'Pasaje Paraná 853, caba', u'Psje. Paraná 853, caba',
            u'Paraná pje. 853, caba'
        ]
        for caso in casos:
            res = self.nd.normalizar(caso)
            self.assertTrue(isinstance(res, list))
            self.assertEqual(len(res), 1, u'Debería haber 1 matching.')
            self._checkDireccion(res[0], 17018, u'PARANA', 853, 'caba',
                                 u'CABA')
Esempio n. 7
0
class NormalizadorDireccionesAMBATestCase(unittest.TestCase):
    partidos = ['hurlingham', 'ituzaingo', 'jose_c_paz', 'la_matanza', 'san_isidro', 'san_miguel']
    nd = NormalizadorDireccionesAMBA(include_list=partidos)
    for n in nd.normalizadores:
        cargarCallejeroEstatico(n.c)

    def _checkCalle(self, calle, codigo, nombre, codigo_partido, localidad):
        self.assertTrue(isinstance(calle, Calle))
        self.assertEqual(calle.codigo, codigo)
        self.assertEqual(calle.nombre, nombre)
        self.assertEqual(calle.partido.codigo, codigo_partido)
        self.assertEqual(calle.localidad, localidad)

    def testNormalizador_NomalizarCalleInexistente(self):
        self.assertRaises(ErrorCalleInexistente, self.nd.normalizar, 'kokusai dori')

    def testNormalizador_NormalizarCalleExistenteBusquedaEnTodosLosPartidos(self):
        res = self.nd.normalizar(u'acevedo')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 5, u'Debería haber 5 matching/s. Hay {0}'.format(len(res)))
        self._checkCalle(res[0], 52498, u'Acevedo Eduardo', 'hurlingham', u'Hurlingham')
        self._checkCalle(res[1], 174423, u'Manuel Acevedo', 'ituzaingo', u'Ituzaingó')
        self._checkCalle(res[2], 46174, u'Acevedo', 'la_matanza', u'Lomas del Mirador')
        self._checkCalle(res[3], 46346, u'Acevedo', 'la_matanza', u'La Tablada')
        self._checkCalle(res[4], 49987, u'Padre Acevedo', 'san_isidro', u'Beccar')

    def testNormalizador_NormalizarCalleExistentePorPartido01(self):
        res = self.nd.normalizar(u'acevedo, hurlingham')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, u'Debería haber 1 matching/s. Hay {0}'.format(len(res)))
        self._checkCalle(res[0], 52498, u'Acevedo Eduardo', 'hurlingham', u'Hurlingham')

        res = self.nd.normalizar(u'acevedo, hur')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, u'Debería haber 1 matching/s. Hay {0}'.format(len(res)))
        self._checkCalle(res[0], 52498, u'Acevedo Eduardo', 'hurlingham', u'Hurlingham')

    def testNormalizador_NormalizarCalleExistentePorPartido02(self):
        res = self.nd.normalizar(u'acevedo, ituzaingo')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, u'Debería haber 1 matching/s. Hay {0}'.format(len(res)))
        self._checkCalle(res[0], 174423, u'Manuel Acevedo', 'ituzaingo', u'Ituzaingó')

        res = self.nd.normalizar(u'acevedo, itu')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, u'Debería haber 1 matching/s. Hay {0}'.format(len(res)))
        self._checkCalle(res[0], 174423, u'Manuel Acevedo', 'ituzaingo', u'Ituzaingó')

    def testNormalizador_NormalizarCalleExistentePorPartido03(self):
        res = self.nd.normalizar(u'acevedo, Beccar')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, u'Debería haber 1 matching/s. Hay {0}'.format(len(res)))
        self._checkCalle(res[0], 49987, u'Padre Acevedo', 'san_isidro', u'Beccar')

        res = self.nd.normalizar(u'acevedo, padre')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, u'Debería haber 1 matching/s. Hay {0}'.format(len(res)))
        self._checkCalle(res[0], 49987, u'Padre Acevedo', 'san_isidro', u'Beccar')

    def testNormalizador_NormalizarNombresPermutado(self):
        res = self.nd.normalizar(u'acevedo manuel, ituzaingo')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, u'Debería haber 1 matching/s. Hay {0}'.format(len(res)))
        self._checkCalle(res[0], 174423, u'Manuel Acevedo', 'ituzaingo', u'Ituzaingó')

    def testNormalizador_NormalizarNombreIncompleto(self):
        res = self.nd.normalizar(u'Compos Santi')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, u'Debería haber 1 matching/s. Hay {0}'.format(len(res)))
        self._checkCalle(res[0], 53658, u'Santiago de Compostela', 'jose_c_paz', u'José C. Paz')

    def testNormalizador_NormalizarNombreConAcentoYCase(self):
        res = self.nd.normalizar(u'PoToSÍ, José')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, u'Debería haber 1 matching/s. Hay {0}'.format(len(res)))
        self._checkCalle(res[0], 341221, u'Potosí', 'jose_c_paz', u'José C. Paz')

    def testNormalizador_NormalizarNombreConEnie(self):
        res = self.nd.normalizar(u'Roque Saenz Peña, Jose')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, u'Debería haber 1 matching/s. Hay {0}'.format(len(res)))
        self._checkCalle(res[0], 77440, u'Roque Sáenz Peña', 'jose_c_paz', u'José C. Paz')

    def testNormalizador_NormalizarCallesConY_01(self):
        res = self.nd.normalizar(u'Gelly y Obes, Jose C Paz')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, u'Debería haber 1 matching/s. Hay {0}'.format(len(res)))
        self._checkCalle(res[0], 77481, u'Gelly y Obes', 'jose_c_paz', u'José C. Paz')

    def testNormalizador_NormalizarCalleConComa_01(self):
        res = self.nd.normalizar(u'Acevedo, Manuel, Ituzaingo')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, u'Debería haber 1 matching/s. Hay {0}'.format(len(res)))
        self._checkCalle(res[0], 174423, u'Manuel Acevedo', 'ituzaingo', u'Ituzaingó')

    def testNormalizador_NormalizarCalleConComa_02(self):
        res = self.nd.normalizar(u'Acevedo, Manuel')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, u'Debería haber 1 matching/s. Hay {0}'.format(len(res)))
        self._checkCalle(res[0], 174423, u'Manuel Acevedo', 'ituzaingo', u'Ituzaingó')

    def testNormalizador_NormalizarCalleConComa_03(self):
        res = self.nd.normalizar(u'O\'Higgins, San')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 2, u'Debería haber 2 matching/s. Hay {0}'.format(len(res)))
        self._checkCalle(res[0], 15350, u'O\'Higgins', 'san_isidro', u'San Isidro')
        self._checkCalle(res[1], 79669, u'O\'Higgins', 'san_miguel', u'Bella Vista')

    def testNormalizador_NormalizarConLimite(self):
        res = self.nd.normalizar(u'San')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 10, u'Debería haber 10 matching/s. Hay {0}'.format(len(res)))

        res = self.nd.normalizar(u'San', 25)
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 25, u'Debería haber 25 matching/s. Hay {0}'.format(len(res)))

        res = self.nd.normalizar(u'San', 200)
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 170, u'Debería haber 170 matching/s. Hay {0}'.format(len(res)))
Esempio n. 8
0
class BuscadorDireccionesAMBATestCase(unittest.TestCase):
    nd = NormalizadorDireccionesAMBA()
    for n in nd.normalizadores:
        if n.c.partido.nombre != u'CABA':
            cargarCallejeroEstatico(n.c)

    def _checkDireccionCalleAltura(self, direccion, codigo_calle, nombre_calle,
                                   altura_calle, codigo_partido, localidad):
        self.assertTrue(isinstance(direccion, Direccion))
        self.assertEqual(direccion.tipo, CALLE_ALTURA)
        self.assertEqual(direccion.calle.codigo, codigo_calle)
        self.assertEqual(direccion.calle.nombre, nombre_calle)
        self.assertEqual(direccion.altura, altura_calle)
        self.assertEqual(direccion.partido.codigo, codigo_partido)
        self.assertEqual(direccion.localidad, localidad)

    def _checkDireccionCalleYCalle(self, direccion, codigo_calle, nombre_calle,
                                   codigo_cruce, nombre_cruce, codigo_partido,
                                   localidad):
        self.assertTrue(isinstance(direccion, Direccion))
        self.assertEqual(direccion.tipo, CALLE_Y_CALLE)
        self.assertEqual(direccion.calle.codigo, codigo_calle)
        self.assertEqual(direccion.calle.nombre, nombre_calle)
        self.assertEqual(direccion.cruce.codigo, codigo_cruce)
        self.assertEqual(direccion.cruce.nombre, nombre_cruce)
        self.assertEqual(direccion.partido.codigo, codigo_partido)
        self.assertEqual(direccion.localidad, localidad)

    def test_Error_en_texto_vacio(self):
        self.assertRaises(ErrorTextoSinDireccion, self.nd.buscarDireccion, '')

    def test_Error_en_texto_sin_y_e_o_numeros(self):
        self.assertRaises(ErrorTextoSinDireccion, self.nd.buscarDireccion,
                          u'Este texto no tiene dirección.')

    def test_Error_en_texto_con_palabra_con_y(self):
        self.assertRaises(ErrorTextoSinDireccion, self.nd.buscarDireccion,
                          u'Este texto no tiene dirección, pero tiene yeeee.')

################
# Calle altura #
################

    def test_CalleAltura_con_localidad_o_partido(self):
        res = self.nd.buscarDireccion(u'Loria 341, Lomas de Zamora')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0][0]['posicion'], 0)
        self.assertEqual(res[0][0]['texto'], u'Loria 341')
        self._checkDireccionCalleAltura(res[0][0]['direcciones'][0], 18074,
                                        u'Mariano Sánchez de Loria', 341,
                                        'lomas_de_zamora', u'Lomas de Zamora')

    def test_CalleAltura_muchas_direcciones_con_localidad_o_partido(self):
        res = self.nd.buscarDireccion(
            u'martin garcia 350, caba | independencia 635  Tigre | irigoyen 272 (Temperley)'
        )
        self.assertEqual(len(res), 3)

        self.assertEqual(res[0][0]['posicion'], 0)
        self.assertEqual(res[0][0]['texto'], u'martin garcia 350')
        self._checkDireccionCalleAltura(res[0][0]['direcciones'][0], 7032,
                                        u'GARCIA, MARTIN AV.', 350, 'caba',
                                        u'CABA')

        self.assertEqual(res[1][0]['posicion'], 51)
        self.assertEqual(res[1][0]['texto'], u'| irigoyen 272')
        self._checkDireccionCalleAltura(res[1][0]['direcciones'][0], 35506,
                                        u'Bernardo de irigoyen', 272,
                                        'lomas_de_zamora', u'Temperley')

        self.assertEqual(res[2][0]['posicion'], 24)
        self.assertEqual(res[2][0]['texto'], u'| independencia 635')
        self._checkDireccionCalleAltura(res[2][0]['direcciones'][0], 1540,
                                        u'Independencia', 635, 'tigre',
                                        u'Troncos del Talar')
        self._checkDireccionCalleAltura(res[2][0]['direcciones'][1], 193400,
                                        u'Independencia', 635, 'tigre',
                                        u'Dique Luján')

    def test_CalleAltura_sin_localidad(self):
        res = self.nd.buscarDireccion(u'Loria 341')
        self.assertEqual(len(res), 5)

        self.assertEqual(res[0][0]['posicion'], 0)
        self.assertEqual(res[0][0]['texto'], u'Loria 341')
        self._checkDireccionCalleAltura(res[0][0]['direcciones'][0], 12137,
                                        u'SANCHEZ DE LORIA', 341, 'caba',
                                        u'CABA')
        self._checkDireccionCalleAltura(res[1][0]['direcciones'][0], 139266,
                                        u'Loria', 341, 'almirante_brown',
                                        u'Glew')
        self._checkDireccionCalleAltura(res[2][0]['direcciones'][0], 109525,
                                        u'Loria', 341, 'ezeiza', u'Ezeiza')
        self._checkDireccionCalleAltura(res[3][0]['direcciones'][0], 141693,
                                        u'130 - Sanchez de Loria', 341,
                                        'florencio_varela',
                                        u'Florencio Varela')
        self._checkDireccionCalleAltura(res[4][0]['direcciones'][0], 18074,
                                        u'Mariano Sánchez de Loria', 341,
                                        'lomas_de_zamora', u'Lomas de Zamora')

#################
# Calle y calle #
#################

    def test_CalleCalle_con_localidad_o_partido(self):
        res = self.nd.buscarDireccion(u'Loria e Italia, Lomas de Zamora')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0][0]['posicion'], 0)
        self.assertEqual(res[0][0]['texto'], u'Loria e Italia,')
        self._checkDireccionCalleYCalle(res[0][0]['direcciones'][0], 18074,
                                        u'Mariano Sánchez de Loria', 18119,
                                        u'Italia', 'lomas_de_zamora',
                                        u'Lomas de Zamora')

    def test_CalleCalle_muchas_direcciones_con_localidad_o_partido(self):
        res = self.nd.buscarDireccion(
            u'Martin Garcia y Av. Patricios, caba | Triunvirato y Caseros  Tigre | Irigoyen y Juncal (Temperley)'
        )
        self.assertEqual(len(res), 3)

        self.assertEqual(res[0][0]['posicion'], 0)
        self.assertEqual(res[0][0]['texto'], u'Martin Garcia y Av. Patricios,')
        self._checkDireccionCalleYCalle(res[0][0]['direcciones'][0], 7032,
                                        u'GARCIA, MARTIN AV.', 17034,
                                        u'REGIMIENTO DE PATRICIOS AV.', 'caba',
                                        u'CABA')

        self.assertEqual(res[1][0]['posicion'], 67)
        self.assertEqual(res[1][0]['texto'], u'| Irigoyen y Juncal')
        self._checkDireccionCalleYCalle(res[1][0]['direcciones'][0], 35506,
                                        u'Bernardo de irigoyen', 20254,
                                        u'Juncal', 'lomas_de_zamora',
                                        u'Temperley')

        self.assertEqual(res[2][0]['posicion'], 36)
        self.assertEqual(res[2][0]['texto'], u'| Triunvirato y Caseros ')
        self._checkDireccionCalleYCalle(res[2][0]['direcciones'][0], 191186,
                                        u'Triunvirato', 190846, u'Caseros',
                                        'tigre', u'Troncos del Talar')

    def test_CalleCalle_sin_localidad(self):
        res = self.nd.buscarDireccion(u'Corrientes y Esmeralda')
        self.assertEqual(len(res), 4)

        self.assertEqual(res[0][0]['posicion'], 0)
        self.assertEqual(res[0][0]['texto'], u'Corrientes y Esmeralda')
        self._checkDireccionCalleYCalle(res[0][0]['direcciones'][0], 3174,
                                        u'CORRIENTES AV.', 5072, u'ESMERALDA',
                                        'caba', u'CABA')
        self._checkDireccionCalleYCalle(res[1][0]['direcciones'][0], 211085,
                                        u'Corrientes', 210855, u'Esmeralda',
                                        'escobar', u'Maquinista Savio')
        self._checkDireccionCalleYCalle(res[2][0]['direcciones'][0], 171900,
                                        u'Corrientes', 171851, u'La Esmeralda',
                                        'merlo', u'San Antonio de Padua')
        self._checkDireccionCalleYCalle(res[3][0]['direcciones'][0], 93176,
                                        u'Corrientes', 122722,
                                        u'Esmeralda (393)', 'quilmes',
                                        u'Quilmes')
Esempio n. 9
0
class NormalizadorDireccionesTestCase(unittest.TestCase):
    p = Partido('jose_c_paz', u'José C. Paz', u'Partido de José C. Paz',
                2430431)
    nd = NormalizadorDirecciones(p)
    cargarCallejeroEstatico(nd.c)

    def _checkCalle(self, calle, codigo, nombre, codigo_partido, localidad):
        self.assertTrue(isinstance(calle, Calle))
        self.assertEqual(calle.codigo, codigo)
        self.assertEqual(calle.nombre, nombre)
        self.assertEqual(calle.partido.codigo, codigo_partido)
        self.assertEqual(calle.localidad, localidad)

    def testNormalizador_nomalizar_calle_inexistente(self):
        self.assertRaises(ErrorCalleInexistente, self.nd.normalizar,
                          'kokusai dori')

    def testNormalizador_normalizar_unica_calle_existente(self):
        res = self.nd.normalizar(u'Santiago de Compostela')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, u'Debería haber 1 solo matching.')
        self._checkCalle(res[0], 53658, u'Santiago de Compostela',
                         'jose_c_paz', u'José C. Paz')

    def testNormalizador_normalizar_nombre_permutado(self):
        res = self.nd.normalizar(u'Compostela Santiago de')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, u'Debería haber 1 solo matching.')
        self._checkCalle(res[0], 53658, u'Santiago de Compostela',
                         'jose_c_paz', u'José C. Paz')

    def testNormalizador_normalizar_nombre_incompleto(self):
        res = self.nd.normalizar(u'Compos Santi')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, u'Debería haber 1 solo matching.')
        self._checkCalle(res[0], 53658, u'Santiago de Compostela',
                         'jose_c_paz', u'José C. Paz')

    def testNormalizador_normalizar_nombre_con_acento_y_case(self):
        res = self.nd.normalizar(u'PoToSÍ')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, u'Debería haber 1 solo matching.')
        self._checkCalle(res[0], 341221, u'Potosí', 'jose_c_paz',
                         u'José C. Paz')

    def testNormalizador_normalizar_nombre_con_enie(self):
        res = self.nd.normalizar(u'Roque Saenz Peña')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, u'Debería haber 1 matching.')
        self._checkCalle(res[0], 77440, u'Roque Sáenz Peña', 'jose_c_paz',
                         u'José C. Paz')

    def testNormalizador_normalizar_multiples_calles_existentes(self):
        res = self.nd.normalizar(u'San')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 10, u'Debería haber 10 matchings.')
        resCalles = [
            u'San Lorenzo', u'San Nicolás', u'San Blas', u'San Salvador',
            u'San Luis', u'San Marino', u'San Agustín', u'Santiago del Estero',
            u'Santiago de Compostela', u'Santiago L. Copello'
        ]
        for calle in res:
            self.assertTrue(isinstance(calle, Calle))
            self.assertTrue(calle.nombre in resCalles)

    def testNormalizador_normalizar_calles_con_y_01(self):
        res = self.nd.normalizar(u'Gelly y Obes')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, u'Debería haber 1 matchings.')
        self._checkCalle(res[0], 77481, u'Gelly y Obes', 'jose_c_paz',
                         u'José C. Paz')

    def testNormalizador_normalizar_calles_con_y_03(self):
        res = self.nd.normalizar(u'Vicente López y Planes')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, u'Debería haber 1 matchings.')
        self._checkCalle(res[0], 11702, u'Vicente López y Planes',
                         'jose_c_paz', u'José C. Paz')

    def testNormalizador_buscarCalle_calles_con_e_01(self):
        res = self.nd.normalizar(u'Jose e Rodo')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, u'Debería haber 1 matching.')
        self._checkCalle(res[0], 78817, u'José E. Rodó', 'jose_c_paz',
                         u'José C. Paz')

    def testNormalizador_normalizar_sinonimos_01(self):
        res1 = self.nd.normalizar(u'11')
        self.assertTrue(isinstance(res1, list))
        self.assertEqual(len(res1), 1, u'Debería haber 1 matching.')
        res2 = self.nd.normalizar(u'once')
        self.assertTrue(isinstance(res2, list))
        self.assertEqual(len(res2), 1, u'Debería haber 1 matching.')
        self.assertEqual(res1[0].codigo, res2[0].codigo)

    def testNormalizador_normalizar_sinonimos_02(self):
        res = self.nd.normalizar(
            u'3')  # 3 de Febrero, Tres Sargentos y Las Tres Marías
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 3, u'Debería haber 1 matching.')
        self.assertTrue(res[0].codigo in [78879, 53341, 237007])
        self.assertTrue(res[1].codigo in [78879, 53341, 237007])
        self.assertTrue(res[2].codigo in [78879, 53341, 237007])

    def testNormalizador_normalizar_muchos_espacios(self):
        res = self.nd.normalizar(u'  puerto    principe         ')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, u'Debería haber 1 matching.')
        self._checkCalle(res[0], 183044, u'Puerto Príncipe', 'jose_c_paz',
                         u'José C. Paz')

    def testNormalizador_normalizar_calle_con_parentesis(self):
        res = self.nd.normalizar(u'Coliqueo (JCP)')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, u'Debería haber 1 matching.')
        self._checkCalle(res[0], 186501,
                         u'Intendente Arricau (SM) / Cacique Coliqueo (JCP)',
                         'jose_c_paz', u'José C. Paz')

    def testNormalizador_normalizar_caracteres_raros(self):
        res = self.nd.normalizar(
            u'puerto principe |°¬!#$%&/()=?\¿¡*¸+~{[^}]\'`-_.:,;<>·@')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, u'Debería haber 1 matching.')
        self._checkCalle(res[0], 183044, u'Puerto Príncipe', 'jose_c_paz',
                         u'José C. Paz')

    def testNormalizador_normalizar_calles_como_av_o_pje(self):
        casos = [
            u'Avenida Arribeños', u'Arribeños avenida', u'Arribeños avda',
            u'AV. Arribeños', u'Pasaje Arribeños', u'Psje. Arribeños',
            u'Arribeños pje'
        ]
        for caso in casos:
            res = self.nd.normalizar(caso)
            self.assertTrue(isinstance(res, list))
            self.assertEqual(len(res), 1, u'Debería haber 1 matching.')
            self._checkCalle(res[0], 79350, u'Arribeños', 'jose_c_paz',
                             u'José C. Paz')
Esempio n. 10
0
class CallejeroTestCase(unittest.TestCase):
    p = Partido('jose_c_paz', u'José C. Paz', u'Partido de José C. Paz',
                2430431)
    c = Callejero(p)
    cargarCallejeroEstatico(c)

    p = Partido('general_san_martin', u'General San Martin',
                u'Partido de General San Martin', 1719022)
    c_san_martin = Callejero(p)
    cargarCallejeroEstatico(c_san_martin)

    def _checkCalle(self, calle, codigo, nombre, codigo_partido, localidad):
        self.assertTrue(isinstance(calle, Calle))
        self.assertEqual(calle.codigo, codigo)
        self.assertEqual(calle.nombre, nombre)
        self.assertEqual(calle.partido.codigo, codigo_partido)
        self.assertEqual(calle.localidad, localidad)

    def testCallejero_callejero_inexistent(self):
        p = Partido('jose_paz', u'José C. Paz', u'Partido de José C. Paz',
                    2430431)
        self.assertRaises(ValueError, Callejero, p)

    def testCallejero_buscarCalle_calle_inexistente(self):
        res = self.c.buscarCalle('kokusai dori')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 0, u'No debería haber matching.')

    def testCallejero_buscarCalle_unica_calle_existente(self):
        res = self.c.buscarCalle(u'Santiago de Compostela')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, u'Debería haber 1 solo matching.')
        self._checkCalle(res[0], 53658, u'Santiago de Compostela',
                         'jose_c_paz', u'José C. Paz')

    def testCallejero_buscarCalle_nombre_permutado(self):
        res = self.c.buscarCalle(u'Compostela Santiago de')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, u'Debería haber 1 solo matching.')
        self._checkCalle(res[0], 53658, u'Santiago de Compostela',
                         'jose_c_paz', u'José C. Paz')

    def testCallejero_buscarCalle_nombre_incompleto(self):
        res = self.c.buscarCalle(u'Compos Santi')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, u'Debería haber 1 solo matching.')
        self._checkCalle(res[0], 53658, u'Santiago de Compostela',
                         'jose_c_paz', u'José C. Paz')

    def testCallejero_buscarCalle_nombre_con_acento_y_case(self):
        res = self.c.buscarCalle(u'PoToSÍ')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, u'Debería haber 1 solo matching.')
        self._checkCalle(res[0], 341221, u'Potosí', 'jose_c_paz',
                         u'José C. Paz')

    def testCallejero_buscarCalle_nombre_con_enie(self):
        res = self.c.buscarCalle(u'Roque Saenz Peña')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, u'Debería haber 1 matching.')
        self._checkCalle(res[0], 77440, u'Roque Sáenz Peña', 'jose_c_paz',
                         u'José C. Paz')

    def testCallejero_buscarCalle_multiples_calles_existentes(self):
        res = self.c.buscarCalle(u'San')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 16, u'Debería haber 16 matchings.')
        resCalles = [
            u'San Lorenzo', u'San Nicolás', u'San Blas', u'San Salvador',
            u'San Luis', u'San Marino', u'San Agustín', u'Santiago del Estero',
            u'Santiago de Compostela', u'Santiago L. Copello', u'Santa Marta',
            u'Santo Domingo', u'Santa Ana', u'Santiago de Liniers',
            u'Santa María', u'Santiago Davobe'
        ]
        for calle in res:
            self.assertTrue(isinstance(calle, Calle))
            self.assertTrue(calle.nombre in resCalles)

    def testCallejero_buscarCalle_calles_con_y_01(self):
        res = self.c.buscarCalle(u'Gelly y Obes')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, u'Debería haber 1 matchings.')
        self._checkCalle(res[0], 77481, u'Gelly y Obes', 'jose_c_paz',
                         u'José C. Paz')

        res = self.c.buscarCalle(u'g y o')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, u'Debería haber 1 matchings.')
        self._checkCalle(res[0], 77481, u'Gelly y Obes', 'jose_c_paz',
                         u'José C. Paz')

    def testCallejero_buscarCalle_calles_con_y_02(self):
        res = self.c.buscarCalle(u'Vicente López y Planes')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, u'Debería haber 1 matchings.')
        self._checkCalle(res[0], 11702, u'Vicente López y Planes',
                         'jose_c_paz', u'José C. Paz')

    def testCallejero_buscarCalle_calles_con_e_01(self):
        res = self.c.buscarCalle(u'Jose e Rodo')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, u'Debería haber 1 matching.')
        self._checkCalle(res[0], 78817, u'José E. Rodó', 'jose_c_paz',
                         u'José C. Paz')

    def testCallejero_buscarCodigo_codigo_valido(self):
        res = self.c.buscarCodigo(314724)
        self.assertTrue(isinstance(res, list))
        self.assertTrue(res[0][0] == 314724)
        self.assertTrue(
            res[0][1] == u'Avenida Derqui (M) / Fray Antonio Marchena (JCP)')

    def testCallejero_buscarCodigo_codigo_invalido(self):
        res = self.c.buscarCodigo(666)
        self.assertTrue(res == [])

    def testCallejero_buscarCalle_sinonimos_01(self):
        res1 = self.c.buscarCalle(u'11')
        self.assertTrue(isinstance(res1, list))
        self.assertEqual(len(res1), 1, u'Debería haber 1 matching.')
        res2 = self.c.buscarCalle(u'once')
        self.assertTrue(isinstance(res2, list))
        self.assertEqual(len(res2), 1, u'Debería haber 1 matching.')
        self.assertEqual(res1[0].codigo, res2[0].codigo)

    def testCallejero_buscarCalle_sinonimos_02(self):
        res1 = self.c.buscarCalle(
            u'3')  # 3 de Febrero, Tres Sargentos y Las Tres Marías
        self.assertTrue(isinstance(res1, list))
        self.assertEqual(len(res1), 3, u'Debería haber 1 matching.')
        self.assertTrue(res1[0].codigo in [78879, 53341, 237007])
        self.assertTrue(res1[1].codigo in [78879, 53341, 237007])
        self.assertTrue(res1[2].codigo in [78879, 53341, 237007])

    def testCallejero_buscarCalle_muchos_espacios(self):
        res = self.c.buscarCalle(u'  puerto    principe         ')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, u'Debería haber 1 matching.')
        self._checkCalle(res[0], 183044, u'Puerto Príncipe', 'jose_c_paz',
                         u'José C. Paz')

    def testCallejero_buscarCalle_calle_con_parentesis(self):
        res = self.c.buscarCalle(u'Coliqueo (JCP)')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, u'Debería haber 1 matching.')
        self._checkCalle(res[0], 186501,
                         u'Intendente Arricau (SM) / Cacique Coliqueo (JCP)',
                         'jose_c_paz', u'José C. Paz')

    def testCallejero_buscarCalle_caracteres_raros(self):
        res = self.c.buscarCalle(
            u'puerto principe |°¬!#$%&/()=?\¿¡*¸+~{[^}]\'`-_.:,;<>·@')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, u'Debería haber 1 matching.')
        self._checkCalle(res[0], 183044, u'Puerto Príncipe', 'jose_c_paz',
                         u'José C. Paz')

    def testCallejero_buscarCalle_calle_con_acente_escrito_sin_acento(self):
        res = self.c.buscarCalle(u'potosi')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, u'Debería haber 1 matching.')
        self._checkCalle(res[0], 341221, u'Potosí', 'jose_c_paz',
                         u'José C. Paz')

    def testCallejero_buscarCalle_calle_con_numeros(self):
        res = self.c_san_martin.buscarCalle(u'26 de Julio de 1890')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, u'Debería haber 1 matching.')
        self._checkCalle(res[0], 70996, u'103 - 26 de Julio de 1890',
                         'general_san_martin', u'General San Martín')