Marcação de PDV com NLTK e Chunking em PNL [EXEMPLOS]

⚡ Resumo Inteligente

A etiquetagem POS atribui uma classe gramatical a cada palavra em uma frase, enquanto o agrupamento (chunking) agrupa essas palavras etiquetadas em frases significativas, como sintagmas nominais, adicionando uma estrutura superficial que o NLTK constrói com expressões regulares. Python.

  • 🏷️ Marcação de PDV: Cada palavra recebe um marcador gramatical, como NN, VB ou JJ, com base em seu contexto.
  • 🌿 Fragmentação: As palavras etiquetadas são agrupadas em frases, um processo também chamado de análise sintática superficial.
  • 🔤 Fluxo de Trabalho: Primeiro, tokenize o texto, depois aplique a tag pos e, por fim, analise-o com uma gramática RegexpParser.
  • 📊 Contagem de Etiquetas: O contador e a distribuição de frequência revelam a frequência de tags e palavras para engenharia de recursos.
  • 🔗 Colocações: Bigramas e trigramas capturam pares e trios de palavras para obter características textuais mais robustas.
  • 🤖 Uso da IA: O aprendizado de máquina e os etiquetadores baseados em HMM lidam com palavras ambíguas de forma probabilística.

Etiquetagem POS com NLTK e segmentação em PNL

Marcação de PDV

Marcação de PDV A etiquetagem gramatical (ou marcação de classes gramaticais) é um processo que marca as palavras em um texto de acordo com sua classe gramatical, considerando sua definição e contexto. Ela lê o texto em um idioma e atribui um marcador específico (classe gramatical) a cada palavra. Também é chamada de etiquetagem gramatical.

Vamos aprender com um exemplo de classes gramaticais do NLTK:

Input: Everything to permit us.
Output: [('Everything', NN),('to', TO), ('permit', VB), ('us', PRP)]

Etapas envolvidas no exemplo de etiquetagem de PDV

  • Tokenizar texto (word_tokenize)
  • Aplique pos_tag à etapa acima, ou seja, nltk.pos_tag(tokenize_text)

Abaixo estão listados alguns exemplos de etiquetas NLTK POS:

Abreviação Significado
CC conjunção coordenativa
CD dígito cardinal
DT determinar
EX existencial lá
FW palavra estrangeira
IN preposição/conjunção subordinada
JJ adjetivo
JJR adjetivo, comparativo
JJS adjetivo, superlativo
LS listar mercado
MD capital
NN substantivo, singular
NNS substantivo plural
PNN nome próprio, singular
NNPS substantivo próprio, plural
PDT predeterminador
POS terminação possessiva
PRP pronome pessoal
PRP$ pronome possessivo
RB advérbio
RBR advérbio, comparativo
RBS advérbio, superlativo
RP partícula
TO marcador infinito
UH interjeição
VB verbo
GBV verbo gerúndio
DTV verbo no passado
VBN verbo particípio passado
VBP verbo, presente do indicativo, não 3ª pessoa do singular
VBZ verbo, presente do indicativo, 3ª pessoa do singular
wdt determinante wh
WP pronome-wh
WRB advérbio interrogativo

A lista de etiquetas POS do NLTK acima contém todas as etiquetas POS do NLTK. O etiquetador POS do NLTK é usado para atribuir informações gramaticais a cada palavra da frase. A instalação, importação e download de todos os pacotes do POS NLTK estão agora concluídos.

O que é Chunking na PNL?

fragmentação Em PNL (Processamento de Linguagem Natural), o Chunking é um processo que consiste em pegar pequenas informações e agrupá-las em unidades maiores. O principal uso do Chunking é a formação de grupos de "sintagmas nominais". Ele é usado para adicionar estrutura à frase, seguindo a marcação POS (Part-of-Speech tagging) combinada com expressões regulares. O grupo de palavras resultante é chamado de "chunk". Também é conhecido como análise sintática superficial.

Na análise sintática superficial, há no máximo um nível entre as raízes e as folhas, enquanto a análise sintática profunda compreende mais de um nível. A análise sintática superficial também é chamada de análise sintática leve ou fragmentação.

Regras para fragmentação

Não existem regras predefinidas, mas você pode combiná-las de acordo com a necessidade e a exigência. Por exemplo, suponha que você precise marcar um substantivo, um verbo (no passado), um adjetivo e uma conjunção coordenativa em uma frase. Você pode usar a seguinte regra:

chunk:{***?}

A tabela a seguir mostra o significado dos diversos símbolos:

Nome do símbolo Descrição
. Qualquer caractere, exceto nova linha
* Combine 0 ou mais repetições
? Combine 0 ou 1 repetições

Agora vamos escrever o código para entender melhor a regra.

from nltk import pos_tag
from nltk import RegexpParser
text ="learn php from guru99 and make study easy".split()
print("After Split:",text)
tokens_tag = pos_tag(text)
print("After Token:",tokens_tag)
patterns= """mychunk:{***?}"""
chunker = RegexpParser(patterns)
print("After Regex:",chunker)
output = chunker.parse(tokens_tag)
print("After Chunking",output)

Saída:

After Split: ['learn', 'php', 'from', 'guru99', 'and', 'make', 'study', 'easy']
After Token: [('learn', 'JJ'), ('php', 'NN'), ('from', 'IN'), ('guru99', 'NN'), ('and', 'CC'), ('make', 'VB'), ('study', 'NN'), ('easy', 'JJ')]
After Regex: chunk.RegexpParser with 1 stages:
RegexpChunkParser with 1 rules:
       '***?'>
After Chunking (S
  (mychunk learn/JJ)
  (mychunk php/NN)
  from/IN
  (mychunk guru99/NN and/CC)
  make/VB
  (mychunk study/NN easy/JJ))

A conclusão da marcação de Parte do Discurso acima Python Por exemplo, "make" é um verbo que não está incluído na regra, portanto não é marcado como mychunk.

Caso de uso de chunking

O agrupamento (chunking) é usado para detecção de entidades. Uma entidade é a parte da frase pela qual uma máquina obtém o valor de qualquer intenção.

Example:
Temperature of New York.
Here Temperature is the intention and New York is an entity.

Em outras palavras, o chunking é usado para selecionar subconjuntos de tokens. Observe o código abaixo para entender como o chunking é usado para selecionar os tokens. Neste exemplo, você verá um gráfico que corresponde a um chunk de um sintagma nominal.

 import nltk
text = "learn php from guru99"
tokens = nltk.word_tokenize(text)
print(tokens)
tag = nltk.pos_tag(tokens)
print(tag)
grammar = "NP: {
?*}" cp =nltk.RegexpParser(grammar) result = cp.parse(tag) print(result) result.draw() # It will draw the pattern graphically which can be seen in Noun Phrase chunking

Saída:

['learn', 'php', 'from', 'guru99']  -- These are the tokens
[('learn', 'JJ'), ('php', 'NN'), ('from', 'IN'), ('guru99', 'NN')]   -- These are the pos_tag
(S (NP learn/JJ php/NN) from/IN (NP guru99/NN))        -- Noun Phrase Chunking

Gráfico de fragmentação de frases substantivas

Gráfico de fragmentação de frases substantivas

A partir do gráfico, podemos concluir que “learn” e “guru99” são dois tokens diferentes, mas categorizados como sintagmas nominais, enquanto o token “from” não pertence a um sintagma nominal. O agrupamento (chunking) é usado para categorizar tokens diferentes no mesmo bloco. O resultado dependerá da gramática selecionada. Além disso, o agrupamento no NLTK é usado para identificar padrões e explorar corpora de texto.

Contagem de etiquetas de ponto de venda

Discutimos vários pos_tag valores anteriores. Aqui você aprenderá como contar essas tags. A contagem de tags é crucial para a classificação de texto e para a preparação de recursos para operações de linguagem natural. Primeiro, escreveremos o código funcional e, em seguida, explicaremos os passos.

from collections import Counter
import nltk
text = "Guru99 is one of the best sites to learn WEB, SAP, Ethical Hacking and much more online."
lower_case = text.lower()
tokens = nltk.word_tokenize(lower_case)
tags = nltk.pos_tag(tokens)
counts = Counter( tag for word,  tag in tags)
print(counts)

Saída:

Counter({'NN': 5, ',': 2, 'TO': 1, 'CC': 1, 'VBZ': 1, 'NNS': 1, 'CD': 1, '.': 1, 'DT': 1, 'JJS': 1, 'JJ': 1, 'JJR': 1, 'IN': 1, 'VB': 1, 'RB': 1})

Elaboração do código:

  1. Utilize o pacote Counter do módulo collections. Counter é uma subclasse de dicionário que armazena elementos como chaves e suas contagens como valores.
  2. Importe o nltk para tokenizar o texto.
  3. Escreva o texto cujo pos_tag você deseja contar.
  4. Converta todas as palavras para minúsculas antes da tokenização.
  5. Passe as palavras pela função word_tokenize e calcule a pos_tag de cada token.
  6. O contador contabiliza então o número total de ocorrências de cada etiqueta no texto.

Distribuição de frequência

A distribuição de frequência refere-se ao número de vezes que um resultado de um experimento ocorre. Ela é usada para encontrar a frequência com que cada palavra ocorre em um documento. Ela utiliza o FreqDist classe definida pelo nltk.probabilidade módulo. A contagem é incrementada em um a cada vez que uma amostra ocorre.

Para qualquer palavra, podemos verificar quantas vezes ela ocorre em um documento. Por exemplo:

  • Método de contagem: freq_dist.count('and') retorna o número de vezes que 'and' ocorreu. É chamado de método de contagem.
  • Método de frequência: freq_dist.freq('and') retorna a frequência de uma determinada amostra.

Vamos escrever um pequeno programa que calcula a distribuição de frequência de cada palavra no texto.

import nltk
a = "Guru99 is the site where you can find the best tutorials for Software Testing     Tutorial, SAP Course for Beginners. Java Tutorial for Beginners and much more. Please     visit the site guru99.com and much more."
words = nltk.tokenize.word_tokenize(a)
fd = nltk.FreqDist(words)
fd.plot()

Explicação do código:

  1. Importe o módulo nltk.
  2. Escreva o texto cuja distribuição de palavras você precisa encontrar.
  3. Tokeniza cada palavra no texto, que serve como entrada para o módulo FreqDist do nltk.
  4. Aplique cada palavra à função nltk.FreqDist na forma de uma lista.
  5. Plote as palavras no gráfico usando a função plot().

NOTA: o matplotlib precisa estar instalado para visualizar o gráfico. Ele conta a ocorrência de cada palavra no texto e auxilia na análise de sentimentos baseada em texto. O termo-chave é "tokenizar": após a tokenização, cada palavra é verificada para determinar quantas vezes ela ocorreu.

Colocações: Bigrams e Trigrams

Colocações são pares de palavras que ocorrem juntas várias vezes em um documento. O cálculo é feito pela proporção entre o número de ocorrências desses pares e o número total de palavras do documento.

Considere palavras como raios ultravioleta e raios infravermelhos. As palavras ultravioleta e raios não são usadas individualmente e, portanto, podem ser tratadas como uma colocação. Outro exemplo é a tomografia computadorizada (TC), já que não dizemos TC e tomografia separadamente. A colocação pode ser categorizada em dois tipos:

  • Bigramas: combinação de duas palavras
  • Trigramas: combinação de três palavras

Bigramas e trigramas fornecem características mais significativas e úteis para o exemplo de recursotracetapa de análise. Essas etapas são especialmente úteis na análise de sentimentos baseada em texto.

Exemplo de bigramas Code:

import nltk
text = "Guru99 is a totally new kind of learning experience."
Tokens = nltk.word_tokenize(text)
output = list(nltk.bigrams(Tokens))
print(output)

Saída:

[('Guru99', 'is'), ('is', 'totally'), ('totally', 'new'), ('new', 'kind'), ('kind', 'of'), ('of', 'learning'), ('learning', 'experience'), ('experience', '.')]

Exemplo de trigramas Code:

Às vezes torna-se importante ver um par de três palavras na frase para análise estatística e contagem de frequência. Isto novamente desempenha um papel crucial na formação PNL (processamento de linguagem natural) recursos, bem como previsão de sentimento baseada em texto. O mesmo código é executado para calcular os trigramas.

import nltk
text = "Guru99 is a totally new kind of learning experience."
Tokens = nltk.word_tokenize(text)
output = list(nltk.trigrams(Tokens))
print(output)

Saída:

[('Guru99', 'is', 'totally'), ('is', 'totally', 'new'), ('totally', 'new', 'kind'), ('new', 'kind', 'of'), ('kind', 'of', 'learning'), ('of', 'learning', 'experience'), ('learning', 'experience', '.')]

Marcando frases

A etiquetagem de uma frase consiste em adicionar rótulos, como verbo ou substantivo, com base no contexto da frase. Identificar as classes gramaticais é complexo, portanto, a etiquetagem genérica manual não é possível, pois algumas palavras têm significados ambíguos dependendo da estrutura da frase. Converter o texto em uma lista é uma etapa importante antes da etiquetagem, pois cada palavra é percorrida e contabilizada para uma determinada classe gramatical.

import nltk
text = "Hello Guru99, You have to build a very good site, and I love visiting your site."
sentence = nltk.sent_tokenize(text)
for sent in sentence:
	 print(nltk.pos_tag(nltk.word_tokenize(sent)))

Code Explicação:

  1. Code para importar nltk (o Natural Language Toolkit, que contém submódulos como tokenização de sentenças e tokenização de palavras).
  2. Texto cujas tags serão impressas.
  3. Tokenização de sentenças.
  4. Implementa-se um laço "for" onde as palavras são tokenizadas da frase e a etiqueta de cada palavra é impressa como saída.

Em um Corpus, existem dois tipos de marcadores POS:

1. Etiquetador POS baseado em regras: Para palavras com significado ambíguo, aplica-se uma abordagem baseada em regras e informações contextuais. Isso é feito analisando o significado da palavra anterior ou posterior. Portanto, as palavras são etiquetadas de acordo com as regras gramaticais de um idioma específico, como o uso de maiúsculas e minúsculas e a pontuação. Por exemplo, o etiquetador de Brill.

2. Etiquetador POS estocástico: Neste método, são aplicadas abordagens como frequência ou probabilidade. Se uma palavra é predominantemente associada a uma determinada etiqueta no conjunto de treinamento, essa etiqueta é atribuída a ela na frase de teste. A etiqueta da palavra depende não apenas da sua própria etiqueta, mas também da etiqueta anterior, portanto, esse método nem sempre é preciso.

Etiquetagem POS com Modelo Oculto de Markov

Problemas de etiquetagem também podem ser modelados usando um Modelo Oculto de Markov (HMM). Ele trata os tokens de entrada como uma sequência observável, enquanto as etiquetas são consideradas estados ocultos, e o objetivo é determinar a sequência de estados ocultos. Por exemplo, x = x1, x2, ..., xn, onde x é uma sequência de tokens, enquanto y = y1, y2, y3, y4, ..., yn é a sequência oculta.

Como funciona o modelo oculto de Markov (HMM)?

O HMM utiliza uma distribuição conjunta P(x, y), onde x é a sequência de tokens de entrada e y é a sequência de tags. A sequência de tags para x será argmax sobre y1…yn de p(x1,x2,…xn,y1,y2,y3,…). Categorizamos as tags a partir do texto, mas as estatísticas dessas tags são vitais, portanto, a próxima etapa consiste em contá-las para estudo estatístico.

Perguntas Frequentes

A etiquetagem POS (classificação gramatical) atribui a cada palavra individual sua classe gramatical, como substantivo ou verbo. O agrupamento (chunking) vai um passo além e agrupa essas palavras etiquetadas em frases, como sintagmas nominais, conferindo à frase uma estrutura mais simples.

A análise sintática superficial, também chamada de fragmentação ou análise sintática leve, mantém no máximo um nível entre as raízes e as folhas. Ela identifica os limites das frases sem construir uma árvore sintática completa, o que a torna mais rápida do que a análise sintática profunda.

A segmentação agrupa palavras marcadas em frases, o que permite que um sistema detecte entidades como pessoas, locais, datas ou produtos. O reconhecimento de entidades nomeadas depende desses agrupamentos para extrair informações.tract valores significativos a partir do texto bruto.

A função nltk.pos_tag() atribui etiquetas gramaticais. Primeiro, você tokeniza o texto com word_tokenize e, em seguida, passa a lista de tokens para pos_tag, que retorna cada palavra emparelhada com sua etiqueta, como NN, VB ou JJ.

Sim. Os modernos sistemas de etiquetagem por IA, treinados com aprendizado de máquina e redes neurais profundas, resolvem palavras ambíguas aprendendo o contexto a partir de grandes conjuntos de dados, alcançando maior precisão do que os métodos baseados em regras em textos do mundo real.

Os etiquetadores estocásticos usam probabilidades aprendidas a partir de dados de treinamento. O aprendizado de máquina estima a probabilidade de cada etiqueta para uma palavra, considerando as etiquetas adjacentes, e então seleciona a sequência com a maior probabilidade geral.

Além de NLTKAs opções populares incluem ESPAÇO Para fluxos de trabalho de produção rápidos, utiliza-se o Stanford CoreNLP e o Hugging Face Transformers para marcação baseada em transformadores.

Em uma gramática de blocos, um ponto corresponde a qualquer caractere, exceto uma nova linha, um asterisco corresponde a zero ou mais repetições e um ponto de interrogação corresponde a zero ou uma repetição do padrão de etiqueta POS precedente.

Resuma esta postagem com: