¿Cómo extraer información estructurada de texto usando Python y expresiones regulares?
Muchas personas tienen que lidiar con grandes cantidades de texto en su trabajo diario.
Por ejemplo, los académicos necesitan leer una gran cantidad de literatura para encontrar inspiración, datos y argumentos.
Los estudiantes necesitan leer muchos libros de texto y artículos y luego escribir sus propios informes o crear diapositivas.
Los analistas financieros necesitan encontrar pistas sobre las tendencias de desarrollo de la industria y la dinámica de las empresas objetivo a partir de una gran cantidad de informes de noticias.
No todos los procesadores de textos son tan novedosos e interesantes.
Una tarea importante pero tediosa es extraer información estructurada de grandes cantidades de texto.
Muchos escenarios de análisis de datos requieren el ingreso de información estructurada.
Por ejemplo, "Préstamo o no: ¿Cómo utilizar Python y el aprendizaje automático para ayudarle a tomar decisiones?". y "¿Cómo dirigirse a los clientes que abandonan utilizando Python y redes neuronales profundas? Como puede ver, los modelos de máquina prefieren información tabular estructurada.
Sin embargo, la información estructurada no necesariamente está ahí, etc. Puede utilizarla Muchas veces, está oculto en el texto no estructurado generado en el pasado.
Es posible que esté acostumbrado a leer manualmente la información del texto, extraer puntos clave y luego copiar y pegar en la tabla. comprensible, pero en la práctica es demasiado ineficiente y problemático.
La mayoría de las personas no están dispuestas a realizar un trabajo tan simple y aburrido.
Delimitar el rango de texto. , "Ctrl+C", cambie al documento de la tabla, busque la posición de entrada con precisión y luego "CTRL+V"...
Hacer este tipo de cosas demasiado puede ser perjudicial para sus hombros y codos, articulaciones e incluso efectos adversos en la salud física y mental
¿Quieres probar un método automatizado más simple para completar rápidamente estos molestos pasos?
¿Después de leer este artículo? Espero que puedas encontrar la respuesta.
Muestra
Aquí damos un ejemplo extremadamente simplificado de cómo extraer información de texto chino
El motivo es para evitarlo. dedicando demasiado tiempo a explicar los datos.
Espero que puedas concentrarte en el método y adquirir nuevos conocimientos.
Supongamos que un profesor de secundaria le pide al monitor que cuente a los estudiantes. Hizo una investigación cuidadosa e hizo el siguiente informe:
Li Ping fue admitido en una escuela secundaria técnica /p>
Han Meimei entró en los grandes almacenes
...
Para que te familiarices con el ejemplo, incluso "tomé prestado" el sonido aquí.
¿No es genial?
En la vida real, probablemente los haya. más de tres personas en una clase, por lo que puedes imaginar que se trata de una larga serie de oraciones.
Pero en realidad, el director también tiene un significado implícito que no se expresa, es decir:
¡Quiero un formulario!
Entonces, mira. Con esta larga frase, puedes imaginar su expresión.
El líder del escuadrón probablemente estaba muy avergonzado:
Si quieres el formulario, debes decirlo. En este momento, supongamos que eres el monitor, ¿qué debes hacer?
La información está en el texto, pero si necesitas convertirla. en una tabla, hay que encontrarlos uno por uno y procesarlos uno por uno.
De hecho, la operación manual no es demasiado difícil para una clase de cuarenta o cincuenta personas.
Pero imagínese si la cantidad de datos que necesita procesar es diez veces, cien veces o incluso decenas de millones de veces mayor que la de este ejemplo.
¿Continuar insistiendo en el procesamiento manual?
Esto no sólo es problemático, sino también poco realista.
Necesitamos encontrar un método simple que nos ayude a automatizar la extracción de la información correspondiente.
El método que utilizamos aquí es una expresión regular.
Regular
El nombre "expresión regular" suena misterioso al principio. De hecho, se traduce del inglés "expresión regular".
Si se traduce a la lengua vernácula, es "forma de expresión regular".
¿Suena esto más realista?
Sin embargo, déjame darte el curso "Experto en lucha contra la falsificación 101":
¿A quién puedes engañar diciendo palabras que otros puedan entender?
Según la convención, continuaremos llamándola “expresión regular”.
Desde sus inicios, ha aportado una alta eficiencia al procesamiento de textos.
Sin embargo, las principales personas que lo utilizan no son escritores, editores, académicos y empleados que a menudo tratan con palabras, sino...
Programadores
El código que escriben los programadores es texto; gran parte de los datos que procesan los programadores también están en formato de texto. Hay muchos patrones obvios a seguir.
Es precisamente gracias al secreto único de las expresiones regulares que los programadores pueden completar en media hora muchas tareas que otros necesitan hacer en la oscuridad durante toda una semana y esperar a trabajar después de tomar café.
Incluso en la era actual de inteligencia panartificial, las expresiones regulares todavía tienen muchas aplicaciones inesperadas.
Por ejemplo, sistema de diálogo persona-ordenador.
Es posible que haya leído noticias y siempre haya pensado que el diálogo entre humanos y máquinas se realiza mediante gráficos de conocimiento o aprendizaje profundo.
No se puede decir que no exista participación de la tecnología Coolpad mencionada anteriormente. Pero representan, en el mejor de los casos, sólo una parte, quizá una parte muy pequeña.
En la práctica de producción, detrás de una gran cantidad de reglas de diálogo no hay una red neuronal misteriosa y profunda, sino un montón de expresiones regulares.
Quizás te preocupes: ¿podrás dominar una tecnología de aplicaciones de tan alta gama?
La respuesta es:
¡Por supuesto!
Las expresiones regulares no son difíciles de aprender.
Especialmente cuando lo combinas con Python, es simplemente un artefacto de eficiencia.
Veamos cómo las expresiones regulares pueden ayudarnos a identificar la información de "nombre" y "destino" en el texto de muestra.
Práctica de prueba
Abra su navegador y escriba esta URL (/).
Verás la siguiente interfaz.
Puede ser una gran herramienta para experimentar con expresiones regulares. Cuando enseñé INFO 5731, los estudiantes rápidamente comenzaron a jugar con expresiones regulares después de dominar esta herramienta.
Una herramienta tan buena debe ser cara, ¿verdad?
No, es gratis. Puedes usarlo con valentía.
Primero ajustamos el lenguaje de programación de la izquierda del PHP predeterminado a Python.
Después de eso, pega el texto que deseas procesar en el cuadro de texto grande con un espacio en blanco en el medio.
Intentemos igualarlo.
¿Qué es emparejar?
Escribes una expresión y la computadora usará plumas de pollo como flechas para buscar cuidadosamente cada línea de texto y ver si hay un párrafo de texto que coincida con la expresión.
Si lo hay, quedará resaltado.
Echemos un vistazo aquí y encontremos que en cada oración, está la palabra “了” delante de la persona.
Bien, ingresemos la palabra "了" en el pequeño cuadro de texto en la parte superior central.
Como puedes ver, las palabras "了" en las tres oraciones están todas iluminadas.
Este es el primer método de comparación con el que entra en contacto: encontrar contenido coherente basado en el significado original de los caracteres.
Debido a la regularidad del texto de muestra, podemos considerar "了" como un localizador. Después, hasta el final de la oración, está la información de "go".
¿No es esta la información semiestructurada que buscamos?
Intentamos hacer coincidir "a".
¿Cómo combinar? ¿Las palabras en cada línea son diferentes esta vez?
No importa, el poder de las expresiones regulares se revela en este momento.
Puedes utilizar punto, es decir. , para representar cualquier personaje.
Letras, números, signos de puntuación... incluso se puede abarcar el chino.
Entonces sigamos pensando. ¿Cuántas palabras habrá aquí?
No lo sé.
En estas tres frases simples, hay dos situaciones: "cuatro caracteres" o "seis caracteres".
Por lo tanto, no podemos especificar la longitud de los caracteres en la información de destino.
Pero no importa, solo necesitamos un asterisco (*) para representar el número de ocurrencias, ¿de? Se puede hacer coincidir 0 hasta el infinito.
Por supuesto, en la práctica, el infinito nunca ocurre realmente.
Añadimos. *Hasta la entrada de ahora, el resultado se ve así:
¡No está mal!
Pero la información del destino y la palabra "Le" parecen estar resaltadas en el mismo color. ¿No es eso confuso?
No queremos esto.
¿Qué estamos haciendo?
¿Puedes irte, por favor? Intente agregar un par de corchetes a ambos lados (tenga cuidado de no utilizar símbolos chinos de ancho completo).
Verás que "了" todavía está azul esta vez y la información de destino posterior se vuelve verde.
Esto es muy importante para los corchetes. Denominada "agrupación", es la unidad básica para extraer información.
Ya estamos a mitad de camino, ¿no?
Intentemos extraer los nombres juntos.
Busquemos la posición de anclaje del nombre.
Si miras con atención, podrás encontrar fácilmente que hay un verbo después de cada nombre.
Los estudiantes que ingresan a colegios y universidades usan la palabra "kao", y los estudiantes que trabajan usan la palabra "jin".
Probemos primero con la palabra "prueba".
Aquí intentamos poner la palabra "Kao" directamente delante de la palabra "Le". Pero descubrirás que no hay coincidencia.
¿Por qué?
Mirando hacia atrás en la información, encontrará que la palabra original utilizada por otros es "admisión".
Por supuesto, aquí podemos introducir la palabra "上". Pero hay que considerar el caso más general.
¿Qué debo hacer si apruebo el examen? ¿Qué pasa con la "admisión"?
Una mejor manera es continuar usando el "gran truco" que acabamos de aprender e insertar un * entre "prueba" y "了".
¿Cómo se ve tu expresión regular en este momento? Aprobé el examen. * (.*)
Mira, ¿la información de la primera línea coincidió correctamente?
Sin embargo, todavía hay dos líneas que no coinciden. ¿Qué debo hacer?
Si seguimos el mismo patrón, encontraremos que se utiliza. * (.*)? Puede hacer coincidir las dos últimas líneas correctamente.
Aquí viene el problema:
Lo que coincide con la primera línea no puede coincidir con las dos últimas líneas, y viceversa.
Esto no es bueno. Esperamos escribir expresiones más generales.
Qué hacemos
Veamos la representación de la relación "O" en expresiones regulares.
Aquí podemos separar los dos personajes con una línea vertical y encerrarlos entre paréntesis, indicando que si alguno de ellos aparece, la coincidencia es exitosa.
Es decir, escribe la expresión regular como: [Kao | Jin]. *乐(.*).
Genial, las tres líneas coincidieron correctamente.
La frase verbal y el tiempo "了" se utilizan aquí como información de anclaje intermedia, por lo que podemos extraer de forma segura y audaz la información del nombre anterior.
En otras palabras, se escribe así: (.*) [aprobado|]. * es (.*).
Tenga en cuenta que en este momento, el grupo de nombre es verde y el grupo de destino es rojo.
¡Extrajimos con éxito dos conjuntos de información! ¡Celebrar!
Sin embargo, si le muestras los resultados aquí al profesor de la clase, probablemente él tampoco quedará satisfecho.
¡Forma! ¡Quiero el formulario!
No te preocupes, es el turno de Python.
Intentemos extraer datos formalmente usando Python.
Medio ambiente
Puse el código fuente de soporte de este artículo en Github.
Puedes ver el enlace del código completo respondiendo "regex" en el fondo de mi cuenta oficial de WeChat "nkwangshuyi".
Si estás satisfecho con mi tutorial, haz clic en la estrella en la esquina superior derecha de la página para agregarme una estrella. Gracias
Tenga en cuenta que en el centro de esta página hay un botón que dice "Abrir en Colab". Por favor haga clic en él.
Entonces Google Colab se abrirá automáticamente.
Se recomienda que hagas clic en el botón "Copiar a unidad" rodeado en rojo en la imagen de arriba. De esta manera, podrás guardarlo en tu propio Google Drive para facilitar su uso y visualización.
Colab le proporciona un entorno operativo completo. Solo necesita ejecutar el código en secuencia para reproducir los resultados de este tutorial.
Si no estás familiarizado con Google Colab, está bien. Tengo un tutorial aquí que explica específicamente las características y el uso de Google Colab.
Para que pueda aprender y comprender el código más profundamente, le sugiero que abra una nueva libreta en Google Colab, ingrese el código y lo ejecute de la siguiente manera. En el proceso, comprenda completamente el significado del código.
Esta forma aparentemente torpe es en realidad una forma eficaz de aprender.
Contraseña
Primero, lea el paquete de expresiones regulares de Python.
Importar re
Luego, preparamos los datos. Tenga en cuenta que para demostrar la versatilidad del código, agregué una línea de texto al final aquí, que es diferente de las reglas de texto anteriores, para ver si nuestro código puede manejarlo correctamente.
Data = " "Zhang Hua fue admitido en la Universidad de Pekín.
Li Ping ingresó a una escuela técnica secundaria.
Han Meimei entró en los grandes almacenes.
Todos tienen un futuro brillante.
Entonces, es hora de escribir la expresión regular. ¿Realmente necesitas escribirlo a mano tú mismo?
Por supuesto que no.
El potente sitio web regex101 nos ayudó a prepararnos.
Haga clic en el botón rodeado en rojo en la imagen de arriba y el sitio web preparará una plantilla de código inicial para usted que puede coincidir con el patrón que necesita.
No es necesario copiar completamente el código. Esta frase es muy importante. Simplemente cópielo y péguelo en el cuaderno de Colab.
Regex = r"(.*)[Entrance|].*gone(.*) "
Así es como se ve su expresión regular en Python.
Preparamos una lista vacía para recibir datos.
Mi lista = []
Luego, escribe un bucle.
Para la fila (' n ') en data.split:
? mibúsqueda = re.búsqueda(expresión regular, línea)
? Si busco:
nombre = mysearch.group(1)
dest = mysearch.group(2)
mylist.append((name,dest ) )
Déjame explicarte el significado de cada oración en este bucle:
data.split('n ')? Divida los datos de texto en líneas. Entonces podemos obtener los datos de cada fila. mibúsqueda = re.búsqueda (expresión regular, línea)? Esta oración intenta unir patrones con líneas. ¿Qué pasa si busco? Esta declaración de juicio es para permitir que el programa distinga si esta línea tiene el patrón que estamos buscando. Por ejemplo, en la última línea de texto, no hay ningún patrón de texto que analicemos anteriormente.
Si encuentra una línea de este tipo, omítala. nombre = mibúsqueda.grupo(1)? ¿Significa que el primer grupo de contenido coincidente, es decir, los nombres representados en verde en el sitio web regex101, se almacenan en grupos? ¿nombre? en variables. Espere la siguiente oración. ¿Aviso? ¿grupo? El conteo comienza desde 1 según el orden en que aparecen los corchetes en la expresión regular. mylist.append((nombre,destino))? La información extraída de esta fila se almacena en la lista vacía que definimos anteriormente.
Atención, ¿si no se añade? mibúsqueda = re.búsqueda (expresión regular, línea)? En esta oración, el programa intentará hacer coincidir cada línea y extraer el contenido agrupado, y el resultado será un error como este:
Como ve, cuando usa expresiones regulares para extraer información, no puede No seas rudo.
Mientras tanto, ¿podemos echar un vistazo? ¿Mi lista? Contenido de la lista:
Mi lista
Los resultados son los siguientes:
[('Zhang Hua','Universidad de Pekín'),('Li Ping', 'Technical Secondary School'), ('Han Meimei', 'Department Building')]
Sí, uno no es demasiado, el otro no es demasiado poco, que es exactamente lo que necesitamos .
Exportaremos esto a una tabla. Hay muchas formas de hacer esto, pero la más sencilla es utilizar el paquete de análisis de datos Pandas.
Importar panda como pd
¿Solo usarlo? policía. ¿Marco de datos? Función, podemos convertir una estructura bidimensional compuesta por la lista vinculada anterior y tuplas en un marco de datos.
df=pd. Marco de datos (Mi lista)
Df.columns = ['name', 'destination']
Tenga en cuenta que aquí también modificamos el encabezado con mucho cuidado.
Mira los frutos de tu trabajo:
df
Para los marcos de datos, solo se necesita una línea de código para convertirlos al formato Excel: p>
df.to_excel("dest.xlsx", index=False)
Vaya a la pestaña de archivos, actualice y verifique el contenido del directorio actual:
Esto ? destino.xlsx? es el resultado de salida. Después de la descarga, podemos abrirlo con Excel.
¡Misión cumplida!
Puedes enviar tus resultados al profesor de la clase y ver su sonrisa de satisfacción.
Resumen
En este tutorial, analizamos cómo extraer información estructurada utilizando reglas de caracteres de texto con Python y expresiones regulares.
Espero que haya dominado las siguientes habilidades:
Comprender el papel de las expresiones regulares;
Prueba la coincidencia de expresiones regulares en el sitio web regex101 y genera código preliminar;
Utilice Python para extraer información en lotes y exportar datos estructurados al formato especificado según los requisitos.
Aun así, para un ejemplo tan simple, usar el método anterior definitivamente provocará un bombardeo masivo de mosquitos.
Sin embargo, si necesitas procesar una gran cantidad de datos, el tiempo ahorrado con este método puede ser considerable.
Espero que puedas sacar conclusiones de un ejemplo y aplicarlo de manera flexible en tu propio trabajo.
Para obtener más conocimientos de Python, preste atención a: ¡Sitio web de autoaprendizaje de Python! !