Aller au contenu

« Racinisation » : différence entre les versions

Un article de Wikipédia, l'encyclopédie libre.
Contenu supprimé Contenu ajouté
m r2.7.3) (robot Ajoute : zh:词干提取
Criric (discuter | contributions)
Article connexe
 
(43 versions intermédiaires par 36 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
{{Infobox Méthode scientifique}}
En [[linguistique]], la '''racinisation''' (ou désuffixation, ou [http://en.wikipedia.org/wiki/Stemming stemming] en anglais) est le nom donné au procédé qui vise à transformer les flexions en leur [[Radical (linguistique)|radical]] ou stemme. Il cherche à rassembler les différentes variantes flexionnelle et dérivationnelle d’un mot autour d’un [[stemme (linguistics)|stemme]].


En [[linguistique]], la '''racinisation''' ou '''désuffixation''' est un procédé de transformation des flexions en leur [[Radical (linguistique)|radical]] ou racine.
La racine d’un mot correspond à la partie du mot restante une fois que l’on a supprimé son préfixe et son suffixe, à savoir son radical. Elle est aussi parfois connu sous le nom de [[stemme (linguistics)|stemme]] d’un 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.
La racine d’un mot correspond à la partie du mot restante une fois que l’on a supprimé son (ses) préfixe(s) et suffixe(s), à savoir son radical. Contrairement au [[lemme (linguistique)|lemme]] qui correspond à un terme issu de l’usage ordinaire des locuteurs de la langue, la racine ne correspond généralement qu’à un terme résultant de ce type d’analyse.
Par exemple, le mot « chercher » a pour radical ou stemme « cherch » qui ne correspond pas à un mot réel. Par contre dans l’exemple de « frontal » , le radical ou stemme est « front » qui lui l’est.
Par exemple, le mot ''chercher'' a pour radical ''cherch'' qui ne correspond pas à un terme employé en dehors d’une référence à ce radical même. Dans des cas particuliers, le radical peut coïncider avec un terme de vocabulaire ordinaire. C’est par exemple le cas de ''frontal'' qui donne la racine ''front''.


Les techniques utilisées pour ce faire reposent généralement sur une liste d’affixes (suffixes, préfixes, postfixe, antéfixes) de la langue considérée et sur un ensemble de règles de racinisation/désuffixation construites a priori qui permettent, étant donné un mot de trouver son [[stemme (linguistics)|stemme]].
Les techniques utilisées pour ce faire reposent généralement sur une liste d’[[affixe]]s (suffixes, préfixes, infixes, circonfixes) de la langue considérée et sur un ensemble de règles de racinisation/désuffixation construites ''a priori'' qui permettent, étant donné un mot de trouver sa racine.

Algorithmes pour racinisation ont été étudiés en informatique depuis 1968. Les meilleurs algorithmes connus de racinisation ont été développés par Julie Beth Lovins (1968)<ref>Julie Beth Lovins (1968). Development of a stemming algorithm. Mechanical Translation and Computational Linguistics '''11''':22–31.</ref> et [http://en.wikipedia.org/wiki/Martin_Porter Martin Porter] (1980)<ref>site official d'algorithme de Porter: http://tartarus.org/~martin/PorterStemmer/</ref>
Un programme informatique de racinisation est appelé un racinisateur. Les algorithmes les plus connus ont été développés par {{lien|Julie Beth Lovins}} (1968)<ref>Julie Beth Lovins (1968). Development of a stemming algorithm. Mechanical Translation and Computational Linguistics '''11''':22–31.</ref> et {{lien|Martin Porter}} (1980)<ref>site official d'algorithme de Porter: http://tartarus.org/~martin/PorterStemmer/</ref>.
Et les réalisation d'algorithmes de racilisation sont applés « stemmer » ou «  racinisateur ».
La racinisation est un procédé fréquent dans les applications de [[traitement automatique du langage naturel]], par exemple dans la [[traduction automatique]], la [[recherche d'information]] (reconnaissance d'entités) et l'indexation des moteurs de recherche.


==Exemples==
==Exemples==
Par exemple, en anglais, la racinisation de "fishing", "fished", "fish" et "fisher" donne "fish". Si on ne conservait dans l'index que les mots tel quel, il serait impossible lors d'une recherche de faire référence aux documents comportants uniquement le mot "fishing" en cherchant "fisher". Grâce à la racinisation on sait qu'ils partagent la même racine et qu'à priori ils font partie du même lexique.
Par exemple, en anglais, la racinisation de « ''fishing'' », « ''fished'' » , « ''fish'' » et « ''fisher'' » donne « ''fish'' ». Si on ne conservait dans l'index que les mots tels quels, il serait impossible lors d'une recherche de faire référence aux documents comportant uniquement le mot « ''fishing'' » en cherchant « ''fisher'' ». Grâce à la racinisation on sait qu'ils partagent la même racine et qu'à priori ils font partie du même lexique.

À l'inverse, la racinisation est aussi source d'erreur. Par exemple en anglais, les mots « ''university'' » et « ''universe'' » ont la même racine («''univers''») quand bien même les documents utilisant ces deux mots peuvent avoir un rapport très ténu.


==Les différents algorithmes==
==Les différents algorithmes==
Ligne 16 : Ligne 20 :
Il est important de noter que les racines fournies par l’algorithme de Porter ne sont pas forcément de véritables morphèmes.
Il est important de noter que les racines fournies par l’algorithme de Porter ne sont pas forcément de véritables morphèmes.


Deux principales familles de stemmers sont présentes dans la littérature : les stemmers algorithmiques et ceux utilisant un dictionnaire<ref>Racinisateur de Paice/Husk: http://alx2002.free.fr/utilitarism/stemmer/stemmer_fr.html</ref>.
Deux principales familles de racinisateurs sont présentes dans la littérature : les racinisateurs algorithmiques et ceux utilisant un dictionnaire<ref>Racinisateur de Paice/Husk: http://alx2002.free.fr/utilitarism/stemmer/stemmer_fr.html</ref>.
:'''Un stemmer algorithmique''' va être souvent plus rapide et va permettre d'extraire des racines de mots inconnus (en un sens, tous les mots qu'il rencontre lui sont inconnus). Il va cependant avoir un taux d'erreur plus élevé, groupant ensembles des mots qui ne devraient pas l'être (sur-racinisation, ou over-stemming).
:'''Un racinisateur algorithmique''' va être souvent plus rapide et va permettre d'extraire des racines de mots inconnus (en un sens, tous les mots qu'il rencontre lui sont inconnus). Il va cependant avoir un taux d'erreur plus élevé, regroupant des mots qui ne devraient pas l'être (sur-racinisation).
:'''L'approche par dictionnaire''' quant à elle ne fait pas d'erreur sur les mots connus, mais en produit sur ceux qu'elle ne liste pas. Elle est aussi plus lente, et nécessite malgré tout la suppression de suffixes avant d'aller chercher la racine correspondante dans le dictionnaire.
:'''L'approche par dictionnaire''' quant à elle ne fait pas d'erreur sur les mots connus, mais en produit sur ceux qu'elle ne liste pas. Elle est aussi plus lente, et nécessite malgré tout la suppression de suffixes avant d'aller chercher la racine correspondante dans le dictionnaire.


===Algorithme de Porter===
=== Algorithme de Porter ===
L'algorithme développé par PORTER se compose d'une cinquantaine de règles de racinisation/désuffixation classées en sept phases successives (traitement des pluriels et verbes à la troisième personne du singulier, traitement du passé et du progressif,...). Les mots à analyser passent par tous les stades et, dans le cas où plusieurs règles pourraient leur être appliquées, c'est toujours celle comprenant le suffixe le plus long qui est choisie. La racinisation/désuffixation est accompagnée, dans la même étape, de règles de recodage. Ainsi, par exemple, "troubling" deviendra "troubl" par enlèvement du suffixe marqueur du progressif -ing et sera ensuite transformé en "trouble" par application de la règle "bl" devient "ble". Cet algorithme comprend aussi cinq règles de contexte, qui indiquent les conditions dans lesquelles un suffixe devra être supprimé. La terminaison en -ing, par exemple, ne sera enlevée que si le radical comporte au moins une voyelle. De cette manière, "troubling" deviendra "troubl", nous l'avons vu, alors que "sing" restera "sing".
L'algorithme développé par Porter se compose d'une cinquantaine de règles de racinisation/désuffixation classées en sept phases successives (traitement des pluriels et verbes à la troisième personne du singulier, traitement du passé et du progressif, ...). Les mots à analyser passent par tous les stades et, dans le cas où plusieurs règles pourraient leur être appliquées, c'est toujours celle comprenant le suffixe le plus long qui est choisie. La racinisation/désuffixation est accompagnée, dans la même étape, de règles de recodage. Ainsi, par exemple, "troubling" deviendra "troubl" par enlèvement du suffixe marqueur du progressif -ing et sera ensuite transformé en "trouble" par application de la règle "bl" devient "ble". Cet algorithme comprend aussi cinq règles de contexte, qui indiquent les conditions dans lesquelles un suffixe devra être supprimé. La terminaison en -ing, par exemple, ne sera enlevée que si le radical comporte au moins une voyelle. De cette manière, "troubling" deviendra "troubl", nous l'avons vu, alors que "sing" restera "sing".


====Détail de l'algorithme de Porter<ref>http://www-igm.univ-mlv.fr/~lecroq/cours/porter.pdf</ref>====
====Détail de l'algorithme de Porter<ref>http://www-igm.univ-mlv.fr/~lecroq/cours/porter.pdf</ref> ====
Soit <math>\scriptstyle v</math> représente une voyelle (y est considéré comme une voyelle s'il est précédé par une consonne), <math>\scriptstyle c</math> représente une consonne; et soit <math>\scriptstyle V</math> représente une suite de voyelles, <math>\scriptstyle C</math> représente une suite de consonnes, alors, un mot en anglais peut être de l'une des 4 formes suivantes:
Soit <math>\scriptstyle v</math> représentant une voyelle ('y' est considéré comme une voyelle s'il est précédé par une consonne), <math>\scriptstyle c</math> représentant une consonne ; et soit <math>\scriptstyle V</math> représentant une suite de voyelles, <math>\scriptstyle C</math> représentant une suite de consonnes, alors, un mot en anglais peut être de l'une des 4 formes suivantes :
* <math>\scriptstyle CVCV\ldots C</math>
* <math>\scriptstyle CVCV\ldots C</math>
* <math>\scriptstyle CVCV\ldots V</math>
* <math>\scriptstyle CVCV\ldots V</math>
* <math>\scriptstyle VCVC\ldots C</math>
* <math>\scriptstyle VCVC\ldots C</math>
* <math>\scriptstyle VCVC\ldots V</math>
* <math>\scriptstyle VCVC\ldots V</math>
ce qui peut se représenter par <math>\scriptstyle C?VCVC\ldots V?</math> ou <math>\scriptstyle C?(VC)^mV?</math>, où <math>m</math> est appelée la mesure d'un mot. Les valeurs différents présent les mots différents:
ce qui peut se représenter par <math>\scriptstyle C?VCVC\ldots V?</math> ou <math>\scriptstyle C?(VC)^mV?</math>, où <math>m</math> est appelée la mesure d'un mot. Les valeurs différents présent les mots différents :
* <math>m=0</math>: tree, by
* <math>m=0</math> : tree, by
* <math>m=1</math>: trouble, oats, trees, ivy
* <math>m=1</math> : trouble, oats, trees, ivy
* <math>m=2</math>: troubles, private, oaten, orrery
* <math>m=2</math> : troubles, private, oaten, orrery


Les règles de désuffixation/racinisation sont exprimées sous la forme
Les règles de désuffixation/racinisation sont exprimées sous la forme
<math>\scriptstyle (condition) S_1 \mapsto S_2</math>
<math>\scriptstyle (condition) S_1 \mapsto S_2</math>
ce qui signifie que si un mot se termine par <math>\scriptstyle S_1</math> et que le préfixe satisfait la condition alors le suffixe <math>\scriptstyle S_1</math> est remplacé par <math>\scriptstyle S_2</math>
ce qui signifie que si un mot se termine par <math>\scriptstyle S_1</math> et que le préfixe satisfait la condition alors le suffixe <math>\scriptstyle S_1</math> est remplacé par <math>\scriptstyle S_2</math>

* <math>\scriptstyle ^*e</math> : le préfixe se termine par la lettre <math>\scriptstyle e</math>
* <math>\scriptstyle ^*e</math> : le préfixe se termine par la lettre <math>\scriptstyle e</math>
* <math>\scriptstyle ^*v^*</math> : le préfixe contient une voyelle
* <math>\scriptstyle ^*v^*</math> : le préfixe contient une voyelle
* <math>\scriptstyle ^*d</math> : le préfixe se termine par une consonne doublée
* <math>\scriptstyle ^*d</math> : le préfixe se termine par une consonne doublée
* <math>\scriptstyle ^*o</math> : le préfixe se termine par <math>\scriptstyle cvc</math> où le second <math>\scriptstyle c</math> n'est ni <math>\scriptstyle w</math>, ni <math>\scriptstyle x</math>, ni <math>\scriptstyle y</math>.
* <math>\scriptstyle ^*o</math> : le préfixe se termine par <math>\scriptstyle cvc</math> où le second <math>\scriptstyle c</math> n'est ni <math>\scriptstyle w</math>, ni <math>\scriptstyle x</math>, ni <math>\scriptstyle y</math>.
Il est possible d'utiliser des opérateurs booléens: et, ou, non
Il est possible d'utiliser des opérateurs booléens : et, ou, non


{| class="wikitable" style="text-align:left; width:90%"
{| class="wikitable" style="text-align:left; width:90%"
Ligne 65 : Ligne 68 :
* (*v*) ''ING'' →
* (*v*) ''ING'' →
| width="45%" |
| width="45%" |
feed → feed, agreed → agree<br \>plastered → plaster, bled → bled<br \>motoring → motor, sing → sing
feed → feed, agreed → agree<br>plastered → plaster, bled → bled<br>motoring → motor, sing → sing
|-
|-
| width = "5%" |
| width = "5%" |
Ligne 83 : Ligne 86 :
* …
* …
| width="45%" |
| width="45%" |
relational → relate<br \>conditional → condition, rational → rational<br \>valenci → valence<br \>
relational → relate<br>conditional → condition, rational → rational<br>valenci → valence<br>
hesitansi → hesitance<br \>
hesitansi → hesitance<br>
|-
|-
Ligne 96 : Ligne 99 :
* …
* …
| width="45%" |
| width="45%" |
triplicate → triplic<br \>formative → form<br \> formalize → formal<br \>electriciti → electric<br \>…
triplicate → triplic<br>formative → form<br> formalize → formal<br>electriciti → electric<br>…
|-
|-
| width="20%" colspan ="2"|
| width="20%" colspan ="2"|
Ligne 107 : Ligne 110 :
*…
*…
| width="45%" |
| width="45%" |
revival → reviv<br \>allowance → allow<br \>inference → infer<br \>airliner → airlin<br \>…
revival → reviv<br>allowance → allow<br>inference → infer<br>airliner → airlin<br>…
|-
|-
| width="20%" colspan ="2"|
| width="20%" colspan ="2"|
Ligne 116 : Ligne 119 :
* (m>1 and *d and *L) → lettre non doublée
* (m>1 and *d and *L) → lettre non doublée
| width="45%" |
| width="45%" |
probate → probat, rate → rate<br \> cease → ceas<br \> controll → control, roll → roll
probate → probat, rate → rate<br> cease → ceas<br> controll → control, roll → roll
|-
|}
|}
Tester cet algorithme avec 2 mots: Generalizations et Oscillators
Tester cet algorithme avec 2 mots: Generalizations et Oscillators
Ligne 132 : Ligne 134 :
: étape 5: '''Oscil'''
: étape 5: '''Oscil'''


L'algorithme de Porter est distribué librement et a été implanté dans de nombreux langages. En 2000 Martin Porter fourni sa propre implémentation<ref> http://tartarus.org/~martin/PorterStemmer/</ref>de son algorithme dans plusieurs langages car les autres contenant de légères failles.
L'algorithme de Porter est distribué librement et a été implanté dans de nombreux langages. En 2000 Martin Porter fournit sa propre implémentation<ref>{{lien web |titre=Porter Stemming Algorithm |url=http://tartarus.org/~martin/PorterStemmer/ |site=tartarus.org |consulté le=16-05-2021}}.</ref> de son algorithme dans plusieurs langages car les autres contenant de légères failles.
L'algorithme de Porter est efficace pour l'anglais mais pas très adapté au français. Un autre algorithme est donc en suite développé pour le français.
L'algorithme de Porter est efficace pour l'anglais mais pas très adapté au français. Un autre algorithme est donc ensuite développé pour le français.


===Carry, un algorithme de racinisation pour le français===
===Carry, un algorithme de racinisation pour le français===
Tout comme celui de Porter, l'algorithme de ''Carry'' se déroule en diverse étapes par lesquelles les mots à traiter passent successivement. Selon les règles, quand l'analyseur reconnaît un suffixe de la liste, soit il le supprime, soit il le transforme. C'est ici aussi le suffixe le plus long qui détermine la règle à appliquer<ref>M. Paternostre, P. Francq, J. Lamoral. Carry, un algorithme de désuffixation pour le fraçais</ref>.
Tout comme celui de Porter, l'algorithme de ''Carry'' se déroule en diverse étapes par lesquelles les mots à traiter passent successivement. Selon les règles, quand l'analyseur reconnaît un suffixe de la liste, soit il le supprime, soit il le transforme. C'est ici aussi le suffixe le plus long qui détermine la règle à appliquer<ref>M. Paternostre, P. Francq, J. Lamoral. Carry, un algorithme de désuffixation pour le français</ref>.


Les règles de ''Carry'' ont été proposé pour l'étude de la morphologie de français, et ils sont téléchargeable gratuitement sur le site du projet GALILEI<ref>http://www.galilei.ulb.ac.be</ref> (Generic Analyser and Listener for Indexed and Linguistics Entities of Information).
Les règles de ''Carry'' ont été proposées pour l'étude de la morphologie de français, et ils sont téléchargeables gratuitement sur le site du projet GALILEI<ref>{{Lien web|titre=Plate-forme GALILEI|url=http://www.otlet-institute.org/GALILEI_Platform_fr.html|site=www.otlet-institute.org|consulté le=2016-04-12}}</ref> (Generic Analyser and Listener for Indexed and Linguistics Entities of Information).


===Algorithme de Paice/Husk<ref>site officiel d'algorithme de Paice/Husk: http://www.comp.lancs.ac.uk/computing/research/stemming/</ref>===
===Algorithme de Paice/Husk<ref>site officiel d'algorithme de Paice/Husk: http://www.comp.lancs.ac.uk/computing/research/stemming/</ref> ===


L'algorithme de Paice/Husk appartient à la famille des stemmers algorithmiques. Il se base sur un ensemble de règles pour extraire les racines, et qui plus est stocke ces règles en dehors du code. Ainsi, il est possible de traiter de la même façon une nouvelle langue à partir d'un autre ensemble de règles sans réécrire le code, moyennant quelques ajustements (pour chaque langue, la liste des voyelles acceptées et les règles de validité des racines doivent être fournies). Ainsi l'algorithme est plus facilement portable à la gestion d'une nouvelle langue.
L'algorithme de Paice/Husk appartient à la famille des stemmers algorithmiques. Il se base sur un ensemble de règles pour extraire les racines, et qui plus est stocke ces règles en dehors du code. Ainsi, il est possible de traiter de la même façon une nouvelle langue à partir d'un autre ensemble de règles sans réécrire le code, moyennant quelques ajustements (pour chaque langue, la liste des voyelles acceptées et les règles de validité des racines doivent être fournies). Ainsi l'algorithme est plus facilement portable à la gestion d'une nouvelle langue.


Cet algorithme a été développé par Chris Paice à l’Université Lancaster dans les années 80. Il a ensuite été codé en Pascal, C, PERL et Java.
Cet algorithme a été développé par Chris Paice à l’Université Lancaster dans les années 1980. Il a ensuite été codé en Pascal, C, PERL et Java.


L'implémentation de l'algorithme de Paice/Husk est composée d'un ensemble de fonctions qui vont utiliser les règles d'extraction de racines applicables au mot fourni en entrée d'un ensemble de fonctions qui vont utiliser les règles d'extraction de racines applicables au mot fourni en entrée et vérifier l'acceptabilité de la racine proposée.
L'implémentation de l'algorithme de Paice/Husk est composée d'un ensemble de fonctions qui vont utiliser les règles d'extraction de racines applicables au mot fourni en entrée et vérifier l'acceptabilité de la racine proposée.


==Racinisation vs. [[Lemmatisation]]==
==Racinisation vs. [[lemmatisation]]==
Racinisation et [[Lemmatisation]] sont deux notions très proches, mais il y a des différences fondamentales:
Racinisation et [[lemmatisation]] sont deux notions très proches, mais il y a des différences fondamentales:
#Les méthodes utilisées pour la lemmatisation et la désuffixation ne sont pas les mêmes
#Les méthodes utilisées pour la lemmatisation et la désuffixation ne sont pas les mêmes
#La '''[[lemmatisation]]''' a pour objectif de retrouver le lemme d'un mot, par exemple l'infinitif pour les verbes. La '''racinisation''' consiste à supprimer la fin des mots, ce qui peut résulter en un mot qui n'existe pas dans la langue. Par exemple, le résultat de la désuffixation pour le mot "dividing" en anglais est "divid", qui n'existe pas en anglais.
#La '''[[lemmatisation]]''' a pour objectif de retrouver le lemme d'un mot, par exemple l'infinitif pour les verbes. La '''racinisation''' consiste à supprimer la fin des mots, ce qui peut résulter en un mot qui n'existe pas dans la langue. Par exemple, le résultat de la désuffixation pour le mot "dividing" en anglais est "divid", qui n'existe pas en anglais.
Ligne 156 : Ligne 158 :
:*Suppression des flexions
:*Suppression des flexions
:*Suppression des suffixes
:*Suppression des suffixes
::Ex : ''cheval, chevaux, chevalier, chevalerie, chevaucher''⇒« ''cheva'' » (mais pas « cavalier »)
::Ex : ''cheval, chevaux, chevalier, chevalerie, chevaucher''⇒« ''cheva'' » (mais pas « cavalier »)
:'''But''': faire augmenter le rappel en RI
:'''But''': faire augmenter le rappel en RI
:'''Risque''': faire baisser la précision
:'''Risque''': faire baisser la précision

*La racinisation conduit à des formes qui ne sont pas des mots. C'est donc un traitement final, qui n'autorise rien de plus fin derrière.
*La racinisation conduit à des formes qui ne sont pas des mots. C'est donc un traitement final, qui n'autorise rien de plus fin derrière.
*La racinisation agrège aussi des formes très différentes
*La racinisation agrège aussi des formes très différentes
: ''marmaille, marmite'' ⇒ ''marm''
: ''marmaille, marmite'' ⇒ ''marm''
*La racinisation est très rapide, la lemmatisation s'inscrit dans le processus d'étiquetage morphosyntaxique
*La racinisation est très rapide, la lemmatisation s'inscrit dans le processus d'[[Étiquetage morpho-syntaxique|étiquetage morphosyntaxique]]


;Lemmatisation : obtention de la forme canonique (le ''lemme'') à partir du mot
;Lemmatisation : obtention de la forme canonique (le ''lemme'') à partir du mot
:* Pour un verbe: sa forme à l'infinitif
:* Pour un verbe: sa forme à l'infinitif
:* Pour un nom, adjectif, article, ... : sa forme au masculin singulier
:* Pour un nom, adjectif, article, ... : sa forme au masculin singulier

*La lemmatisation n'agrège que les variantes flexionnelles
*La lemmatisation n'agrège que les variantes flexionnelles
:(''cheval'' ≡ ''chevaux'') ≠ ''chevalerie'' ≠ ''chevauche''
:(''cheval'' ≡ ''chevaux'') ≠ ''chevalerie'' ≠ ''chevauche''


==Application==
==Application==
Les moteurs de recherche utilisent des stemmers pour améliorer la recherche d'information. Les mots-clés d'une requête ou d'un document sont représentés par leurs racines plutôt que par les mots d'origine. Plusieurs variantes d'un terme peuvent ainsi être groupées dans une seule forme représentative, ce qui réduit la taille du dictionnaire, c'est-à-dire le nombre de termes distincts nécessaires pour représenter un ensemble de documents. Un dictionnaire de taille réduite permet de gagner à la fois de l'espace et du temps d'exécution. Mais stemmers fait aussi baisser la précision.
Les moteurs de recherche utilisent des stemmers pour améliorer la recherche d'information. Les mots-clés d'une requête ou d'un document sont représentés par leurs racines plutôt que par les mots d'origine. Plusieurs variantes d'un terme peuvent ainsi être groupées dans une seule forme représentative, ce qui réduit la taille du dictionnaire, c'est-à-dire le nombre de termes distincts nécessaires pour représenter un ensemble de documents. Un dictionnaire de taille réduite permet de gagner à la fois de l'espace et du temps d'exécution. Mais l'usage des stemmers fait aussi baisser la précision.


==Références==
==Références==
{{reflist|2}}
{{FOLDOC}}
{{Références|colonnes=2}}

== Voir aussi ==


== Pour en savoir plus ==
=== Bibliographie ===
* Lovins, J. (1971) ''[https://web.archive.org/web/20070326162409/http://www.eric.ed.gov/sitemap/html_0900000b800c571a.html Error Evaluation for Stemming Algorithms as Clustering Algorithms]'', JASIS, 22: 28–40
<div style="font-size:85%; -moz-column-count:2; column-count:2;">
* Lovins, J. (1971) ''[http://www.eric.ed.gov/sitemap/html_0900000b800c571a.html Error Evaluation for Stemming Algorithms as Clustering Algorithms]'', JASIS, 22: 28–40
* Lovins, J. B. "Development of a Stemming Algorithm." Mechanical Translation and Computational Linguistics 11, 1968, 22—31.
* Lovins, J. B. "Development of a Stemming Algorithm." Mechanical Translation and Computational Linguistics 11, 1968, 22—31.


== Liens externes ==
== Article connexe ==
* [[Lemmatisation]]

=== Liens externes ===
{{trop de liens|date=juillet 2012}}
* [http://snowball.tartarus.org Snowball] - free stemming algorithms for many languages, includes source code, including stemmers for five romance languages
* [http://snowball.tartarus.org Snowball] - free stemming algorithms for many languages, includes source code, including stemmers for five romance languages
* [http://www.locknet.ro/projects/ann-ruby-stemmer Ruby-Stemmer] - Ruby extension to Snowball API
* [http://www.locknet.ro/projects/ann-ruby-stemmer Ruby-Stemmer] - Ruby extension to Snowball API
* [http://pecl.php.net/package/stem/ PECL] - PHP extension to the Snowball API
* [http://pecl.php.net/package/stem/ PECL] - [[PHP]] extension to the Snowball API
* [http://www.oleandersolutions.com/stemming.html Oleander Porter's algorithm] - stemming library in C++ released under BSD
* [http://www.oleandersolutions.com/stemming.html Oleander Porter's algorithm] - stemming library in C++ released under BSD
* [http://www.cs.waikato.ac.nz/~eibe/stemmers/index.html Unofficial home page of the Lovins stemming algorithm] - with source code in a couple of languages
* [http://www.cs.waikato.ac.nz/~eibe/stemmers/index.html Unofficial home page of the Lovins stemming algorithm] - with source code in a couple of languages
Ligne 192 : Ligne 198 :
* [http://www.comp.lancs.ac.uk/computing/research/stemming/index.htm Official home page of the Lancaster stemming algorithm] - Lancaster University, UK
* [http://www.comp.lancs.ac.uk/computing/research/stemming/index.htm Official home page of the Lancaster stemming algorithm] - Lancaster University, UK
* [http://www.scientificpsychic.com/paice/paice.html Modifications to the Lancaster Stemming Algorithm] - Extensions to improve the handling of errors in the rules, allow interactive testing, provide more precise stems, and add some flexibility for implementing finite state automata.
* [http://www.scientificpsychic.com/paice/paice.html Modifications to the Lancaster Stemming Algorithm] - Extensions to improve the handling of errors in the rules, allow interactive testing, provide more precise stems, and add some flexibility for implementing finite state automata.
* [http://www.cmp.uea.ac.uk/Research/stemmer/ Official home page of the UEA-Lite Stemmer ] - University of East Anglia, UK
* [http://www.cmp.uea.ac.uk/Research/stemmer/ Official home page of the UEA-Lite Stemmer] - University of East Anglia, UK
* [http://www.comp.lancs.ac.uk/computing/research/stemming/general/index.htm Overview of stemming algorithms]
* [http://www.comp.lancs.ac.uk/computing/research/stemming/general/index.htm Overview of stemming algorithms]
* [http://code.google.com/p/ptstemmer/ PTStemmer] - A Java/Python/.Net stemming toolkit for the Portuguese language
* [http://code.google.com/p/ptstemmer/ PTStemmer] - A Java/Python/.Net stemming toolkit for the Portuguese language
* [http://urim.googlecode.com/svn/jsSnowball/demo.html jsSnowball] - open source JavaScript implementation of Snowball stemming algorithms for many languages
* [http://urim.googlecode.com/svn/jsSnowball/demo.html jsSnowball] - open source JavaScript implementation of Snowball stemming algorithms for many languages

{{FOLDOC}}


{{Portail|linguistique|informatique}}
{{Portail|linguistique|informatique}}
Ligne 205 : Ligne 209 :
[[Catégorie:Linguistique informatique]]
[[Catégorie:Linguistique informatique]]
[[Catégorie:Recherche d'information]]
[[Catégorie:Recherche d'information]]

[[ar:تشذيب]]
[[cs:Stemming]]
[[de:Stemming]]
[[en:Stemming]]
[[es:Stemming]]
[[eu:Erro-bilaketa]]
[[hy:Հիմնավորում]]
[[id:Stemmer]]
[[it:Stemming]]
[[ru:Стемминг]]
[[sl:Krnjenje]]
[[sv:Stemmer]]
[[uk:Стемінг]]
[[zh:词干提取]]

Dernière version du 16 avril 2024 à 16:54

En linguistique, la racinisation ou désuffixation est un procédé de transformation des flexions en leur radical ou racine. La racine d’un mot correspond à la partie du mot restante une fois que l’on a supprimé son (ses) préfixe(s) et suffixe(s), à savoir son radical. Contrairement au lemme qui correspond à un terme issu de l’usage ordinaire des locuteurs de la langue, la racine ne correspond généralement qu’à un terme résultant de ce type d’analyse. Par exemple, le mot chercher a pour radical cherch qui ne correspond pas à un terme employé en dehors d’une référence à ce radical même. Dans des cas particuliers, le radical peut coïncider avec un terme de vocabulaire ordinaire. C’est par exemple le cas de frontal qui donne la racine front.

Les techniques utilisées pour ce faire reposent généralement sur une liste d’affixes (suffixes, préfixes, infixes, circonfixes) de la langue considérée et sur un ensemble de règles de racinisation/désuffixation construites a priori qui permettent, étant donné un mot de trouver sa racine.

Un programme informatique de racinisation est appelé un racinisateur. Les algorithmes les plus connus ont été développés par Julie Beth Lovins (en) (1968)[1] et Martin Porter (en) (1980)[2]. La racinisation est un procédé fréquent dans les applications de traitement automatique du langage naturel, par exemple dans la traduction automatique, la recherche d'information (reconnaissance d'entités) et l'indexation des moteurs de recherche.

Exemples[modifier | modifier le code]

Par exemple, en anglais, la racinisation de « fishing », « fished » , « fish » et « fisher » donne « fish ». Si on ne conservait dans l'index que les mots tels quels, il serait impossible lors d'une recherche de faire référence aux documents comportant uniquement le mot « fishing » en cherchant « fisher ». Grâce à la racinisation on sait qu'ils partagent la même racine et qu'à priori ils font partie du même lexique.

À l'inverse, la racinisation est aussi source d'erreur. Par exemple en anglais, les mots « university » et « universe » ont la même racine («univers») quand bien même les documents utilisant ces deux mots peuvent avoir un rapport très ténu.

Les différents algorithmes[modifier | modifier le code]

Ces divers algorithmes de racinisation procèdent en deux étapes : un pas de désuffixation qui consiste à ôter aux mots des terminaisons prédéfinies les plus longues possibles, et un pas de recodage qui ajoute aux racines obtenues des terminaisons prédéfinies. L'algorithme de Lovins fait les deux étapes séparés, mais celui de Porter fait les deux étapes en simultané.

Il est important de noter que les racines fournies par l’algorithme de Porter ne sont pas forcément de véritables morphèmes.

Deux principales familles de racinisateurs sont présentes dans la littérature : les racinisateurs algorithmiques et ceux utilisant un dictionnaire[3].

Un racinisateur algorithmique va être souvent plus rapide et va permettre d'extraire des racines de mots inconnus (en un sens, tous les mots qu'il rencontre lui sont inconnus). Il va cependant avoir un taux d'erreur plus élevé, regroupant des mots qui ne devraient pas l'être (sur-racinisation).
L'approche par dictionnaire quant à elle ne fait pas d'erreur sur les mots connus, mais en produit sur ceux qu'elle ne liste pas. Elle est aussi plus lente, et nécessite malgré tout la suppression de suffixes avant d'aller chercher la racine correspondante dans le dictionnaire.

Algorithme de Porter[modifier | modifier le code]

L'algorithme développé par Porter se compose d'une cinquantaine de règles de racinisation/désuffixation classées en sept phases successives (traitement des pluriels et verbes à la troisième personne du singulier, traitement du passé et du progressif, ...). Les mots à analyser passent par tous les stades et, dans le cas où plusieurs règles pourraient leur être appliquées, c'est toujours celle comprenant le suffixe le plus long qui est choisie. La racinisation/désuffixation est accompagnée, dans la même étape, de règles de recodage. Ainsi, par exemple, "troubling" deviendra "troubl" par enlèvement du suffixe marqueur du progressif -ing et sera ensuite transformé en "trouble" par application de la règle "bl" devient "ble". Cet algorithme comprend aussi cinq règles de contexte, qui indiquent les conditions dans lesquelles un suffixe devra être supprimé. La terminaison en -ing, par exemple, ne sera enlevée que si le radical comporte au moins une voyelle. De cette manière, "troubling" deviendra "troubl", nous l'avons vu, alors que "sing" restera "sing".

Détail de l'algorithme de Porter[4][modifier | modifier le code]

Soit représentant une voyelle ('y' est considéré comme une voyelle s'il est précédé par une consonne), représentant une consonne ; et soit représentant une suite de voyelles, représentant une suite de consonnes, alors, un mot en anglais peut être de l'une des 4 formes suivantes :

ce qui peut se représenter par ou , où est appelée la mesure d'un mot. Les valeurs différents présent les mots différents :

  •  : tree, by
  •  : trouble, oats, trees, ivy
  •  : troubles, private, oaten, orrery

Les règles de désuffixation/racinisation sont exprimées sous la forme ce qui signifie que si un mot se termine par et que le préfixe satisfait la condition alors le suffixe est remplacé par

  •  : le préfixe se termine par la lettre
  •  : le préfixe contient une voyelle
  •  : le préfixe se termine par une consonne doublée
  •  : le préfixe se termine par où le second n'est ni , ni , ni .

Il est possible d'utiliser des opérateurs booléens : et, ou, non

Racines obtenues par le raciniseur de Porter[5]

Étape 1

a

  • SSESSS
  • IESI
  • SSSS
  • S

caresses → caress
ponies → poni
caress → caress
cats → cat

b

  • (m>0) EEDEE
  • (*v*) ED →
  • (*v*) ING

feed → feed, agreed → agree
plastered → plaster, bled → bled
motoring → motor, sing → sing

c

  • (*v*) Y → I

happy → happi, sky → sky

Étape 2

  • (m>0) ATIONALATE
  • (m>0) TIONALTION
  • (m>0) ENCIENCE
  • (m>0) ANCIANCE

relational → relate
conditional → condition, rational → rational
valenci → valence
hesitansi → hesitance

Étape 3

  • (m>0) ICATEIC
  • (m>0) ATIVE
  • (m>0) ALIZEAL
  • (m>0) ICITIIC

triplicate → triplic
formative → form
formalize → formal
electriciti → electric

Étape 4

  • (m>1) AL
  • (m>1) ANCE
  • (m>1) ENCE
  • (m>1) ER

revival → reviv
allowance → allow
inference → infer
airliner → airlin

Étape 5

  • (m>1) E
  • (m=1 and not *o) E
  • (m>1 and *d and *L) → lettre non doublée

probate → probat, rate → rate
cease → ceas
controll → control, roll → roll

Tester cet algorithme avec 2 mots: Generalizations et Oscillators

Generalizations
étape 1: Generalization
étape 2: Generalize
étape 3: General
étape 4: Gener
Oscillators
étape 1: Oscillator
étape 2: Oscillate
étape 4: Oscill
étape 5: Oscil

L'algorithme de Porter est distribué librement et a été implanté dans de nombreux langages. En 2000 Martin Porter fournit sa propre implémentation[6] de son algorithme dans plusieurs langages car les autres contenant de légères failles. L'algorithme de Porter est efficace pour l'anglais mais pas très adapté au français. Un autre algorithme est donc ensuite développé pour le français.

Carry, un algorithme de racinisation pour le français[modifier | modifier le code]

Tout comme celui de Porter, l'algorithme de Carry se déroule en diverse étapes par lesquelles les mots à traiter passent successivement. Selon les règles, quand l'analyseur reconnaît un suffixe de la liste, soit il le supprime, soit il le transforme. C'est ici aussi le suffixe le plus long qui détermine la règle à appliquer[7].

Les règles de Carry ont été proposées pour l'étude de la morphologie de français, et ils sont téléchargeables gratuitement sur le site du projet GALILEI[8] (Generic Analyser and Listener for Indexed and Linguistics Entities of Information).

Algorithme de Paice/Husk[9][modifier | modifier le code]

L'algorithme de Paice/Husk appartient à la famille des stemmers algorithmiques. Il se base sur un ensemble de règles pour extraire les racines, et qui plus est stocke ces règles en dehors du code. Ainsi, il est possible de traiter de la même façon une nouvelle langue à partir d'un autre ensemble de règles sans réécrire le code, moyennant quelques ajustements (pour chaque langue, la liste des voyelles acceptées et les règles de validité des racines doivent être fournies). Ainsi l'algorithme est plus facilement portable à la gestion d'une nouvelle langue.

Cet algorithme a été développé par Chris Paice à l’Université Lancaster dans les années 1980. Il a ensuite été codé en Pascal, C, PERL et Java.

L'implémentation de l'algorithme de Paice/Husk est composée d'un ensemble de fonctions qui vont utiliser les règles d'extraction de racines applicables au mot fourni en entrée et vérifier l'acceptabilité de la racine proposée.

Racinisation vs. lemmatisation[modifier | modifier le code]

Racinisation et lemmatisation sont deux notions très proches, mais il y a des différences fondamentales:

  1. Les méthodes utilisées pour la lemmatisation et la désuffixation ne sont pas les mêmes
  2. La lemmatisation a pour objectif de retrouver le lemme d'un mot, par exemple l'infinitif pour les verbes. La racinisation consiste à supprimer la fin des mots, ce qui peut résulter en un mot qui n'existe pas dans la langue. Par exemple, le résultat de la désuffixation pour le mot "dividing" en anglais est "divid", qui n'existe pas en anglais.
Racinisation (stemming)
obtention d'une forme tronquée du mot, commune à toutes les variantes morphologiques
  • Suppression des flexions
  • Suppression des suffixes
Ex : cheval, chevaux, chevalier, chevalerie, chevaucher⇒« cheva » (mais pas « cavalier »)
But: faire augmenter le rappel en RI
Risque: faire baisser la précision
  • La racinisation conduit à des formes qui ne sont pas des mots. C'est donc un traitement final, qui n'autorise rien de plus fin derrière.
  • La racinisation agrège aussi des formes très différentes
marmaille, marmitemarm
Lemmatisation
obtention de la forme canonique (le lemme) à partir du mot
  • Pour un verbe: sa forme à l'infinitif
  • Pour un nom, adjectif, article, ... : sa forme au masculin singulier
  • La lemmatisation n'agrège que les variantes flexionnelles
(chevalchevaux) ≠ chevaleriechevauche

Application[modifier | modifier le code]

Les moteurs de recherche utilisent des stemmers pour améliorer la recherche d'information. Les mots-clés d'une requête ou d'un document sont représentés par leurs racines plutôt que par les mots d'origine. Plusieurs variantes d'un terme peuvent ainsi être groupées dans une seule forme représentative, ce qui réduit la taille du dictionnaire, c'est-à-dire le nombre de termes distincts nécessaires pour représenter un ensemble de documents. Un dictionnaire de taille réduite permet de gagner à la fois de l'espace et du temps d'exécution. Mais l'usage des stemmers fait aussi baisser la précision.

Références[modifier | modifier le code]

(en) Cet article contient des extraits de la Free On-line Dictionary of Computing qui autorise l'utilisation de son contenu sous licence GFDL.

  1. Julie Beth Lovins (1968). Development of a stemming algorithm. Mechanical Translation and Computational Linguistics 11:22–31.
  2. site official d'algorithme de Porter: http://tartarus.org/~martin/PorterStemmer/
  3. Racinisateur de Paice/Husk: http://alx2002.free.fr/utilitarism/stemmer/stemmer_fr.html
  4. http://www-igm.univ-mlv.fr/~lecroq/cours/porter.pdf
  5. http://www.limsi.fr/~xtannier/fr/Enseignement/tal_eisd/M2PRO_TAL_Morphosyntaxe.pdf
  6. « Porter Stemming Algorithm », sur tartarus.org (consulté le ).
  7. M. Paternostre, P. Francq, J. Lamoral. Carry, un algorithme de désuffixation pour le français
  8. « Plate-forme GALILEI », sur www.otlet-institute.org (consulté le )
  9. site officiel d'algorithme de Paice/Husk: http://www.comp.lancs.ac.uk/computing/research/stemming/

Voir aussi[modifier | modifier le code]

Bibliographie[modifier | modifier le code]

Article connexe[modifier | modifier le code]

Liens externes[modifier | modifier le code]