es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Escribiendo expectativas de Capybara para verificar números de teléfono.

Estoy utilizando AWS Textract para extraer información de documentos PDF. Después de que el texto escaneado es devuelto por AWS y se almacena en una variable, hago esto:

phone_number = '(555) 123-4567'
scanned_pdf_text.should have_text phone_number

Pero esto falla aproximadamente el 20% de las veces debido a la forma no determinista en que AWS devuelve el texto del PDF escaneado. En ocasiones, los números de teléfono pueden aparecer de estas dos formas:

(555)123-4567

o

(555) 123-4567

Algunos de estos textos escaneados son muy largos y preferiría evitar tener que sanear el texto que vuelve, si es posible (también no soy bueno en el uso de expresiones regulares). También creo que usar lógica “o” para manejar ambos casos parece ser un enfoque excesivo solo para verificar un texto tan similar (y claramente casi idéntico al ojo humano).

¿Existe un matcher de rspec que me permita verificar este texto? También estoy utilizando Capybara.default_normalize_ws = true, pero eso no parece ayudar en este caso.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Solución para texto no determinista usando el Matcher de RSpec

    Sí, existe un matcher rspec disponible que puede ser utilizado para resolver el problema anterior de texto no determinista en los documentos PDF escaneados. El matcher match proporcionado por RSpec puede ser utilizado junto con una expresión regular para manejar estos casos.

    Aquí tienes un ejemplo de código:

    numero_telefono = '(555) 123-4567'
    texto_pdf_escaneado.should match(/\(555\) ?123-4567/)
    

    En el código anterior, estamos utilizando el matcher match junto con una expresión regular para hacer coincidir el número de teléfono. La expresión regular \( hace coincidir el paréntesis de apertura, 555\) hace coincidir los números y ? indica que el espacio en blanco es opcional. Finalmente, 123-4567 hace coincidir los dígitos restantes.

    Utilizando esta técnica, podemos manejar el caso en el que el texto escaneado puede aparecer en diferentes formatos.

Comments are closed.