Déjà la semaine passée au salon du Big Data j’avais encore entendu parlé de traitement du langage naturel, et là au détour de recherches sur l’analyse syntaxique pour les langages C/C++ et Scala, je suis tout d’abord tombé sur NLTK qui me semblait déjà pas mal. Ensuite, sans trop d’effort, je suis tombé sur spaCy qui m’a tout de suite intrigué et un peu séduit (même si je n’en ai pas vraiment besoin en ce moment). C’est un techno à base de machine learning et, qui plus est, on peut tout à fait testé soit même ! Je n’ai pas attendu mon reste pour tester cela.
spaCy fournit une comparaison (je n’ai pas vérifié les infos) face à la concurrence, ce qui donne en plus un état de l’art.
Pour commencer, je me suis fait une image docker pour ne pas polluer mon environnement et jouer avec rapidement depuis n’importe où.
Il existe aussi d’autres sympathiques images déjà prêtes comme celle de https://github.com/jgontrum/spacy-api-docker qui est interrogeable via une API REST.
spaCy est un produit de ExplosionAI qui offre gentiment ces outils (demos en ligne et code sur GitHub) à côté d’une offre commerciale (je trouve que c’est une des meilleures techniques pour inspirer confiance et démontrer ses capacités).
L’API est complètement documentée ici et en bonus, j’ai trouvé ce mémo. A partid là, pour jouer un peu avec, à partir de l’image docker citée ci-dessus, j’ai créé ce petit script de démonstration (il existe des avec d’autres exemples de code). Si vous avez la flemme vous pouvez visualiser le résultat en ligne.
Le résultat est cette sortie :
Tokens: ADJ Next NOUN friday ADP at NUM 1 NOUN PM PUNCT , PRON I VERB will VERB have NOUN lunch ADP in PROPN Paris ADP with DET my NOUN friend PROPN Chris PUNCT , DET the NOUN one PRON who VERB has DET a ADJ red NOUN hair NOUN cat PUNCT . Entities [('Next friday', 'DATE'), ('1 PM', 'TIME'), ('Paris', 'GPE'), ('Chris', 'PERSON')]
Et ces éléments au format SVG et HTML:
Je pense que j’ai désormais suffisamment digressé de mon sujet principal; je retourne à mon analyse statique.