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.