Marcação de PDV com NLTK e Chunking em PNL [EXEMPLOS]
Marcação de PDV
Marcação de PDV (Parts of Speech Tagging) é um processo para marcar as palavras em formato de texto para uma parte específica de um discurso com base em sua definição e contexto. É responsável pela leitura de texto em um idioma e pela atribuição de algum token específico (Partes do Discurso) a cada palavra. Também é chamada de marcação gramatical.
Vamos aprender com um exemplo de classe gramatical NLTK:
Entrada: Tudo para nos permitir.
Saída: [('Tudo', NN),('para', PARA), ('permitir', VB), ('nós', PRP)]
Etapas envolvidas no exemplo de marcação de PDV
- Tokenizar texto (word_tokenize)
- aplique pos_tag à etapa acima que é nltk.pos_tag(tokenize_text)
Os exemplos de tags NLTK POS são os seguintes:
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 | Esta tag NLTK POS é um adjetivo (grande) |
JJR | adjetivo, comparativo (maior) |
JJS | adjetivo, superlativo (maior) |
LS | listar mercado |
MD | modal (poderia, irá) |
NN | substantivo, singular (gato, árvore) |
NNS | substantivo plural (mesas) |
PNN | nome próprio, singular (Sarah) |
NNPS | nome próprio, plural (índios ou americanos) |
PDT | predeterminador (todos, ambos, metade) |
POS | final possessivo (pai) |
PRP | pronome pessoal (dela, ela mesma, ele, ele mesmo) |
PRP$ | pronome possessivo (ela, dele, meu, meu, nosso) |
RB | advérbio (ocasionalmente, rapidamente) |
RBR | advérbio, comparativo (maior) |
RBS | advérbio, superlativo (maior) |
RP | partícula (sobre) |
TO | marcador infinito (para) |
UH | interjeição (adeus) |
VB | verbo (perguntar) |
GBV | verbo gerúndio (julgar) |
DTV | pretérito verbal (suplicado) |
VBN | verbo particípio passado (reunificado) |
VBP | verbo, presente, não 3ª pessoa do singular (embrulhar) |
VBZ | verbo, presente com 3ª pessoa do singular (bases) |
wdt | wh-determinador (isso, o que) |
WP | o que- pronome (quem) |
WRB | o que- advérbio (como) |
A lista de tags NLTK POS acima contém todas as tags NLTK POS. O tagger NLTK POS é usado para atribuir informações gramaticais de cada palavra da frase. A instalação, importação e download de todos os pacotes do POS NLTK estão concluídos.
O que é Chunking na PNL?
fragmentação na PNL é um processo para pegar pequenos pedaços de informação e agrupá-los em grandes unidades. O uso principal de Chunking é formar grupos de “frases nominais”. É usado para adicionar estrutura à frase seguindo a marcação POS combinada com expressões regulares. O grupo de palavras resultante é chamado de “pedaços”. Também é chamada de análise superficial.
Na análise superficial, há no máximo um nível entre raízes e folhas, enquanto a análise profunda compreende mais de um nível. A análise superficial também é chamada de análise leve ou fragmentação.
Regras para fragmentação
Não existem regras pré-definidas, mas você pode combiná-las de acordo com a necessidade e exigência.
Por exemplo, você precisa marcar o substantivo, o verbo (passado), o adjetivo e a junção de coordenação da frase. Você pode usar a regra abaixo
pedaço:{ * * * ?}
A tabela a seguir mostra o que significam os vários 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:{<NN.?>*<VBD.?>*<JJ.?>*<CC>?}""" 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: <ChunkRule: '<NN.?>*<VBD.?>*<JJ.?>*<CC>?'> 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 exemplo: “make” é um verbo que não está incluído na regra, portanto não está marcado como mychunk
Caso de uso de chunking
Chunking é usado para detecção de entidade. Uma entidade é aquela parte da frase pela qual a 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, chunking é usado para selecionar os subconjuntos de tokens. Siga o código abaixo para entender como o chunking é usado para selecionar os tokens. Neste exemplo, você verá o gráfico que corresponderá a um pedaço de um sintagma nominal. Escreveremos o código e desenharemos o gráfico para melhor compreensão.
Código para demonstrar caso de uso
import nltk text = "learn php from guru99" tokens = nltk.word_tokenize(text) print(tokens) tag = nltk.pos_tag(tokens) print(tag) grammar = "NP: {<DT>?<JJ>*<NN>}" 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
A partir do gráfico, podemos concluir que “aprender” e “guru99” são dois tokens diferentes, mas são categorizados como sintagma nominal, enquanto o token “de” não pertence ao sintagma nominal.
Chunking é usado para categorizar tokens diferentes no mesmo bloco. O resultado dependerá da gramática selecionada. Adicional Chunking NLTK é usado para marcar padrões e explorar corpora de texto.
CONTANDO TAGS DE POS
Discutimos vários pos_tag na seção anterior. Neste tutorial específico, você estudará como contar essas tags. A contagem de tags é crucial para a classificação do texto, bem como para a preparação dos recursos para as operações baseadas em linguagem natural. Discutirei com você a abordagem que o guru99 seguiu ao preparar o código junto com uma discussão sobre a saída. Espero que isso ajude você.
Como contar tags:
Aqui, primeiro escreveremos o código funcional e, em seguida, escreveremos diferentes etapas para explicar o código.
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:
Contador({'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
- Para contar as tags, você pode usar o pacote Counter do módulo da coleção. Um contador é uma subclasse de dicionário que funciona segundo o princípio da operação de valor-chave. É uma coleção não ordenada onde os elementos são armazenados como uma chave de dicionário enquanto a contagem é o seu valor.
- Importe nltk que contém módulos para tokenizar o texto.
- Escreva o texto cujo pos_tag você deseja contar.
- Algumas palavras estão em maiúsculas e outras em minúsculas, por isso é apropriado transformar todas as palavras em minúsculas antes de aplicar a tokenização.
- Passe as palavras por word_tokenize do nltk.
- Calcule o pos_tag de cada token
Output = [('guru99', 'NN'), ('is', 'VBZ'), ('one', 'CD'), ('of', 'IN'), ('the', 'DT'), ('best', 'JJS'), ('site', 'NN'), ('to', 'TO'), ('learn', 'VB'), ('web', 'NN'), (',', ','), ('sap', 'NN'), (',', ','), ('ethical', 'JJ'), ('hacking', 'NN'), ('and', 'CC'), ('much', 'RB'), ('more', 'JJR'), ('online', 'JJ')]
- Agora vem a função do contador de dicionário. Importamos na linha de código 1. As palavras são a chave e as tags são o valor e o contador contará a contagem total de cada tag presente no texto.
Distribuição de frequência
A distribuição de frequência é referida como o número de vezes que ocorre um resultado de um experimento. É usado para encontrar a frequência de cada palavra que ocorre em um documento. Ele usa ClasseDistFreq e definido por o nltk.probabilidade módulo.
Uma distribuição de frequência geralmente é criada contando as amostras da execução repetida do experimento. O número de contagens é incrementado em um, cada vez. Por exemplo
freq_dist = FreqDist()
para o token no documento:
freq_dist.inc(token.type())
Para qualquer palavra, podemos verificar quantas vezes ela ocorreu em um determinado documento. Por exemplo
- Método de contagem: freq_dist.count('and')Esta expressão retorna o valor do número de vezes que 'and' ocorreu. É chamado de método de contagem.
- Método de frequência: freq_dist.freq('and')Esta expressão retorna a frequência de uma determinada amostra.
Escreveremos um pequeno programa e explicaremos detalhadamente seu funcionamento. Escreveremos um texto e calcularemos a distribuição de frequência de cada palavra do 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:
- Importe o módulo nltk.
- Escreva o texto cuja distribuição de palavras você precisa encontrar.
- Tokenize cada palavra no texto que é servido como entrada para o módulo FreqDist do nltk.
- Aplique cada palavra a nlk.FreqDist na forma de uma lista
- Plote as palavras no gráfico usando plot()
Por favor visualize o gráfico para uma melhor compreensão do texto escrito
NOTA: Você precisa ter o matplotlib instalado para ver o gráfico acima
Observe o gráfico acima. Corresponde à contagem da ocorrência de cada palavra do texto. Ajuda no estudo do texto e posteriormente na implementação da análise sentimental baseada no texto. Resumindo, pode-se concluir que o nltk possui um módulo de contagem da ocorrência de cada palavra do texto que auxilia na preparação das estatísticas dos recursos da linguagem natural. Ele desempenha um papel significativo na localização de palavras-chave no texto. Você também pode extrair o texto do PDF usando bibliotecas como extract, PyPDF2 e alimentar o texto para nlk.FreqDist.
O termo-chave é “tokenizar”. Após a tokenização, ele verifica cada palavra em um determinado parágrafo ou documento de texto para determinar o número de vezes que ela ocorreu. Você não precisa do kit de ferramentas NLTK para isso. Você também pode fazer isso com suas próprias habilidades de programação em Python. O kit de ferramentas NLTK fornece apenas um código pronto para uso para as diversas operações.
Contar cada palavra pode não ser muito útil. Em vez disso, deve-se focar na colocação e nos bigramas, que lidam com muitas palavras em um par. Esses pares identificam palavras-chave úteis para melhorar os recursos de linguagem natural que podem ser alimentados na máquina. Por favor, veja abaixo os detalhes.
Colocações: Bigrams e Trigrams
O que são colocações?
Colocações são pares de palavras que ocorrem juntas muitas vezes em um documento. É calculado pelo número desses pares que ocorrem juntos na contagem geral de palavras do documento.
Considere o espectro eletromagnético com palavras como raios ultravioleta, raios infravermelhos.
As palavras ultravioleta e raios não são usadas individualmente e, portanto, podem ser tratadas como Colocação. Outro exemplo é a tomografia computadorizada. Não dizemos CT e Scan separadamente e, portanto, eles também são tratados como colocação.
Podemos dizer que encontrar colocações requer calcular as frequências das palavras e seu aparecimento no contexto de outras palavras. Essas coleções específicas de palavras exigem filtragem para reter termos de conteúdo úteis. Cada grama de palavras pode então ser pontuado de acordo com alguma medida de associação, para determinar a probabilidade relativa de cada Ingram ser uma colocação.
A colocação pode ser categorizada em dois tipos-
- Bigramas ccombinação de duas palavras
- Trigramascombinação de três palavras
Bigrams e Trigrams fornecem recursos mais significativos e úteis para o estágio de extração de recursos. Eles são especialmente úteis em análises sentimentais baseadas em texto.
Código de exemplo de bigramas
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', '.')]
Código de exemplo de trigramas
À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 (recursos de processamento de linguagem natural), bem como previsão sentimental 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
Marcar frase em um sentido mais amplo refere-se à adição de rótulos do verbo, substantivo, etc., pelo contexto da frase. A identificação de tags POS é um processo complicado. Assim, a marcação genérica do POS não é possível manualmente, pois algumas palavras podem ter significados diferentes (ambíguos) de acordo com a estrutura da frase. A conversão de texto na forma de lista é uma etapa importante antes da marcação, pois cada palavra da lista é repetida e contada para uma tag específica. Por favor, veja o código abaixo para entendê-lo melhor
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)))
Saída:
[('Olá', 'NNP'), ('Guru99', 'NNP'), (',', ','), ('Você', 'PRP'), ('tem', 'VBP') , ('construir', 'VBN'), ('a', 'DT'), ('muito', 'RB'), ('bom', 'JJ'), ('site', 'NN') , ('e', 'CC'), ('Eu', 'PRP'), ('amor', 'VBP'), ('visitando', 'VBG'), ('seu', 'PRP$' ), ('site', 'NN'), ('.', '.')]
Explicação do código:
- Código para importar nltk (kit de ferramentas de linguagem natural que contém submódulos como tokenize de frase e tokenize de palavra).
- Texto cujas tags serão impressas.
- Tokenização de sentença
- O loop For é implementado onde as palavras são tokenizadas a partir da frase e a tag de cada palavra é impressa como saída.
No Corpus existem dois tipos de etiquetadores de PDV:
- Baseado em regras
- Etiquetadores POS estocásticos
1. Marcador POS baseado em regras: Para as palavras com significado ambíguo, é aplicada uma abordagem baseada em regras com base em informações contextuais. Isso é feito verificando ou analisando o significado da palavra anterior ou seguinte. A informação é analisada a partir do entorno da palavra ou dentro dela mesma. Portanto, as palavras são marcadas pelas regras gramaticais de um determinado idioma, como letras maiúsculas e pontuação. por exemplo, o etiquetador de Brill.
2. Marcador POS estocástico: Diferentes abordagens, como frequência ou probabilidade, são aplicadas neste método. Se uma palavra for marcada principalmente com uma tag específica no conjunto de treinamento, na frase de teste ela receberá essa tag específica. A tag word depende não apenas de sua própria tag, mas também da tag anterior. Este método nem sempre é preciso. Outra forma é calcular a probabilidade de ocorrência de uma tag específica em uma frase. Assim, a tag final é calculada verificando a maior probabilidade de uma palavra com uma determinada tag.
Marcação de PDV com modelo oculto de Markov
Problemas de marcação também podem ser modelados usando HMM. Ele trata os tokens de entrada como uma sequência observável, enquanto as tags são consideradas como 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 s = s1,y2,y3,y4………yné a sequência oculta.
Como funciona o modelo oculto de Markov (HMM)?
HMM usa distribuição de junção que é P(x, y) onde x é a sequência de entrada/sequência de token e y é a sequência de tags.
A sequência de tags para x será argmaxa1….ynp(x1,x2,….xn,y1,y2,y3,…..). Categorizamos as tags do texto, mas as estatísticas dessas tags são vitais. Então a próxima parte é contar essas tags para estudo estatístico.
Resumo
- Marcação de PDV NLTK é um processo para marcar as palavras em formato de texto para uma parte específica de um discurso com base em sua definição e contexto.
- Alguns exemplos de marcação NLTK POS são: CC, CD, EX, JJ, MD, NNP, PDT, PRP$, TO, etc.
- O tagger POS é usado para atribuir informações gramaticais de cada palavra da frase. A instalação, importação e download de todos os pacotes de marcação de parte da fala com NLTK estão concluídos.
- Chunking na PNL é um processo para pegar pequenos pedaços de informação e agrupá-los em grandes unidades.
- Não existem regras pré-definidas, mas você pode combiná-las de acordo com a necessidade e exigência.
- Chunking é usado para detecção de entidade. Uma entidade é aquela parte da frase pela qual a máquina obtém o valor de qualquer intenção.
- Chunking é usado para categorizar tokens diferentes no mesmo bloco.