• Nenhum resultado encontrado

PYTHON PARA PLN. NLTK e spacy. Roney Lira de Sales Santos Prof. Thiago A. S. Pardo

N/A
N/A
Protected

Academic year: 2021

Share "PYTHON PARA PLN. NLTK e spacy. Roney Lira de Sales Santos Prof. Thiago A. S. Pardo"

Copied!
51
0
0

Texto

(1)

P

YTHON PARA

PLN

NLTK e spaCy

Roney Lira de Sales Santos [email protected]

(2)
(3)

NLTK

 Biblioteca de ferramentas úteis para a utilização

dos princípios de PLN  Linguagem Python

 Funcionalidades para manipulação de strings

 Interfaces padrões para realizar tarefas como

etiquetar textos, frequência de palavras,

lematização e stemização de palavras, entre

vários outros.

(4)

NLTK - I

NSTALAÇÃO

 Requer pelo menos a versão 3.5 do Python

 Linux, MacOS e Windows 32-bit

 Para instalação no Windows 64-bit, seguir esse

tutorial.

Deu certo? Testar com o comando import nltk.

Após a instalação do toolkit, instalar os dados necessários para o funcionamento.

(5)

NLTK - I

NSTALAÇÃO

 Verificar quais pacotes estão desatualizados e clicar em Download.

Selecionar o identificador all e clicar em Download.

(6)

NLTK - I

NSTALAÇÃO

 A barra de progresso abaixo da janela mostra o andamento do processo.

(7)

NLTK - I

NSTALAÇÃO

A atualização demora por volta de 1 minuto e

meio. Quando estiver tudo certo, todos os pacotes

estarão com a cor verde.

(8)

NLTK - U

SO

Dentro do NLTK contém vários corpora

 Úteis para os etiquetadores, entidades nomeadas,

estruturas sintáticas e várias outras funcionalidades.

8

(9)

NLTK - U

SO

Dentro do NLTK contém vários corpora

 Úteis para os etiquetadores, entidades nomeadas,

estruturas sintáticas e várias outras funcionalidades.

(10)

NLTK - U

SO

 Nessa aula, vamos ver detalhadamente algumas funções importantes no tratamento de textos com NLTK.  Tokenização  Frequência/Contagem de palavras  Stopwords  N-gramas  Stemmer e Lemma  Etiquetadores

 Para testar as funções, utilizaremos esse corpus!

(11)

NLTK - T

OKENIZAÇÃO

Tokenizar = separar as palavras do textoTipo um split?

 Nível linguístico lexical: uma palavra, número ou pontuação agora é um token.

 Dado o texto que vai ser tokenizado, basta usar a função nltk.word_tokenize(texto):

(12)

NLTK - T

OKENIZAÇÃO

 O tokenizador do NLTK pode ter algumas variações, como por exemplo, retornar apenas os tokens sem as pontuações:

Entramos em um novo mundo chamado expressões regulares.

 E se quiséssemos os tokens sem pontuações e

numerais?

12

(13)

NLTK – F

REQUÊNCIA

/C

ONTAGEM

 Com a lista de tokens, é possível fazer a contagem de ocorrência de tokens pelo NLTK.

Uso da classe FreqDist()

A função most_common() ordena a frequência dos

tokens. Pode ser usado um argumento para informar a quantidade de tokens mais comuns.

(14)

NLTK – F

REQUÊNCIA

/C

ONTAGEM

 É importante notar que os tokens em maiúsculo e minúsculo são considerados diferentes.

 Portanto, caso o objetivo da contagem seja de palavras iguais, por exemplo, é necessário usar as funções lower() (ou upper()) para normalizar os tokens.

Um novo princípio: list comprehesion

14

(15)

NLTK - S

TOPWORDS

Stopwords são palavras que podem ser

consideradas irrelevantes para um certo resultado buscado.

 Artigos, preposições, conjunções, por exemplo...

(16)

NLTK - S

TOPWORDS

 É possível, então, fazer vários tipos de pré-processamento.

 Exemplo: Frequência dos tokens sem stopwords

(17)

NLTK – N-G

RAMAS

17

 Com a lista de tokens, é possível ter os n-gramas necessários para qualquer análise.

Por exemplo: predição da próxima palavra de uma

sentença em smartphones.

Bigramas: from nltk import bigramsTrigramas: from nltk import trigrams4-gram ou mais: from nltk import ngrams

(18)

NLTK – N-G

RAMAS

18

 Bigramas

(19)

NLTK – N-G

RAMAS

19

(20)

NLTK – N-G

RAMAS

20

(21)

NLTK – N-G

RAMAS

21

 Os n-gramas são importantes para várias análises. Um exemplo, no nosso caso, seria conseguir as entidades nomeadas do nosso trecho.

(22)

NLTK – S

TEMMER E

L

EMMATIZER

22

 STEMMING: consiste em reduzir a palavra ao seu radical.

 amig: amigo, amiga, amigão  gat: gato, gata, gatos

prop: propõem, propuseram, propondo

 LEMATIZAÇÃO: consiste em reduzir a palavra à sua forma canônica, levando em conta sua

classe gramatical.

propor: propõem, propuseram, propondo  estudar: estudando, estudioso, estudei

(23)

NLTK – S

TEMMER E

L

EMMATIZER

23

 O NLTK tem implementado vários algoritmos de para stemmer:  RSLP  Porter  ISRI  Lancaster  Snowball

(24)

NLTK – S

TEMMER E

L

EMMATIZER

24

 O NLTK tem implementado várias variantes de stemmers:

RSLP – Removedor de Sufixos da Língua Portuguesa

 Porter  ISRI

 Lancaster  Snowball

(25)

NLTK – S

TEMMER E

L

EMMATIZER

25

Infelizmente o NLTK ainda não tem um lematizador para o Português bom o bastante.

Tentativa: WordNet Lemmatizer  Funciona somente para o inglês...

(26)

NLTK – E

TIQUETADORES

26

O NLTK possui dois corpus que servem como base para o etiquetador em português: o

Floresta e o Mac Morpho.

 Para o inglês já existe um etiquetador padrão

treinado: o nltk.pos_tag().

 Os etiquetadores passam primeiramente por uma fase de treinamento com as sentenças presentes.

 Floresta: 9.266 sentenças etiquetadas

 Mac Morpho: 51.397 sentenças etiquetadas

 Como resultado, os etiquetadores retornam uma tupla (‘palavra’, ‘classe gramatical’)

 Na qual a classe gramatical depende do treinamento

(27)

NLTK – E

TIQUETADORES

: M

AC

M

ORPHO

(28)

NLTK – E

TIQUETADORES

: M

AC

M

ORPHO

28

(29)

NLTK – E

TIQUETADORES

: M

AC

M

ORPHO

29

Por ter de passar por uma fase de treinamento, tinham palavras que o etiquetador não conseguiu identificar e fazer a classificação.

 Uma solução é pré-classificar todas as palavras do texto como substantivos (N) e depois treinar o etiquetador normalmente.

(30)

NLTK – E

TIQUETADORES

: M

AC

M

ORPHO

(31)

NLTK – E

TIQUETADORES

: M

AC

M

ORPHO

(32)

NLTK – E

TIQUETADORES

: M

AC

M

ORPHO

32

 É possível, então, fazer várias manipulações com a lista de tuplas resultante:

 Análises descritivas  Análises sintáticas  Chunking

 Reconhecimento de Entidades Nomeadas

 Nosso problema antigo!!

(33)

NLTK – E

TIQUETADORES

: M

AC

M

ORPHO

(34)

NLTK – T

RABALHANDO COM

C

ORPUS

34

Faça uma análise descritiva completa do nosso corpus de teste, utilizando as funções do NLTK.  Exemplos de atributos:

 Quantidade de tokens

 Quantidade de sentenças / média do tamanho das

sentenças

 Quantidade de substantivos, adjetivos, advérbios...  Quantidade de palavras com o mesmo radical

 Quantidade de símbolos de pontuação  Palavras mais frequentes do corpus  ...

(35)
(36)

SPA

C

Y

 Biblioteca Python para processamento de textos  Escala industrial

 Feito para uso em produção

 Criação de aplicações que conseguem processar um

grande volume de dados

 Versão 2.1 3.0!

 O parser sintático mais rápido do mundo (!!)  Acurácia de 92.6%

 1% a mais que o melhor parser disponível

 Suporte para mais de 61 linguagens 36

(37)

SPA

C

Y

- I

NSTALAÇÃO

 Guia de instalação completo aqui

 Compatível com versões 2.7/3.6+ do Python

 Uma das poucas bibliotecas que ainda possuem

suporte para o Python 2.x

 Linux, MacOS e Windows 64-bit  Instalação por linha de comando

pip install –U spacy

 Necessário instalar dados adicionais  Parecido com o que fizemos no NLTK

(38)

SPA

C

Y

- I

NSTALAÇÃO

 Dados adicionais para lematização

pip install –U spacy-lookups-data

 Modelo de linguagem

 Para o spaCy conseguir realizar suas funções, é

necessário que um modelo de linguagem esteja presente.

 Modelos pré-treinados

 Entidades Nomeadas  Classes gramaticais

 Dependências sintáticas

 Parecido com os córpus que utilizamos como

(39)

SPA

C

Y

- I

NSTALAÇÃO

 Modelos de linguagem para o português

python –m spacy download pt_core_news_sm python –m spacy download pt_core_news_md python –m spacy download pt_core_news_lg

 Praticamente todas as atribuições que os modelos mais robustos possuem (exemplo: inglês)

 Baseado no corpus WikiNER

 Vetores dos tokens e classes gramaticais  Análise de dependência

 Entidades nomeadas

 Mais detalhes sobre os modelos aqui.

(40)

SPA

C

Y

- I

NSTALAÇÃO

 Além do modelo de linguagem padrão do spaCy, é possível criar o seu próprio modelo!

 Ou usar um pronto, já treinado para algum fim

 Um ótimo guia pode ser encontrado aqui!

 Spoiler: inserção de alguns exemplos para

treinamento em um código próprio do spaCy

(41)

SPA

C

Y

- U

SO

 Para o uso das funções poderosas do spaCy, é preciso entender dois objetos importantes:

O objeto DocO objeto Token

Um Doc é uma sequência de objetos Token

 Ou seja, um documento com vários tokens

manipuláveis

Métodos da classe Doc levam em consideração a

manipulação desses tokens

 Exemplo: quantidade de tokens no documento

Um Token é o token que aprendemos na aula de NLTK: pode ser uma palavra, uma pontuação, numeral, espaços...

(42)

SPA

C

Y

- U

SO

 Assim, antes de qualquer utilização das funções do spaCy, deve-se criar a variável que vai guardar o modelo de linguagem

 IMPORTANTE: no NLTK era utilizado sempre a lista de

tokens, mas aqui no spaCy, o parâmetro é sempre a string do texto!

 Portanto, a partir de agora, todas as funções

(43)

 Bom, aqui vamos começar a usar as funções mais interessantes do spaCy:  Tokenização  Stemming e Lematizador  Etiquetador  Entidades Nomeadas

 Utilizaremos o mesmo córpus das aulas anteriores

 Tá aqui, para quem ainda não tem.

 Claro, o spaCy contém várias outras funções! 43

(44)

 Para recuperar os tokens, basta usar o conceito de list comprehension

44

(45)

 Para recuperar os tokens, basta usar o conceito de list comprehension

 Dá pra perceber algumas coisas aqui, concordam?

 Uma delas: não parece ser uma lista de strings...

45

(46)

 Para recuperar os tokens, basta usar o conceito de list comprehension

Agora sim! Só usar o atributo orth_ 46

(47)

 Retorno com tipos de tokens diferentes:  Somente as palavras: is_alpha

Somente os números: is_digitSomente pontuações: is_punct

47

(48)

 Retorno com tipos de tokens diferentes:

 Pontuação esquerda ou direita

 Parênteses e colchetes  Espaços  Símbolos financeiros  Números (10.9, 10, “dez”)  E-mail  Stopwords...

 Lista completa com os atributos aqui.

48

(49)

 Olha que interessante (e surpreendente): o spaCy não tem um stemmer padrão...

 Porém, o spaCy tem um lematizador!

 O inverso do NLTK, pelo menos para o Português!

Lematizar é simples: só utilizar o atributo lemma_:

49

(50)

 É importante observar que foi utilizado um outro atributo que ainda não falamos: o pos_

Esse atributo é referente ao Part-Of-Speech, ou simplesmente, a classe gramatical do token.

 Vale ressaltar que a lematização geralmente remete à forma canônica da palavra para os verbos, então é necessária essa condição.

 Ok, mas como obtida essa classe gramatical? É simples assim, só com um atributo?

50

(51)

Sim. Basta chamar o atributo pos_ no token e assim é retornada a classe gramatical referente!

 O conjunto de etiquetas para o português está aqui!

51

Referências

Documentos relacionados

Após a capitulação jurídica e validação por parte do Delegado de Polícia responsável pelo atendimento virtual, o sistema pode viabilizar a inserção de informações

Este trabalho tem como objetivo geral avaliar a quantidade de água pluvial que pode ser aproveitada após infiltrar em um pavimento permeável de concreto

Podem treinar tropas (fornecidas pelo cliente) ou levá-las para combate. Geralmente, organizam-se de forma ad-hoc, que respondem a solicitações de Estados; 2)

Nos tempos atuais, ao nos referirmos à profissão docente, ao ser professor, o que pensamos Uma profissão indesejada por muitos, social e economicamente desvalorizada Podemos dizer que

O objetivo do curso foi oportunizar aos participantes, um contato direto com as plantas nativas do Cerrado para identificação de espécies com potencial

 Interessante é que as strings são imutáveis, ou seja, da forma que elas são criadas, não é possível alterá-las diretamente. Se é necessário essa alteração, pode ser

 Spoiler: inserção de alguns exemplos para treinamento em um código próprio do

Embora esse já não seja mais um critério usado de maneira unânime nas Assembleias de Deus no Brasil, e isso até em função da grandeza da denominação, ainda