Kit de ferramentas de linguagem natural - tokenização de texto

O que é tokenização?

Pode ser definido como o processo de quebrar um pedaço de texto em partes menores, como frases e palavras. Essas partes menores são chamadas de tokens. Por exemplo, uma palavra é um token em uma frase, e uma frase é um token em um parágrafo.

Como sabemos que a PNL é usada para construir aplicativos como análise de sentimento, sistemas de controle de qualidade, tradução de idiomas, chatbots inteligentes, sistemas de voz, etc., portanto, para construí-los, torna-se vital entender o padrão no texto. Os tokens, mencionados acima, são muito úteis para encontrar e compreender esses padrões. Podemos considerar a tokenização como a etapa base para outras receitas, como lematização e lematização.

Pacote NLTK

nltk.tokenize é o pacote fornecido pelo módulo NLTK para realizar o processo de tokenização.

Tokenização de frases em palavras

Dividir a frase em palavras ou criar uma lista de palavras a partir de uma string é uma parte essencial de toda atividade de processamento de texto. Vamos entendê-lo com a ajuda de várias funções / módulos fornecidos pornltk.tokenize pacote.

módulo word_tokenize

word_tokenizemódulo é usado para tokenização de palavras básicas. O exemplo a seguir usará este módulo para dividir uma frase em palavras.

Exemplo

import nltk
from nltk.tokenize import word_tokenize
word_tokenize('Tutorialspoint.com provides high quality technical tutorials for free.')

Resultado

['Tutorialspoint.com', 'provides', 'high', 'quality', 'technical', 'tutorials', 'for', 'free', '.']

Classe TreebankWordTokenizer

word_tokenize módulo, usado acima é basicamente uma função de wrapper que chama a função tokenize () como uma instância do TreebankWordTokenizerclasse. Ele dará a mesma saída que obtemos ao usar o módulo word_tokenize () para dividir as sentenças em palavras. Vejamos o mesmo exemplo implementado acima -

Exemplo

Primeiro, precisamos importar o kit de ferramentas de linguagem natural (nltk).

import nltk

Agora, importe o TreebankWordTokenizer classe para implementar o algoritmo de tokenizador de palavras -

from nltk.tokenize import TreebankWordTokenizer

Em seguida, crie uma instância da classe TreebankWordTokenizer da seguinte maneira -

Tokenizer_wrd = TreebankWordTokenizer()

Agora, insira a frase que deseja converter em tokens -

Tokenizer_wrd.tokenize(
   'Tutorialspoint.com provides high quality technical tutorials for free.'
)

Resultado

[
   'Tutorialspoint.com', 'provides', 'high', 'quality', 
   'technical', 'tutorials', 'for', 'free', '.'
]

Exemplo de implementação completo

Vamos ver o exemplo completo de implementação abaixo

import nltk
from nltk.tokenize import TreebankWordTokenizer
tokenizer_wrd = TreebankWordTokenizer()
tokenizer_wrd.tokenize('Tutorialspoint.com provides high quality technical
tutorials for free.')

Resultado

[
   'Tutorialspoint.com', 'provides', 'high', 'quality', 
   'technical', 'tutorials','for', 'free', '.'
]

A convenção mais significativa de um tokenizer é separar as contrações. Por exemplo, se usarmos o módulo word_tokenize () para este propósito, ele dará a saída da seguinte forma -

Exemplo

import nltk
from nltk.tokenize import word_tokenize
word_tokenize('won’t')

Resultado

['wo', "n't"]]

Esse tipo de convenção por TreebankWordTokenizeré inaceitável. É por isso que temos dois tokenizadores de palavras alternativos, a saberPunktWordTokenizer e WordPunctTokenizer.

Classe WordPunktTokenizer

Um tokenizador de palavra alternativo que divide toda a pontuação em tokens separados. Vamos entender com o seguinte exemplo simples -

Exemplo

from nltk.tokenize import WordPunctTokenizer
tokenizer = WordPunctTokenizer()
tokenizer.tokenize(" I can't allow you to go home early")

Resultado

['I', 'can', "'", 't', 'allow', 'you', 'to', 'go', 'home', 'early']

Tokenização de texto em frases

Nesta seção, vamos dividir o texto / parágrafo em sentenças. NLTK fornecesent_tokenize módulo para este fim.

Por que é necessário?

Uma pergunta óbvia que surgiu em nossa mente é que, quando temos um tokenizador de palavras, por que precisamos do tokenizador de frases ou por que precisamos tokenizar o texto em frases. Suponha que precisemos contar palavras médias em sentenças, como podemos fazer isso? Para realizar essa tarefa, precisamos de tokenização de frase e tokenização de palavra.

Vamos entender a diferença entre frase e tokenizador de palavras com a ajuda do seguinte exemplo simples -

Exemplo

import nltk
from nltk.tokenize import sent_tokenize
text = "Let us understand the difference between sentence & word tokenizer. 
It is going to be a simple example."
sent_tokenize(text)

Resultado

[
   "Let us understand the difference between sentence & word tokenizer.", 
   'It is going to be a simple example.'
]

Tokenização de frases usando expressões regulares

Se você acha que a saída do tokenizer de palavras é inaceitável e deseja controle completo sobre como tokenizar o texto, temos uma expressão regular que pode ser usada ao fazer a tokenização de frases. NLTK fornecerRegexpTokenizer classe para conseguir isso.

Vamos entender o conceito com a ajuda de dois exemplos abaixo.

No primeiro exemplo, usaremos uma expressão regular para combinar tokens alfanuméricos mais aspas simples para não dividir as contrações como “won’t”.

Exemplo 1

import nltk
from nltk.tokenize import RegexpTokenizer
tokenizer = RegexpTokenizer("[\w']+")
tokenizer.tokenize("won't is a contraction.")
tokenizer.tokenize("can't is a contraction.")

Resultado

["won't", 'is', 'a', 'contraction']
["can't", 'is', 'a', 'contraction']

No primeiro exemplo, usaremos uma expressão regular para tokenizar em espaços em branco.

Exemplo 2

import nltk
from nltk.tokenize import RegexpTokenizer
tokenizer = RegexpTokenizer('/s+' , gaps = True)
tokenizer.tokenize("won't is a contraction.")

Resultado

["won't", 'is', 'a', 'contraction']

Pela saída acima, podemos ver que a pontuação permanece nos tokens. O parâmetro gaps = True significa que o padrão identificará os gaps para tokenizar. Por outro lado, se usarmos o parâmetro gaps = False, o padrão será usado para identificar os tokens que podem ser vistos no exemplo a seguir -

import nltk
from nltk.tokenize import RegexpTokenizer
tokenizer = RegexpTokenizer('/s+' , gaps = False)
tokenizer.tokenize("won't is a contraction.")

Resultado

[ ]

Isso nos dará a saída em branco.