Analizador de direcciones de Python

Abid Ullah 10 octubre 2023
  1. Analizar dirección usando la biblioteca de Python PyParsing
  2. Analizar la dirección del archivo CSV usando PyParsing en Python
Analizador de direcciones de Python

Este artículo le mostrará cómo analizar direcciones usando Python. Usaremos la biblioteca pyparsing para analizar manualmente la dirección y usaremos las funciones o pyparsing para las direcciones en el archivo CSV.

Comenzaremos con un ejemplo simple y luego pasaremos a uno complejo.

Analizar dirección usando la biblioteca de Python PyParsing

Es ampliamente reconocido que el módulo pyparsing del lenguaje de programación Python es una herramienta invaluable para realizar operaciones en datos de texto.

El paquete pyparsing, utilizado para analizar y modificar datos de texto, simplifica el trabajo con direcciones. Esto se debe a que el módulo puede convertir y ayudar a analizar direcciones.

En este artículo, discutiremos el uso del módulo PyParsing para manejar el análisis y las modificaciones. Veamos un ejemplo real de análisis de una dirección utilizando el módulo PyParsing.

Después de eso, veremos un ejemplo más extenso para demostrar cómo se puede usar PyParsing para modificar y analizar datos de direcciones.

Análisis simple de direcciones usando PyParsing

Comencemos mirando un ejemplo básico de análisis de una dirección con la ayuda de la biblioteca de Python PyParsing. Como primer ejemplo, veamos la siguiente dirección y analicémosla.

567 Main Street

Siga estos pasos para analizar esta dirección:

  • Importar biblioteca pyparsing

    Primero, importaremos la librería pyparsing con todos sus módulos y funciones mencionando *.

    from pyparsing import *
    
  • Crear una variable

    Ahora crearemos una variable y la asignaremos a la dirección que queremos analizar.

    address = "567 Main Street"
    
  • Descomponer

    Ahora desglosaremos las partes de la dirección mencionando nums y alphas.

    addressParser = Word(nums) + Word(alphas) + Word(alphas)
    
  • Ahora crearemos una variable y llamaremos a parseString desde la biblioteca pyparsing.
    addressParts = addressParser.parseString(address)
    
  • Imprimir

    Finalmente, imprimiremos la variable y veremos el resultado.

    print(addressParts)
    

Escribamos el código completo y ejecútelo para ver el resultado.

from pyparsing import *

address = "123 Main Street FL"
addressParser = Word(nums) + Word(alphas) + Word(alphas) + Word(alphas)
addressParts = addressParser.parseString(address)
print(addressParts)

Producción :

['123', 'Main', 'Street', 'FL']

Este código analizará la dirección en cuatro partes: el número de la calle, el nombre de la calle, el tipo de calle y el estado de la dirección.

El número de la calle será la primera parte, el nombre de la calle será la segunda parte, el tipo de calle será la tercera parte y el estado será la última parte.

Cuatro funciones útiles de PyParsing

Podemos usar una de las cuatro funciones disponibles para realizar el análisis real.

  1. ParseString: con parseString, puede comenzar a analizar el texto desde el principio sin preocuparse por el contenido innecesario al final.
  2. ScanString - ScanString busca en la cadena de entrada palabras coincidentes, algo así como re.finditer().
  3. SearchString - SearchString es similar a scanString, excepto que en lugar de devolver un solo token, proporciona una colección de ellos.
  4. TransformString: TransformString es similar a scanString, pero le permite sustituir tokens por otros de su elección.

Analizar la dirección del archivo CSV usando PyParsing en Python

La información de direccionamiento es un dato específico que se registra con frecuencia en archivos CSV. Debido a que hay una gran diferencia en la forma en que están estructurados, pueden ser difíciles de analizar.

El módulo pyparsing simplifica la extracción de direcciones de archivos CSV utilizando una estructura definida. Para comenzar, definamos algunas pautas y funciones sencillas sobre cómo analizar una dirección correctamente.

Después de eso, aplicaremos estos principios para analizar archivos CSV que contienen direcciones.

Supongamos que nuestro archivo de configuración o el archivo CSV de la dirección se parece a esto:

city=LAUDERDALE, state=FL, Zipcode: 33316

Tendremos que analizar la cadena en formato clave=valor. Una cadena CLAVE=VALOR tiene tres partes: la clave, el signo igual y el valor.

No es necesario incluir el signo igual en el resultado final de un análisis de dicha expresión. Es posible evitar que se incluya un token en la salida utilizando el método Suppress().

Los nombres de los tokens pueden proporcionarse mediante la función setResultsName() o llamando al analizador con el nombre como argumento cuando se construye el analizador, lo que hace que sea un poco más sencillo recuperar tokens específicos. Los tokens preferiblemente deben tener nombres asociados con ellos.

Probemos el código y veamos cómo funciona pyparsing con archivos CSV.

Comenzaremos con la importación de la biblioteca pyparsing con todas sus funciones y módulos.

from pyparsing import *

En segundo lugar, crearemos una variable para la parte clave de la entrada para la salida. Mencionaremos alphanums porque el conjunto de datos de direcciones puede contener letras y números.

key = Word(alphanums)("key")

Queremos eliminar el signo = de nuestra salida en el archivo CSV. Usaremos la función Suprimir.

equals = Suppress("=")

Ahora, haremos una variable para la parte valor. Y de nuevo, mencionaremos alfanumeros porque el conjunto de datos de direcciones puede contener letras y números.

value = Word(alphanums)("value")

Ahora, crearemos otra variable para concatenar las variables.

keyValueExpression = key + equals + value

Ahora abriremos nuestro archivo CSV de dirección usando formato de archivo. Y use la función file.read para leer todos los datos en el archivo.

with open("/address.csv") as address_file:
    address_file = address_file.read()

Después de esto, usaremos un bucle for con la función scanString o pyparsing para leer cada línea de la dirección una por una.

for adrs in keyValueExpression.scanString(address_file):
    result = adrs[0]

Y por último, usaremos la función print para ver el resultado.

print("{0} is {1}".format(result.key, result.value))

Aquí termina nuestro código, y ahora escribiremos el código completo para ejecutarlo. Y vea qué resultado obtendremos cuando proporcionemos un archivo CSV con la dirección.

# import library
from pyparsing import *

key = Word(alphanums)("key")
# delet = from the output
equals = Suppress("=")
value = Word(alphanums)("value")
keyValueExpression = key + equals + value
# use file formating to open csv file
with open("/content/address.csv") as address_file:
    address_file = address_file.read()
# use for loop to read your CSV file
for adrs in keyValueExpression.scanString(address_file):
    result = adrs[0]
    # print the output
    print("{0} is {1}".format(result.key, result.value))

Producción :

city is LAUDERDALE
state is FL

La salida del código muestra los datos que contiene nuestro archivo. En el archivo address.csv solo teníamos una dirección.

Y puede ver la funcionalidad de usar la biblioteca pyparsing a medida que se analiza la dirección.

PyParsing ofrece una alternativa más robusta y madura a las expresiones regulares al analizar texto en tokens y recuperar o reemplazar tokens individuales.

Por ejemplo, los campos anidados no son un problema para PyParsing, pero lo serían para expresiones regulares. Este analizador se parece más a los viejos recursos, como lex y yacc.

En otras palabras, las expresiones regulares se pueden usar para buscar etiquetas y extraer datos de HTML, pero no se pueden usar para verificar un archivo HTML. Sin embargo, pyparsing le permitiría lograr esto.

Esperamos que este artículo le resulte útil para comprender el analizador de direcciones utilizado en Python.

Autor: Abid Ullah
Abid Ullah avatar Abid Ullah avatar

My name is Abid Ullah, and I am a software engineer. I love writing articles on programming, and my favorite topics are Python, PHP, JavaScript, and Linux. I tend to provide solutions to people in programming problems through my articles. I believe that I can bring a lot to you with my skills, experience, and qualification in technical writing.

LinkedIn