Gitter é espaço de bate -papo para desenvolvedores.
nlpnet --- Processamento de linguagem natural com redes neurais nlpnet é uma biblioteca Python para tarefas de processamento de linguagem natural com base em redes neurais. Atualmente, ele realiza marcação de parte da fala, rotulagem semântica e análise de dependência. A maior parte da arquitetura é independente da linguagem, mas algumas funções foram especialmente adaptadas para trabalhar com português. Este sistema foi inspirado por Senna.
IMPORTANTE: Para usar os modelos treinados para a NLP portuguesa, você precisará baixar os dados de http://nilc.icmc.usp.br/nlpnet/models.html.
nlpnet requer NLTK e Numpy. Além disso, ele precisa baixar alguns dados do NLTK. Depois de instalá -lo, ligue
>>> nltk.download()
Vá para a guia Modelos e selecione o tokenizer punkt. É usado para dividir o texto em frases.
O Cython é usado para gerar extensões C e executar mais rápido. Você provavelmente não precisará, já que o arquivo .c gerado já está fornecido com o NLPNET, mas precisará de um compilador C. Nos sistemas Linux e Mac, isso não deve ser um problema, mas pode estar no Windows, porque o SetupTools requer o compilador Microsoft C por padrão. Se você ainda não o possui, geralmente é mais fácil instalar o Mingw e seguir as instruções aqui.
nlpnet pode ser usado como uma biblioteca Python ou por seus scripts independentes. Ambos os usos são explicados abaixo.
Você pode usar nlpnet como uma biblioteca no código Python da seguinte forma:
> >> import nlpnet
> >> tagger = nlpnet . POSTagger ( '/path/to/pos-model/' , language = 'pt' )
> >> tagger . tag ( 'O rato roeu a roupa do rei de Roma.' )
[[( u'O' , u'ART' ), ( u'rato' , u'N' ), ( u'roeu' , u'V' ), ( u'a' , u'ART' ), ( u'roupa' , u'N' ), ( u'do' , u'PREP+ART' ), ( u'rei' , u'N' ), ( u'de' , u'PREP' ), ( u'Roma' , u'NPROP' ), ( u'.' , 'PU' )]] No exemplo acima, o construtor POSTagger recebe como o primeiro argumento do diretório em que seu modelo treinado está localizado. O segundo argumento é o código de idioma de duas letra (atualmente, Onle pt e en são suportados). Isso só tem impacto na tokenização.
Chamar uma ferramenta de anotação é bem direto. Os fornecidos são POSTagger , SRLTagger e DependencyParser , todos eles tendo uma tag de método que recebe strings com texto a ser marcado (em DependencyParser , há um alias para a parse do método, que soa mais adequada). O tagger divide o texto em frases e depois tokeniza cada uma (daí o retorno da postagem é uma lista de listas).
A saída do SRLTagger é um pouco mais complicada:
>>> tagger = nlpnet.SRLTagger() >>> tagger.tag( u ' O rato roeu a roupa do rei de Roma. ' ) [<nlpnet.taggers.SRLAnnotatedSentence at 0x84020f0>]
Em vez de uma lista de tuplas, as frases são representadas por instâncias de SRLAnnotatedSentence . Esta aula serve basicamente como titular de dados e possui dois atributos:
>>> sent = tagger.tag( u ' O rato roeu a roupa do rei de Roma. ' )[ 0 ] >>> sent.tokens [u'O', u'rato', u'roeu', u'a', u'roupa', u'do', u'rei', u'de', u'Roma', u'.'] >>> sent.arg_structures [(u'roeu', {u'A0': [u'O', u'rato'], u'A1': [u'a', u'roupa', u'do', u'rei', u'de', u'Roma'], u'V': [u'roeu']})]
O arg_structures é uma lista que contém todas as estruturas de predicado-argumento na frase. O único neste exemplo é para o verbo roeu. É representado por uma tupla com o predicado e um dicionário de mapeamento de rótulos semânticos dos tokens que constituem o argumento.
Observe que o verbo aparece como o primeiro membro da tupla e também como o conteúdo do rótulo 'v' (que significa verbo). Isso ocorre porque alguns predicados são multi -palavras. Nesses casos, a palavra predicada "principal" (geralmente o próprio verbo) aparece em arg_structures[0] , e todas as palavras aparecem sob a chave 'v'.
Aqui está um exemplo com o dependencyParser:
>>> parser = nlpnet.DependencyParser( ' dependency ' , language = ' en ' ) >>> parsed_text = parser.parse( ' The book is on the table. ' ) >>> parsed_text [<nlpnet.taggers.ParsedSentence at 0x10e067f0>] >>> sent = parsed_text[ 0 ] >>> print (sent.to_conll()) 1 The _ DT DT _ 2 NMOD 2 book _ NN NN _ 3 SBJ 3 is _ VBZ VBZ _ 0 ROOT 4 on _ IN IN _ 3 LOC-PRD 5 the _ DT DT _ 6 NMOD 6 table _ NN NN _ 4 PMOD 7 . _ . . _ 3 P
O método to_conll() de objetos de Parsedsentence os imprime na notação de Conll. Os tokens, rótulos e índices de cabeça são acessíveis através de variáveis de membros:
>>> sent.tokens [u'The', u'book', u'is', u'on', u'the', u'table', u'.'] >>> sent.heads array([ 1, 2, -1, 2, 5, 3, 2]) >>> sent.labels [u'NMOD', u'SBJ', u'ROOT', u'LOC-PRD', u'NMOD', u'PMOD', u'P']
A variável de membro heads é uma matriz Numpy. A i-ésima posição na matriz contém o índice da cabeça do token i-és, exceto o token da raiz, que tem uma cabeça de -1. Observe que esses índices são baseados em 0, enquanto os mostrados na função to_conll() são baseados em 1.
nlpnet também fornece scripts para marcar texto, treinar novos modelos e testá -los. Eles são copiados para o subdiretório de scripts da instalação do Python, que pode ser incluída na variável do caminho do sistema. Você pode chamá -los na linha de comando e fornecer alguma entrada de texto.
$ nlpnet-tag.py pos --data /path/to/nlpnet-data/ --lang pt
O rato roeu a roupa do rei de Roma.
O_ART rato_N roeu_V a_ART roupa_N do_PREP+ART rei_N de_PREP Roma_NPROP ._PU Se --data não for fornecido, o script procurará os modelos treinados no diretório atual. --lang Padrões para en . Se você já tiver texto tokenizado, poderá usar a opção -t ; Ele assume que os tokens são separados por espaços em branco.
Com rotulagem semântica de papel:
$ nlpnet-tag.py srl /path/to/nlpnet-data/
O rato roeu a roupa do rei de Roma.
O rato roeu a roupa do rei de Roma .
roeu
A1: a roupa do rei de Roma
A0: O rato
V: roeuA primeira linha foi digitada pelo usuário e a segunda é o resultado da tokenização.
E análise de dependência:
$ nlpnet-tag.py dependency --data dependency --lang en
The book is on the table.
1 The _ DT DT _ 2 NMOD
2 book _ NN NN _ 3 SBJ
3 is _ VBZ VBZ _ 0 ROOT
4 on _ IN IN _ 3 LOC-PRD
5 the _ DT DT _ 6 NMOD
6 table _ NN NN _ 4 PMOD
7 . _ . . _ 3 PPara saber mais sobre treinamento e teste de novos modelos e outras funcionalidades, consulte a documentação em http://nilc.icmc.usp.br/nlpnet
As seguintes referências descrevem o design do NLPNET, bem como os experimentos realizados. Algumas melhorias no código foram implementadas desde a publicação.