LemminflectUn módulo de Python para la lematización e inflexión inglesa.
LemMinflect utiliza un enfoque de diccionario para limitar las palabras en inglés y infectarlas en formas especificadas por una etiqueta universal suministrada por el usuario o la etiqueta Penn Treebank. La biblioteca funciona con palabras fuera del vocabulario (OOV) aplicando técnicas de red neuronal para clasificar los formularios de palabras y elegir las reglas de transformación apropiadas.
El sistema actúa como un módulo independiente o como una extensión del sistema Spacy NLP.
Las reglas de diccionario y morfología se derivan del léxico especializado de los NIH que contiene una amplia información establecida sobre formularios de palabras en inglés.
Un sistema de inflexión solo más simplista está disponible como Pyinflect. Lemminflect fue creado para abordar parte de la deficiencia de ese proyecto y agregar características, como ...
Para la última documentación, consulte ReadThedocs .
La precisión de LemMinflect y varias otras utilidades populares de PNL se probó utilizando la base de datos de inflexión generada automáticamente (AGID) como línea de base. Este no es un conjunto de datos estándar de "oro", pero tiene una extensa lista de lemas y sus inflexiones correspondientes y parece ser generaly un conjunto "bueno" para las pruebas. Cada inflexión fue limitado por el software de prueba y luego se comparó con el valor original en el corpus. La prueba incluyó 119,194 palabras infladas diferentes.
| 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 velocidad está en microesegundos por lema y se realizó en una CPU i9-7940X. Nota, dado que Stanza está haciendo llamadas al software Java Corenlp, los casos de prueba de 120k se agruparon en una sola llamada. Para Spacy, todos los componentes de la tubería fueron deshabilitados, excepto el lemmatizer. El tiempo alto por lema es probablemente un reflejo de la sobrecarga general de la arquitectura de la tubería.
El único requisito externo para ejecutar Lemminflect es numpy , que se usa para las matemáticas de matriz que impulsa las redes neuronales. Estas redes son relativamente pequeñas y no requieren una potencia de CPU significativa para ejecutar.
Para instalar hacer ..
pip3 install lemminflect
El proyecto fue construido y probado en Python 3 y Ubuntu, pero debe ejecutarse en cualquier sistema Linux, Windows, Mac, etc. No se ha probado bajo Python 2, pero puede funcionar en ese entorno con cambios mínimos o nulas.
La base de código también incluye funciones de biblioteca y scripts para crear los diversos archivos de datos y redes neuronales. Esto incluye cosas como ...
Ninguno de estos es necesario para la operación en tiempo de ejecución. Sin embargo, si desea modificar el sistema, consulte la documentación para obtener más información.
Para lemmatizar una palabra, use el método getLemma() . Esto toma una palabra y una etiqueta de dependencias universales y devuelve los lemas como una lista de posibles ortografía. El sistema de diccionario se usa primero, y si no se encuentra lema, se emplea el sistema de reglas.
> from lemminflect import getLemma
getLemma('watches', upos='VERB')
('watch',)
Para infectar las palabras, use el método getInflection . Esto toma un lema y una etiqueta Penn Treebank y devuelve una tupla de las inflexiones específicas asociadas con esa etiqueta. Similar a arriba, el diccionario se usa primero y luego se aplican reglas de inflexión si es necesario.
> from lemminflect import getInflection
> getInflection('watch', tag='VBD')
('watched',)
> getInflection('xxwatch', tag='VBD')
('xxwatched',)
La biblioteca proporciona funciones de nivel inferior para acceder al diccionario y las reglas OOV directamente. Para una descripción detallada, consulte Lemmatizer o inflexiones.
Para usar como extensión, necesita Spacy Versión 2.0 o posterior. Las versiones 1.9 y anteriores no admiten los métodos de extensión utilizados aquí.
Para configurar la extensión, primero importe lemminflect . Esto creará nuevos métodos lemma e inflect para cada Token espacial. Los métodos funcionan de manera similar a los métodos descritos anteriormente, con la excepción de que se devuelve una cadena, que contiene la ortografía más común, en lugar de una tupla.
> 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 encuentra un error, informe en la lista de problemas de GitHub. Sin embargo, tenga en cuenta que cuando llega a devolver la inflexión correcta, hay varios tipos diferentes de problemas que pueden surgir. Algunos de estos no son fácilmente reparables. Los problemas con las formas infladas incluyen ...
Un problema común es que algunas formas del verbo "ser" no son completamente especificadas por la etiqueta TreekBank. Por ejemplo, BE/VBD se infla a "fue" o "were" y ser/vbp inflige a "am" o "son". Para desambiguar estas formas, otras palabras en la oración deben ser inspeccionadas. En este momento, LemMinflect no incluye esta funcionalidad.