[Cvu] nuevo programa

Luis Mochan mochan en icf.unam.mx
Sab Mayo 5 17:48:04 CDT 2018


Les presumo mi nuevo programa.

Se llama re2yaml y sirve para capturar una lista de publicaciones en
un formato arbitrario que pueda describirse como una expresión
regular. Por ejemplo, para capturar la lista de publicaciones que me
envió Carlos Arias usé el comando

re2yaml.pl -o carlosArias.yaml -i carlosArias.txt \
   -f 'autores año título revista volumen páginas doi' \
   -r  '^\d*\.\s*(.*?\s+)(\d+)[\s\.]+(.*?)\.\s+(.*?)\s+(\d+)\s*(?:\(\s*\d+\s*\))?:\s*(.*?)\s*(?:doi\s*:\s*(.*))?$' \
   -a '(?:and)?(.*?,\s+.*?[,\.]+)\s+'

que se ve espantoso, pero se los explico a los curiosos y pacientes:

re2yaml.pl
   es el nombre de mi programa

-o carlosArias.yaml
   indica el nombre del archivo donde dejar la información capturada

-i carlosArias.txt
   es el nombre donde puse su lista de publicaciones (convertida de un
   .doc)

-f 'autores año título revista volumen páginas doi'
   significa que a Carlos le gusta poner primero los autores, luego el
   año, luego el título, etc.

-r '^\d*\.\s*(.*?\s+)(\d+)[\s\.]+(.*?)\.\s+(.*?)\s+(\d+)\s*(?:\(\s*\d+\s*\))?:\s*(.*?)\s*(?:doi\s*:\s*(.*))?$' \
   es donde empieza la diversión. Ésta es una expresión regular que
   define la estructura detallada de cómo escribe Carlos sus
   publicaciones. La explicación va más abajo.
   
-a '(?:and)?(.*?,\s+.*?[,\.]+)\s+' \
   Esta es una expresión regular para extraer cada uno de los autores
   de una lista de autores.

Lo acabo de probar y aparentemente funciona. La dificultad es que no
somos muy consistentes en cómo escribimos y eso lleva a
ambigüedades. Tuve que meterle mano a la lista de Carlos para que el
programa pudiera con ella. Me inventé las expresiones regulares para
que funcionaran con los primeros artículos, y entonces tuve que
modificar algunos de los últimos artículos, pues su estilo ha cambiado
a lo largo del año. Con todo y todo, hacer el programa desde cero,
hacer y probar las expresiones regulares y condicionar la lista de
publicaciones me tomó arribita de 4hrs. El programa debe servir sin
mayor modificación para las otras listas que me han enviado. Luego les
cuento si es cierto o no.

Las expresiones regulares son bastante ilegible, pero su gracia es que
en un par de líneas puede uno capturar la esctructura de la
lista. Sólo es necesario hallar y registrar la expresión regular que decriba cada
estilo de CV y checar que el CV cumpla consistentemente con dicha
expresión :)


Va la explicación.

Expresión regular para capturar los artículos:

-r '^\d*\.\s*(.*?\s+)(\d+)[\s\.]+(.*?)\.\s+(.*?)\s+(\d+)\s*(?:\(\s*\d+\s*\))?:\s*(.*?)\s*(?:doi.*)?\s*$'

Explicación:
^    	  	  Principio 
\d*  	  	  Me salto numeración.
\.   	  	  Me salto un punto.
\s*  	  	  Me salto espacios.
(.*?\s+)  	  Capturo autores separados por espacios 
(\d+) 	  	  hasta hallar el año, el cual capturo.
[\s\.]+   	  Me salto espacios y/o puntos
(.*?) 	  	  y capturo el título
\. 	  	  terminado en un punto y
\s+ 	  	  seguido de espacios y
(\d+)	  	  del número de volumen. Este puede ir seguido de 
\s* 	  	  espacios y
(?:\(\s*\d+\s*\)) del número entre paréntesis y con posibles espacios.
?		  El número es opcional
:		  Luego siguen dos puntos,
\s* 		  espacio opcional, y
(.*?)		  las páginas, que capturo. Finalmente pueden haber
\s* 		  espacios adicionales
(?:doi\s*:\s*(.*))?  y un doi opcional. Siguen
\s* 		  espacios opcionales y
$		  el final del registro


Expresión regular para separar los autores:

-a '(?:and)?(.*?,\s+.*?[,\.]+)\s+'

		  Hay un
(?:and)? 	  'and' opcional para el último autor.
(                 Inicia la captura con 
.*?		  el nombre
,		  seguido de una coma
\s+		  seguido de uno o más espacios
.*?		  seguido de lo que sea
[,.]+		  hasta hallar un punto o una coma o ambos.
)		  Termina la captura
\s+		  y siguen espacios

El orden de los campos capturados es

-f 'autores año título revista volumen páginas'

Si por ejemplo corro el programa sobre

127. Aponte, FE, Taboada, B, Espinoza, MA, Arias-Ortiz, MA, Monge-Martínez, J, Rodríguez-Vázquez, R, Díaz-Hernández, F, Zárate-Vidal, F, Wong-Chew, RM, Firo-Reyes, V, del Río-Almendárez, CN, Gaitán-Meza, J, Villaseñor-Sierra, A, Martínez-Aguilar, GM, García-Borjas, M, Noyola, DE, Pérez-Gónzalez, LF, López, S, Santos-Preciado, JI, Arias, CF. 2014. Rhinovirus is an important pathogen in upper and lower respiratory tract infections in Mexican children. Virology Journal. 2015, 12:31. DOI: 10.1186/s12985-015-0262-z.

el resultado es

-
    autores:
      - 'Aponte, FE,'
      - 'Taboada, B,'
      - 'Espinoza, MA,'
      - 'Arias-Ortiz, MA,'
      - 'Monge-Martínez, J,'
      - 'Rodríguez-Vázquez, R,'
      - 'Díaz-Hernández, F,'
      - 'Zárate-Vidal, F,'
      - 'Wong-Chew, RM,'
      - 'Firo-Reyes, V,'
      - 'del Río-Almendárez, CN,'
      - 'Gaitán-Meza, J,'
      - 'Villaseñor-Sierra, A,'
      - 'Martínez-Aguilar, GM,'
      - 'García-Borjas, M,'
      - 'Noyola, DE,'
      - 'Pérez-Gónzalez, LF,'
      - 'López, S,'
      - 'Santos-Preciado, JI,'
      - 'Arias, CF.'
    año: '2015'
    doi: 10.1186/s12985-015-0262-z.
    páginas: '31.'
    revista: 'Virology Journal,'
    título: 'Rhinovirus is an important pathogen in upper and lower respiratory tract infections in Mexican children'
    volumen: '12'
-

En este formato es trivial añadirle el ISSN: 1743-422X y enviarlo a
conacyt para que lo carguen en su CVU.

Más tarde pruebo las otras listas que me enviaron. 







-- 

                                                                  o
W. Luis Mochán,                      | tel:(52)(777)329-1734     /<(*)
Instituto de Ciencias Físicas, UNAM  | fax:(52)(777)317-5388     `>/   /\
Apdo. Postal 48-3, 62251             |                           (*)/\/  \
Cuernavaca, Morelos, México          | mochan en fis.unam.mx   /\_/\__/
GPG: 791EB9EB, C949 3F81 6D9B 1191 9A16  C2DF 5F0A C52B 791E B9EB





Más información sobre la lista de distribución Cvu