Je présente ici les besoins liés à notre démarche d’analyse de la production et de la publication de documents scientifiques -essentiellement des articles- par Telecom ParisTech.
Les articles
Télécom ParisTech dispose d’une base bibliographique qui recense l’essentiel de nos publications. Pour chaque publication, nous avons le titre, le nom des auteurs, la date de publication et quelques autres metadonnées. Quelquefois figure un lien vers la publication. Ce lien n’est pas toujours renseigné et, quand il l’est, il peut présenter différentes formes:
- il s’agit quelquefois d’un lien vers un accès direct, en ligne, à une version numérique de l’article, le plus souvent au format PDF
- il s’agit quelquefois d’un lien vers une page web qui contient un lien permettant d’accéder, souvent de manière onéreuse, à une version numérique de l’article
- quelquefois, il s’agit d’un lien mort
Il arrive que les liens vers les documents numériques ne soient pas exploitables par un robot pour constituer un stock de l’ensemble des documents. Nous verrons dans un prochain billet les solutions mises en oeuvre pour récupérer la plus forte proportion possible des documents.
Une évaluation sur 5 ans donne environ 4000 publications dont un quart comporte un lien, exploitable automatiquement et facilement dans un peu de la moitié des cas. Sur certains documents pèse une limitation des droits de publication qui nous empêche de les mettre en ligne. Cela a un impact significatif sur les solutions que nous allons pouvoir exploiter.
Le stockage
A la date de publication de ce billet, nous avons 420 documents nécessitant 180 Mo pour les documents sources. Si nous parvenons à récupérer les 4000 documents, nous aurons besoin d’environ 2 Go pour les documents sources.
Nous prévoyons de stocker des résultats intermédiaires de traitement; par exemple, nous allons stocker
- le texte brut extrait des documents PDF
- le dictionnaire des mots associés à un document
- des metadonnées associées à un document, issues de différentes étapes du traitement
Nous sommes plusieurs à travailler sur ce projet et nous prévoyons d’y associer des étudiants pour lesquels ce type de travail peut donner lieu à des projets très formateurs. Nous devons donc rendre nos sources et nos résultats accessibles via le réseau.
J’ai un accès à un stockage en ligne illimité via une solution d’hébergement qui, par ailleurs, ne supporte que les développements en PHP. C’est cet hébergement que je vais utiliser.
Les traitements
Un très bon outil pour appliquer des traitements sur des textes en vue de les analyser est NLTK. NLTK est écrit en Python. Donc, les traitements ne vont pas pouvoir être effectués au niveau de l’hébergement de nos sources.
Pour les traitements de représentations sémantiques, nous utilisons d’une part des outils écrits en Java s’appuyant sur Apache Jena/Fuseki, d’autre part un serveur Virtuoso accessible seulement sur le réseau interne de Telecom ParisTech.
La nécessité d’héberger des services écrits en différents langages, ce qu’aucune de nos solutions directes d’hébergement n’assure, nous conduisent à adopter une solution distribuée, basée sur des web services. Nous verrons dans un prochain billet la marche suivie pour créer un service en Python, exploitant NLTK et hébergé sur Heroku.
Point de départ algorithmique
Nous nous sommes inspiré de l’article « Using Linked Data Traversal to Label Academic Communities » de Tiddi, d’Aquin et Motta (SAVE-SD 2015). Cependant, nous avons complété ou modifié la procédure proposée. Par exemple, nous devons prendre en compte des publications en plusieurs langues (au moins le français et l’anglais); nous avons aussi décidé de nous appuyer sur Wordnet, lorque cela avait du sens. Nous avons entrepris la mise en oeuvre des étapes suivantes
- constitution d’une liste des chercheurs de l’école comportant leurs liens avec les départements et les équipes de recherche
- récupération de la liste des publications des 5 dernières années; la base bibliographique nous donne un résultat au format BIBTEX que nous avons traduit dans une structure JSON; une réflexion doit être menée pour rendre la solution plus modulaire, par exemple, en récupérant la base année par année, en prenant en compte la nécessité de mises à jour, certaines publications étant déclarées tardivement dans la base; de plus, les données obtenues présentent une série de défauts traités manuellement dans notre première phase de travail,
- pour chaque référence, tenter de récupérer une version numérique du document
- pour chaque référence récupérée, extraire le texte brut du document (voir https://onsem.wp.imt.fr/2016/06/02/extraire-le-texte-de-pdf-avec-python/)
- pour chaque référence récupérée, réunir des metadonnées (auteurs, références citées…) soit depuis le bibtex ci-dessus, soit par analyse du document,
- pour chaque référence récupérée, identifier la langue du document
- passer chaque texte en minuscule
- éliminer les mots vides dans chaque texte ainsi que les chiffres et les ponctuations
- stemmatiser et/ou lemmatiser les mots de chaque texte
- remplacer chaque racine issue de la stemmatisation par un mot qui partage cette racine (ex: le mot le plus court)
- filtrer la liste des mots conservés (blacklist, longueur minimale…)
- chercher un mapping de chaque mot vers un concept du web sémantique/LOD par exemple en se référant à DBPedia, à schema.org,à Wordnet, au vocabulaire de référence de l’IEEE et celui de l’ACM…; nous devrons évaluer le nombre de termes non mappés et chercher une solution pour ces termes
- évaluer le nombre de mots par article, par corpus (ex: corpus de Telecom ParisTech pour un intervalle d’années donné, idem pour un département, pour un auteur)
- construire la matrice TfIdf du corpus; on met en oeuvre des méthodes qui facilitent la mise à jour de cette matrice par exemple lors de l’ajout d’un nouvel article
- réduire cette matrice en éliminant les mots présents dans une forte proportion de documents (application d’un seuil, par exemple 25%); ces mots étant considérés comme faiblement discriminant; ils peuvent être gardés comme potentiellement représentatifs de la production globale de Télécom ParisTech
- réduire cette matrice en éliminant les mots présents un trop petit nombre de fois sur le corpus; ces mots étant considérés comme structurants pour le corpus
- application d’une méthode recherche de sémantique latente (LSA)
- clustering des mots restants soit par des méthodes de clustering appliquées à la matrice, soit en regroupant les mots sur des critères structurels de Telecom ParisTech (départements, équipes, projets…)
Ces différentes étapes doivent nous fournir les données de base pour nos analyses. Dans de prochains billets, nous étudierons plus en détail certaines de ces étapes. Nous allons aussi proposer des approches s’appuyant sur les technologies du web sémantique.
Ping : Extraire le texte de PDF avec Python | Objets Numériques et Sémantique