Devant un texte, il y a tant et tant de façon de s’y prendre pour le comprendre, y répondre, le résumer, le traduire, etc. C’est le monde du traitement automatique des langues naturelles (TALN). Les techniques sont complexes et réclament des compétences de haut niveau. Mais avant de se lancer à corps perdu dedans, vous pourriez vouloir vous essayer à quelques techniques simples, en tout cas relativement, pour toucher du doigt ce monde du langage naturel. Alors, faisons connaissance avec quelques unes d’entre-elles.
Tokenisation (ou tokenization) ou normalisation
C’est de loin la plus facile ! Elle consiste à consommer le texte et à en réduire tous les mots, quelques soient leurs différentes formes, en jetons (token). Vous pourrez ainsi, par exemple, compter combien de fois un mot donné se trouve dans un texte, ou bien retrouver les textes qui contiennent certains mots en utilisant même les fréquences d’apparition pour donner un peu de pertinence au passage…
Stemming ou racinisation (voire désuffixation)
La précédente techno était trop facile, vous êtes plus fort que ça. Alors, en voilà une autre. La racine d’un mot correspond à la partie du mot restante une fois que l’on a supprimé son préfixe et/ou son suffixe, on trouve alors sa racine. On l’appelle aussi parfois « stemme » du mot. Contrairement au lemme qui correspond à un mot réel de la langue, la racine ou stemme ne correspond généralement pas à un mot réel. Par exemple, le mot marcher a pour radical ou stemme march qui ne correspond pas à un mot réel. Par contre, dans l’exemple de montagne, le radical ou stemme est mont qui lui l’est.
Les algorithmes de racinisation sont de simples algorithmes de manipulation de chaînes de caractères qui dépendent des règles qui identifient les affixes qui peuvent être ôtés (par affixe, on entend préfixe comme suffixe). Ces algorithmes doivent connaître des règles telles que le doublement de la consonne, l’alternance consonantique n/m devant un b ou p, etc. Donc, bien sûr connaître les exceptions. Pour cela, ces algorithmes ont généralement besoin d’un dictionnaire.
L’algorithme le plus connu pour l’anglais est celui de Martin Porter, publié en 1979. Son usage original était la recherche d’information. On trouve des bibliothèques prêtes à l’emploi. Par exemple, celle de www.oleandersolutions.com, basée sur Porter, inclut des raciniseurs (ou stemmers) de l’anglais, du danois, du hollandais, du français, de l’allemand, de l’italien, du norvégien, du portugais, de l’espagnol, du suédois et du russe. Bref, c’est une bonne aide !
Pour en savoir un plus, comme d’hab, il y a wikipedia. Notamment, sur la différence entre lemmatisation et racinisation. Si vous allez sur le site de Jérôme Pasquelin, (Referenceur et Webmaster), vous pourrez essayer son outil de lemmatisation en ligne.
Tagging ou marquage de POS, l’étiquetage morpho-syntaxique
Les POS, ce sont les parties du discours (POS = part of speech). Le marquage des POS consiste à identifier les catégories de mots en restant relativement indépendant de la structure de la phrase. Il existe des moyens assez différents de parvenir à ce résultat. Les étiquettes (tag) sont associées aux mots. Par exemple, la phrase : « Le chien d’Emmanuel chante une mélodie connue » devient « Le/ART chien/NC d’/ART Emmanuel/NP chante/VRB une/ART mélodie/NC connue/PART ».
Le terme consacré, en français, pour cette technique, c’est l’étiquetage morpho-syntaxique. Avouez que ça fait bien. Les outils qui réalisent ce traitement s’appellent des étiqueteurs grammaticaux, ou « POS tagger » en anglais. Autant il en existe beaucoup pour la langue anglaise, autant ils sont difficiles à trouver pour notre langue. Il y a celui du LIA de l’Université d’Avignon.
Ces étiqueteurs grammaticaux prennent donc en entrée un texte brut pour produire en sortie un fichier d’annotations où chaque mot du texte d’entrée est associé à deux entités : son lemme et sa catégorie syntaxique, selon une classification donnée.
Pour continuer dans Wikipedia en français, mais l’article anglais est plus fouillé encore.
Chunking (shallow parsing) ou parsing par morceaux (morcellement)
Il s’agit, avec cette technique, d’identifier les principaux constituant d’une phrase. On ne cherche pas à reconnaître la structure de la phrase ni interne (dans le morceau), ni externe (entre les morceaux). Le morcellement peut donc laisser certaines parties du texte non analysées.
Un morceleur (chunker) est un algorithme qui détermine des séquences de mots, souvent en utilisant le texte étiqueté comme entrée. Les règles de morcellement peuvent être aussi simples que les expressions régulières – d’ailleurs on compare souvent les chunker au analyseur lexicaux des compilateurs. Les chunkers peuvent réaliser des encapsulations, mais en général, sans remonter de beaucoup de niveau. L’article de référence est celui de Steven P. Abney, en 1994 ; il est très compréhensible.
En conclusion
Ces techniques sont abordables, vous en conviendrez. Vous les avez déjà rencontrées, sans le savoir, dans les chat bots, ces programmes capables de dialoguer avec un usager en langue naturelle sur des sujets de nature générale ou bien sur des sujets ayant trait à un domaine particulier. Le premier chat bot, ELIZA, a été réalisé par J. Weizenbaum en 1965. Aujourd’hui, on les trouve dans des applications socio-ludiques sur l’Internet, comme les agents de conversation dans des sites où ils répondent à des questions dans un domaine bien spécifique.
Ils peuvent être utilisés dans des applications très ciblées où le vocabulaire et la syntaxe sont très contraints : commande vocale de machine outils ; commande de téléphone mobile ; langage militaire, etc. Un autre usage vient aussi de ce qu’il s’agit aussi d’un moyen simple permettant de faire un premier profilage. A vous de trouver votre cas d’usage !