LemminflectUn module Python pour la lemmatisation et l'inflexion en anglais.
Lemminflect utilise une approche de dictionnaire pour lemmatiser les mots anglais et les infléger en formes spécifiées par une dépendance universelle fournie par l'utilisateur ou une balise Penn Treebank. La bibliothèque travaille avec des mots hors vocabule (OOV) en appliquant des techniques de réseau de neurones pour classer les formulaires de mots et choisir les règles de morphing appropriées.
Le système agit comme un module autonome ou comme une extension du système NLP Spacy.
Les règles du dictionnaire et de la morphologie sont dérivées du lexique spécialisé du NIH qui contient une longue information définie sur les formulaires de mots anglais.
Un système d'inflexion plus simpliste unique est disponible sous forme de pyinflect. Lemminflect a été créé pour aborder une partie de la lacune de ce projet et ajouter des fonctionnalités, telles que ...
Pour la dernière documentation, voir ReadTheDocs .
La précision de Lemminflect et de plusieurs autres utilitaires PNL populaires a été testée à l'aide de la base de données d'inflexion générée automatiquement (AGID) comme référence. Il ne s'agit pas d'un ensemble de données standard "Gold", mais il a une liste étendue de lemmes et de leurs inflexions correspondantes et semble être général un "bon" ensemble pour les tests. Chaque inflexion a été lemmatisée par le logiciel de test, puis comparée à la valeur d'origine dans le corpus. Le test comprenait 119 194 mots infléchis différents.
| Package | Verb | Noun | ADJ/ADV | Overall | Speed |
|-----------------------------------------------------------------------------|
| LemmInflect 0.2.3 | 96.1% | 95.4% | 93.9% | 95.6% | 42.0 uS |
| Stanza 1.5.0 + CoreNLP 4.5.4 | 94.0% | 96.4% | 93.1% | 95.5% | 30.0 us |
| spaCy 3.5.0 | 79.5% | 88.9% | 60.5% | 84.7% | 393.0 uS |
| NLTK 3.8.1 | 53.3% | 52.2% | 53.3% | 52.6% | 12.0 uS |
|-----------------------------------------------------------------------------|
La vitesse est en micro-secondes par lemme et a été réalisée sur un CPU i9-7940X. Remarque, puisque Stanza passe des appels au logiciel Java Corenlp, tous les cas de test de 120k ont été regroupés en un seul appel. Pour Spacy, tous les composants du pipeline ont été désactivés à l'exception du lemmatizer. Le temps élevé par lemme est probablement le reflet des frais généraux généraux de l'architecture du pipeline.
La seule exigence externe pour exécuter lemminflect est numpy qui est utilisée pour les mathématiques matricielles qui entraîne les filets neuronaux. Ces filets sont relativement petits et ne nécessitent pas une puissance de processeur significative pour fonctionner.
Pour installer DO ..
pip3 install lemminflect
Le projet a été construit et testé sous Python 3 et Ubuntu, mais devrait fonctionner sur n'importe quel système Linux, Windows, Mac, etc. Il n'est pas testé sous Python 2 mais peut fonctionner dans cet environnement avec un minimum ou pas de changements.
La base de code comprend également des fonctions de bibliothèque et des scripts pour créer les différents fichiers de données et les réseaux de neurones. Cela inclut des choses telles que ...
Aucun de ces éléments n'est requis pour le fonctionnement du temps d'exécution. Cependant, si vous souhaitez modifier le système, consultez la documentation pour plus d'informations.
Pour lemmatiser un mot, utilisez la méthode getLemma() . Cela prend un mot et une étiquette de dépendances universelles et renvoie les lemmes comme une liste d'orthographes possibles. Le système de dictionnaire est utilisé en premier, et si aucun lemme n'est trouvé, le système de règles est utilisé.
> from lemminflect import getLemma
getLemma('watches', upos='VERB')
('watch',)
Pour infliger des mots, utilisez la méthode getInflection . Cela prend un lemme et une étiquette de Penn Treebank et renvoie un tuple de l'inflexion spécifique associée à cette balise. De même ci-dessus, le dictionnaire est utilisé d'abord, puis des règles d'inflexion sont appliquées si nécessaire.
> from lemminflect import getInflection
> getInflection('watch', tag='VBD')
('watched',)
> getInflection('xxwatch', tag='VBD')
('xxwatched',)
La bibliothèque fournit des fonctions de niveau inférieur pour accéder directement au dictionnaire et aux règles OOV. Pour une description détaillée, voir lemmatizer ou les inflexions.
Pour utiliser comme extension, vous avez besoin de Spacy version 2.0 ou ultérieure. Les versions 1.9 et plus tôt ne prennent pas en charge les méthodes d'extension utilisées ici.
Pour configurer l'extension, Importer d'abord lemminflect . Cela créera de nouvelles méthodes lemma et inflect pour chaque Token de spacy. Les méthodes fonctionnent de manière similaire aux méthodes décrites ci-dessus, à l'exception qu'une chaîne est renvoyée, contenant l'orthographe la plus courante, plutôt qu'un tuple.
> import spacy
> import lemminflect
> nlp = spacy.load('en_core_web_sm')
> doc = nlp('I am testing this example.')
> doc[2]._.lemma()
test
> doc[4]._.inflect('NNS')
examples
Si vous trouvez un bogue, veuillez le signaler sur la liste des problèmes GitHub. Cependant, sachez que lorsque vous revient à retourner la bonne inflexion, il existe un certain nombre de types de problèmes différents qui peuvent survenir. Certains d'entre eux ne sont pas facilement réparables. Les problèmes avec les formulaires infléchis comprennent ...
Un problème courant est que certaines formes du verbe "be" ne sont pas complètement spécifiées par la balise Treekbank. Par exemple, Be / VBD s'inflecte soit "était" ou "était" et être / vbp s'inflecte soit "AM" ou "Are". Afin de désambiguïter ces formes, d'autres mots de la phrase doivent être inspectés. Pour le moment, Lemminflect n'inclut pas cette fonctionnalité.