LemMinflectUm módulo Python para lematização e inflexão inglesa.
O LemMinflect usa uma abordagem de dicionário para lematizar as palavras em inglês e inflexão em formulários especificados por um usuário dependências universais fornecidas pelo usuário ou pela tag Penn Treebank. A biblioteca trabalha com palavras fora do vocabulário (OOV) aplicando técnicas de rede neural para classificar os formulários de palavras e escolher as regras de morphing apropriadas.
O sistema atua como um módulo independente ou como uma extensão do sistema SPACY NLP.
As regras de dicionário e morfologia são derivadas do léxico especializado do NIH, que contém uma extensa informação definida sobre os formulários de palavras em inglês.
Um sistema de inflexão mais simplista está disponível apenas como pyinfLECT. O LemMinflect foi criado para abordar algumas das falhas desse projeto e adicionar recursos, como ...
Para a última documentação, consulte ReadThedocs .
A precisão do LEMMINFLECT e vários outros utilitários populares de PNL foi testada usando o banco de dados de inflexão gerado automaticamente (AGID) como uma linha de base. Este não é um conjunto de dados padrão "ouro", mas possui uma extensa lista de lemas e suas inflexões correspondentes e parece ser uma "boa" definida para testes. Cada inflexão foi lemmatizada pelo software de teste e depois comparada ao valor original no corpus. O teste incluiu 119.194 palavras flexionadas 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 |
|-----------------------------------------------------------------------------|
A velocidade está em micro-segundos por lema e foi conduzida em uma CPU I9-7940X. Observe que, como a Stanza está fazendo chamadas para o software Java CorenLP, todos os casos de teste de 120K foram agrupados em uma única chamada. Para o Spacy, todos os componentes do pipeline foram desativados, exceto o lemmatizer. O tempo alto por lema é provavelmente um reflexo da sobrecarga geral da arquitetura de oleodutos.
O único requisito externo para executar o LemMinflect é numpy , que é usado para a matemática da matriz que impulsiona as redes neurais. Essas redes são relativamente pequenas e não requerem energia significativa da CPU para ser executada.
Para instalar do fazer ..
pip3 install lemminflect
O projeto foi construído e testado no Python 3 e no Ubuntu, mas deve ser executado em qualquer Linux, Windows, Mac, etc. Sistema. Não é testado no Python 2, mas pode funcionar nesse ambiente com alterações mínimas ou nenhuma.
A base de código também inclui funções e scripts da biblioteca para criar os vários arquivos de dados e redes neurais. Isso inclui coisas como ...
Nada disso é necessário para a operação em tempo de execução. No entanto, se você quiser modificar o sistema, consulte a documentação para obter mais informações.
Para lematizar uma palavra, use o método getLemma() . Isso leva uma palavra e uma marcelagem de dependências universais e retorna os lemas como uma lista de manchas possíveis. O sistema de dicionário é usado primeiro e, se nenhum lema for encontrado, o sistema de regras será empregado.
> from lemminflect import getLemma
getLemma('watches', upos='VERB')
('watch',)
Para inflar palavras, use o método getInflection . Isso pega um lema e uma etiqueta Penn Treebank e retorna uma tupla da (s) inflexão (s) específica (s) associada a essa tag. Similário acima, o dicionário é usado primeiro e depois as regras de inflexão são aplicadas se necessário ..
> from lemminflect import getInflection
> getInflection('watch', tag='VBD')
('watched',)
> getInflection('xxwatch', tag='VBD')
('xxwatched',)
A biblioteca fornece funções de nível inferior para acessar diretamente o dicionário e as regras OOV. Para uma descrição detalhada, consulte Lemmatizer ou inflexões.
Para usar como extensão, você precisa de Spacy versão 2.0 ou posterior. As versões 1.9 e anteriores não suportam os métodos de extensão usados aqui.
Para configurar a extensão, primeiro importe lemminflect . Isso criará novos métodos lemma e inflect para cada Token de spacy. Os métodos operam de maneira semelhante aos métodos descritos acima, com a exceção de que uma string é retornada, contendo a ortografia mais comum, em vez de uma 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
Se você encontrar um bug, informe -o na lista de problemas do GitHub. No entanto, esteja ciente de que, quando se trata de retornar a inflexão correta, existem vários tipos diferentes de problemas que podem surgir. Alguns deles não são facilmente corrigíveis. Os problemas com os formulários flexionados incluem ...
Uma questão comum é que algumas formas do verbo "be" não são completamente especificadas pela tag Treekbank. Por exemplo, os inflexões BE/VBD para "foram" ou "foram" e os inflexões de BE/VBP para "AM" ou "são". Para desambiguar essas formas, outras palavras na frase precisam ser inspecionadas. No momento, o LemMinflect não inclui essa funcionalidade.