Skip to content

Releases: GastonZalba/openalex-get

Anexo metodológico. Detalles del desarrollo del script

08 Sep 23:46
Compare
Choose a tag to compare

Para obtener los datos de OA se trabajó en el desarrollo de un script
en Python, de instalación y ejecución local, que permite a partir
de un listado de nombre de personas (input) extraer los datos de las
publicaciones utilizando su API online. A fin de que el programa
pueda ser utilizado por otras personas siguiendo procedimientos
sencillos, como requerimiento se buscó que sea ejecutado desde cualquier
computadora y que su instalación y uso no requiera de conocimiento
experto. Se programó, entonces, pensando en que pudieran adaptarse
parámetros para delimitar búsquedas o ajustarlas para evaluar
resultados, sin necesidad de reescribir código.

Debido a que OA se encontraba en estado Beta al momento de la
utilización, se debieron sortear algunos inconvenientes que se considera
son inherentes a su fase de desarrollo, por ejemplo, que en ocasiones
respondía de manera distinta a una misma petición. También se
encontraron complicaciones al momento de buscar coincidencia entre los
nombres de autor producto, en muchos casos, de las particularidades del
idioma español (por ej. tildes y ñ) o cuestiones típicas de los nombres
(ej. apellidos compuestos, con preposición y apellidos de casadas), que
requirió del mayor desarrollo del código (ver detalle en anexo 1).
Asimismo, se detectó la existencia de varias entradas que resultaban
válidas para un mismo autor entremezcladas con otras incorrectas, lo
cual posiblemente se deba a la multiplicidad de fuentes que integran OA.
En conjunto con estos, se sumó la dificultad de la falta de tildes en
nombres y apellidos en el input, por lo que se requirió el armado de
un listado de nombres y apellidos que se acentúan con frecuencia para
agregarlos "programáticamente" con el script. 

Entre los inconvenientes que no pudieron ser salvados deben mencionarse:
la existencia de autores homónimos (o con nombres muy similares) como
para ser adecuadamente distinguidos automáticamente y los nombres
variantes, entre ellos, el uso indistinto de apellidos de casada y/o
soltera, las firmas con pseudónimos y las firmas que utilizan iniciales.

El script funciona armando variaciones de los nombres -con y sin tilde,
iniciales de nombre, etc.- y realiza múltiples peticiones a la API que
vuelven a ser filtradas descartando homónimos de otros países a partir
de las instituciones declaradas en las afiliaciones (parámetro
country_code). Se puede determinar un porcentaje mínimo de trabajos
del autor matcheado para considerarlo perteneciente al país seleccionado
(parámetro match_percentage). Cabe aclarar que, como limitación, se
han encontrado casos donde el país no está presente por lo que no se
puede hacer esta comprobación. Solo si un autor pasa estas
comprobaciones sus trabajos son tomados como válidos y agregados a la
base final. Si en esta comprobación los trabajos encontrados son muy
pocos, se hace una segunda vuelta de búsqueda hasta alcanzar un mínimo
establecido.

Algunas dificultades que fueron encontradas:

  • Caracteres utf8, como tildes y la ñ, propios el lenguaje
    español, no son normalizados por el motor de búsqueda
    , por lo que
    búsquedas con nombres con tildes no matchean nombres sin él
    ("Pérez" ≠ "Perez"), y a la inversa. Esto es particularmente
    problemático si se tiene en cuenta que muchas veces esos tildes en
    los nombres propios y apellidos son removidos en las cargas de
    datos, y un mismo autor puede aparecer con y/o sin él
    indistintamente.

  • En casos de mujeres, el uso del "de" (presentes sólo a veces)
    para incorporar apellidos de casada, siendo OA incapaz de
    vincular ambas variaciones ("Perez de Hernandez" ≠ "Perez
    Hernandez")

  • Guiones medios como separador (presentes sólo a veces) de
    apellidos compuestos que el sistema no es capaz de "descartar" para
    realizar una comparativa
    ("Pérez*-*Hernández" ≠ "Pérez Hernández")

  • Estas cuestiones, y otras posiblemente debidas a la multiplicidad de
    fuentes de las que se nutre OA, dan por resultado que existen muchas
    entradas válidas para un mismo autor, con lo que una búsqueda
    puede devolver múltiples entradas correctas que están cargadas como
    entidades diferentes, y entremezcladas con otras incorrectas
    . Y de
    esos datos, los que el sistema devuelve en primer lugar y califica
    como de mayor score (cuya lógica y funcionamiento no está
    aclarado) no es siempre el nombre que pareciera "coincidir" mejor
    (por lo que la utilización de ese campo fue descartado).

  • OA es incapaz de matchear o "entender" correctamente las iniciales
    (modo en el que firman muchos autores). Entonces, puede encontrar
    coincidencias en nombres que claramente no debería ("Juan Alberto
    González" = "Juan C. González")

  • Datos incompletos. Muchos trabajos no tienen el campo
    "institutions" y/o "country", con lo cual se complejiza estimar la
    nacionalidad del autor matcheado. Por otro lado, algunas veces el
    tipo de trabajo (si la publicación es o no un "journal-article", por
    ejemplo), tampoco está presente.

  • Errores de tipeo en la carga de datos, aunque no muy común, se
    han encontrado entradas con nombres de autores mal escritos.

  • Límite en la cantidad de peticiones diarias: 50.000 (única
    limitación conocida de antemano, que se encuentra aclarada en la
    documentación de la API), que en verdad no impacta en la calidad de
    los datos devueltos, sino en el tiempo que lleva ejecutar la
    descarga.

A partir de estas limitaciones de los datos y de la API, el proceso de
descarga/selección de cada autor que realiza el script consiste en lo
siguiente:

  • Se lee el nombre de un autor con la siguiente estructura: "Apellido,
    Nombre1 Nombre2", utilizando la coma para determinar cuál es el
    apellido, y cuál/es el/los nombre/s

  • Se busca la correspondencia del autor con el listado de nombres y
    apellidos que frecuentemente llevan tilde
    , y se crea una versión
    "tildada" del mismo. Ej: "Maria Sanchez" pasa a ser también "María
    Sánchez"

  • Si el nombre/apellido en el listado original tenía tildes, se
    remueven, y se crea su versión sin tildes (caso inverso del ejemplo
    anterior)

  • Una vez creadas las versiones con tilde y sin tilde, se
    generan distintas versiones de búsqueda
    : utilizando sólo el primer
    nombre del autor, sólo el segundo nombre, sólo el primer apellido,
    sólo el segundo, utilización de iniciales en ambos nombres, inicial
    en sólo el segundo, remoción del conector "de" para apellidos de
    mujeres casadas, y todas las variaciones y combinaciones entre cada
    variación que de esto surge, con y sin tilde. Esto significa que
    por cada autor se realiza una docena de variaciones (o más en
    algunos casos), sobre el nombre a buscar y allí se hace una petición
    múltiple
    que posteriormente volverá a ser filtrada.

  • A partir de estos resultados, el script recorre cada autor
    devuelto y vuelve a hacer una comprobación de coincidencia entre lo
    que se buscó y lo que devolvió OA
    , refinando y reviendo las
    coincidencias.

  • A partir de este filtrado final de autores, se realiza la búsqueda
    de los trabajos por cada matcheo, y se evalúan cuántos de estos
    fueron realizados con instituciones de Argentina, para "intuir" la
    nacionalidad del autor.
    Si los trabajos llegan al porcentaje
    deseado de correspondencia, se los considerará válidos, y de este
    modo se descartan muchos homónimos de otros países. Cabe aclarar,
    como limitación, que se han encontrado casos donde este campo no
    está presente y no se puede hacer esta comprobación.

  • Sólo si un autor pasa estas comprobaciones sus trabajos son tomados
    como válidos y agregados a la base final. Y si en esta comprobación
    los trabajos encontrados son muy pocos, se hace una segunda vuelta
    de búsqueda hasta alcanzar un mínimo establecido.

Por otro lado, cabe destacar que para el desarrollo del código se han
tenido en cuenta las siguientes consideraciones generales:

- Que sea de fácil instalación/ejecución, incluso para usuarios no
expertos en el tema
. Por esta razón se escoge hacerlo en lenguaje
Python, que además es de rápida escritura y fácil lectura, familiar en
muchos ámbitos y aplicaciones. Si bien Python es de ejecución "lenta" en
comparación a otros lenguajes, en este caso eso no afecta
sustancialmente el proceso, ya que la velocidad de la respuesta de la
API es la que en verdad dictamina los tiempos de ejecución.

-  Teniendo en cuenta que la descarga de un listado de unas 10.000
entradas puede llevar varias horas de ejecución, se evaluó como
fundamental la posibilidad de retomar la ejecución de un trabajo
inconcluso/incompleto
, sea por crasheo de la API, la limitación de
peticiones diarias de la misma, corte abrupto de luz/internet, o incluso
nuevos elementos incorporados en el listado. El script va escribiendo en
bloque los trabajos del autor a medida que éste se evalúa cómo válido,
de este modo no se sobrecarga la memoria y en casos de cortes abruptos,
el trabajo "perdido" sería siempre de un solo autor.

- Debe poder correr en una pc normal sin grandes especificaciones
técnicas, incluso con listados grandes de autores. 

- Posibilidad de afinar/ajustar parámetros de búsqueda para evaluar
diferentes resultados sin necesidad de reescribir código,
o incluso
adaptar el código a búsquedas futuras (se creó una hoja/archivo donde se
puede configurar parcialmente la ejecución). De este modo el script
puede ser adaptado a otras listas, otross tipo de filtros (de país, de
tipo de elemento, etc.) sin necesidad de reescribir código.

Gastón Zalba
2023/09/08