Processamento de linguagem natural - Python

Neste capítulo, aprenderemos sobre o processamento de linguagem usando Python.

Os seguintes recursos tornam o Python diferente de outras linguagens -

  • Python is interpreted - Não precisamos compilar nosso programa Python antes de executá-lo porque o interpretador processa Python em tempo de execução.

  • Interactive - Podemos interagir diretamente com o interpretador para escrever nossos programas Python.

  • Object-oriented - Python é orientado a objetos por natureza e torna esta linguagem mais fácil de escrever programas porque com a ajuda desta técnica de programação encapsula código dentro de objetos.

  • Beginner can easily learn - Python também é chamada de linguagem de iniciante porque é muito fácil de entender e suporta o desenvolvimento de uma ampla gama de aplicações.

Pré-requisitos

A versão mais recente do Python 3 lançado é Python 3.7.1 está disponível para Windows, Mac OS e a maioria dos tipos de Linux OS.

  • Para Windows, podemos acessar o link www.python.org/downloads/windows/ para baixar e instalar o Python.

  • Para o MAC OS, podemos usar o link www.python.org/downloads/mac-osx/ .

  • No caso do Linux, diferentes sabores de Linux usam gerenciadores de pacotes diferentes para a instalação de novos pacotes.

    • Por exemplo, para instalar o Python 3 no Ubuntu Linux, podemos usar o seguinte comando do terminal -

$sudo apt-get install python3-minimal

Para estudar mais sobre a programação Python, leia o tutorial básico do Python 3 - Python 3

Primeiros passos com NLTK

Estaremos usando a biblioteca Python NLTK (Natural Language Toolkit) para fazer análise de texto na língua inglesa. O kit de ferramentas de linguagem natural (NLTK) é uma coleção de bibliotecas Python projetadas especialmente para identificar e marcar partes do discurso encontradas no texto de linguagem natural como o inglês.

Instalando NLTK

Antes de começar a usar o NLTK, precisamos instalá-lo. Com a ajuda do seguinte comando, podemos instalá-lo em nosso ambiente Python -

pip install nltk

Se estivermos usando o Anaconda, então um pacote Conda para NLTK pode ser construído usando o seguinte comando -

conda install -c anaconda nltk

Baixando dados do NLTK

Depois de instalar o NLTK, outra tarefa importante é fazer o download de seus repositórios de texto predefinidos para que possam ser usados ​​facilmente. No entanto, antes disso, precisamos importar NLTK da mesma forma que importamos qualquer outro módulo Python. O comando a seguir nos ajudará a importar NLTK -

import nltk

Agora, baixe os dados NLTK com a ajuda do seguinte comando -

nltk.download()

Levará algum tempo para instalar todos os pacotes disponíveis do NLTK.

Outros Pacotes Necessários

Alguns outros pacotes Python, como gensim e patterntambém são muito necessários para análise de texto, bem como para construir aplicativos de processamento de linguagem natural usando NLTK. os pacotes podem ser instalados conforme mostrado abaixo -

gensim

gensim é uma biblioteca de modelagem semântica robusta que pode ser usada para muitos aplicativos. Podemos instalá-lo seguindo o comando -

pip install gensim

padronizar

Pode ser usado para fazer gensimpacote funcionar corretamente. O seguinte comando ajuda na instalação do padrão -

pip install pattern

Tokenização

A tokenização pode ser definida como o processo de quebrar o texto fornecido em unidades menores chamadas de tokens. Palavras, números ou sinais de pontuação podem ser tokens. Também pode ser chamado de segmentação de palavras.

Exemplo

Input - Cama e cadeira são tipos de móveis.

Temos diferentes pacotes de tokenização fornecidos pela NLTK. Podemos usar esses pacotes com base em nossos requisitos. Os pacotes e os detalhes de sua instalação são os seguintes -

pacote sent_tokenize

Este pacote pode ser usado para dividir o texto de entrada em sentenças. Podemos importá-lo usando o seguinte comando -

from nltk.tokenize import sent_tokenize

pacote word_tokenize

Este pacote pode ser usado para dividir o texto de entrada em palavras. Podemos importá-lo usando o seguinte comando -

from nltk.tokenize import word_tokenize

Pacote WordPunctTokenizer

Este pacote pode ser usado para dividir o texto de entrada em palavras e sinais de pontuação. Podemos importá-lo usando o seguinte comando -

from nltk.tokenize import WordPuncttokenizer

Stemming

Por razões gramaticais, a linguagem inclui muitas variações. Variações no sentido de que a língua, o inglês e também outras línguas, têm diferentes formas de palavra. Por exemplo, as palavras comodemocracy, democratic, e democratization. Para projetos de aprendizado de máquina, é muito importante que as máquinas entendam que essas palavras diferentes, como acima, têm a mesma forma básica. Por isso é muito útil extrair as formas básicas das palavras durante a análise do texto.

Stemming é um processo heurístico que ajuda a extrair as formas básicas das palavras cortando suas pontas.

Os diferentes pacotes de lematização fornecidos pelo módulo NLTK são os seguintes -

Pacote PorterStemmer

O algoritmo de Porter é usado por este pacote de lematização para extrair a forma básica das palavras. Com a ajuda do seguinte comando, podemos importar este pacote -

from nltk.stem.porter import PorterStemmer

Por exemplo, ‘write’ seria a saída da palavra ‘writing’ fornecido como entrada para este lematizador.

Pacote LancasterStemmer

O algoritmo de Lancaster é usado por este pacote de lematização para extrair a forma básica das palavras. Com a ajuda do seguinte comando, podemos importar este pacote -

from nltk.stem.lancaster import LancasterStemmer

Por exemplo, ‘writ’ seria a saída da palavra ‘writing’ fornecido como entrada para este lematizador.

Pacote SnowballStemmer

O algoritmo de Snowball é usado por este pacote de lematização para extrair a forma básica das palavras. Com a ajuda do seguinte comando, podemos importar este pacote -

from nltk.stem.snowball import SnowballStemmer

Por exemplo, ‘write’ seria a saída da palavra ‘writing’ fornecido como entrada para este lematizador.

Lemmatização

É outra forma de extrair a forma base das palavras, normalmente com o objetivo de remover terminações flexionais usando vocabulário e análise morfológica. Após a lematização, a forma básica de qualquer palavra é chamada de lema.

O módulo NLTK fornece o seguinte pacote para lematização -

Pacote WordNetLemmatizer

Este pacote irá extrair a forma básica da palavra dependendo se é usada como substantivo ou verbo. O seguinte comando pode ser usado para importar este pacote -

from nltk.stem import WordNetLemmatizer

Contando tags de PDV - Chunking

A identificação de classes gramaticais (POS) e frases curtas pode ser feita com o auxílio de chunking. É um dos processos importantes no processamento de linguagem natural. Como estamos cientes do processo de tokenização para a criação de tokens, a fragmentação, na verdade, é fazer a rotulação desses tokens. Em outras palavras, podemos dizer que podemos obter a estrutura da frase com a ajuda do processo de chunking.

Exemplo

No exemplo a seguir, implementaremos o chunking de frase substantiva, uma categoria de chunking que encontrará os chunks de frase nominal na frase, usando o módulo NLTK Python.

Considere as seguintes etapas para implementar chunking substantivo-frase -

Step 1: Chunk grammar definition

Nesta etapa, precisamos definir a gramática para chunking. Consistiria nas regras que devemos seguir.

Step 2: Chunk parser creation

Em seguida, precisamos criar um analisador de chunk. Ele analisaria a gramática e forneceria a saída.

Step 3: The Output

Nesta etapa, obteremos a saída em formato de árvore.

Executando o Script de PNL

Comece importando o pacote NLTK -

import nltk

Agora, precisamos definir a frase.

Aqui,

  • DT é o determinante

  • VBP é o verbo

  • JJ é o adjetivo

  • IN é a preposição

  • NN é o substantivo

sentence = [("a", "DT"),("clever","JJ"),("fox","NN"),("was","VBP"),
   ("jumping","VBP"),("over","IN"),("the","DT"),("wall","NN")]

Em seguida, a gramática deve ser fornecida na forma de expressão regular.

grammar = "NP:{<DT>?<JJ>*<NN>}"

Agora, precisamos definir um analisador para analisar a gramática.

parser_chunking = nltk.RegexpParser(grammar)

Agora, o analisador analisará a frase da seguinte maneira -

parser_chunking.parse(sentence)

Em seguida, a saída estará na variável da seguinte maneira: -

Output = parser_chunking.parse(sentence)

Agora, o código a seguir o ajudará a desenhar sua saída na forma de uma árvore.

output.draw()