Como usar o módulo tokenize no python

Como usar o módulo tokenize no python
Este artigo abordará um guia sobre o uso do módulo "tokenize" em Python. O módulo tokenize pode ser usado para segmentar ou dividir o texto em pequenos pedaços de várias maneiras. Você pode usar esses segmentos em aplicativos Python que usam aprendizado de máquina, processamento de linguagem natural e algoritmos de inteligência artificial. Todas as amostras de código deste artigo são testadas com Python 3.9.5 no Ubuntu 21.04.

Sobre o módulo tokenize

Como o nome sugere, o módulo tokenize pode ser usado para criar "tokens" a partir de um parágrafo ou um pedaço de texto. Cada peça quebrada individual retornou após o processo de tokenização ser chamado de token. Depois de tokenizar um texto, você pode implementar sua própria lógica em seu programa Python para processar os tokens de acordo com o seu caso de uso. O módulo tokenize fornece alguns métodos úteis que podem ser usados ​​para criar tokens. O uso desses métodos pode ser melhor compreendido através de exemplos. Alguns deles são explicados abaixo.

Tokenizando um parágrafo ou frase

Você pode tokenizar um parágrafo ou uma frase com palavras separadas por espaço usando o exemplo de código explicado abaixo.

importar tokenize
de IO Import bytesio
text = "Lorem ipsum dolor sit amet, consectur adipiscing elit, sed do eiusmod temporal incididunt ut labore et dolore magna aliqua."
tokens = tokenize.tokenize (bytesio (texto.Encode ('UTF-8')).Leia a linha)
Para T em tokens:
impressão (t)

As duas primeiras declarações importam os módulos Python necessários para converter um pedaço de texto em tokens individuais. Uma variável chamada "texto" contém uma string de exemplo. Em seguida, o método "tokenize" do módulo tokenize é chamado. Ele usa o método "readline" como um argumento obrigatório. Como a variável de texto é do tipo "str", usá -lo diretamente lançará um erro. O argumento readline é um método chamável que deve retornar bytes em vez de uma string para o método tokenize funcionar corretamente. Então, usando a classe "Bytesio", o texto é convertido em um fluxo de bytes especificando um tipo de codificação.

O método tokenize gera uma tupla nomeada contendo cinco tipos: tipo (tipo de token), string (nome do token), start (posição inicial do token), final (posição final do token) e linha (a linha (a linha que foi usado para criar tokens). Então, depois de executar o exemplo de código acima, você deve obter uma saída semelhante a isso:

Tokeninfo (tipo = 62 (codificação), string = 'utf-8', start = (0, 0), end = (0, 0), line = ")
Tokeninfo (type = 1 (nome), string = 'lorem', start = (1, 0), end = (1, 5), linha = 'Lorem ipsum dolor sit amet, consectur adipiscing elit, sed do eiusmod temporal incididunt ut ut LABORE ET DOLORE MAGNA ALIQUA.')
..
..
Tokeninfo (tipo = 54 (op), string = '.', start = (1, 122), end = (1, 123), linha =' Lorem ipsum dolor sit amet, consectur adipiscing elit, sed do eiusmod temporal incididunt ut ladore et dolore magna aliqua.')
Tokeninfo (tipo = 4 (newline), string = ", start = (1, 123), end = (1, 124), linha =")
Tokeninfo (type = 0 (endmarker), string = ", start = (2, 0), end = (2, 0), line =")

Como você pode ver na saída acima, o método tokenize gera um “Tokeninfo”Objeto com cinco tipos mencionados acima. Se você deseja acessar esses tipos individualmente, use a notação de pontos (como mostrado no exemplo de código abaixo).

importar tokenize
de IO Import bytesio
text = "Lorem ipsum dolor sit amet, consectur adipiscing elit, sed do eiusmod temporal incididunt ut labore et dolore magna aliqua."
tokens = tokenize.tokenize (bytesio (texto.Encode ('UTF-8')).Leia a linha)
Para T em tokens:
impressão (t.string, t.Start, t.fim, t.tipo)

Depois de executar a amostra de código acima, você deve obter a seguinte saída:


UTF-8 (0, 0) (0, 0) 62
Lorem (1, 0) (1, 5) 1
ipsum (1, 6) (1, 11) 1
..
..

Observe que o “t.tipo”A chamada retorna um número constante para o tipo de token. Se você quiser um tipo de token mais legível pelo homem, use o “símbolo”Módulo e o“tok_name”Dicionário disponível nele.

importar tokenize
de IO Import bytesio
Importar token
text = "Lorem ipsum dolor sit amet, consectur adipiscing elit, sed do eiusmod temporal incididunt ut labore et dolore magna aliqua."
tokens = tokenize.tokenize (bytesio (texto.Encode ('UTF-8')).Leia a linha)
Para T em tokens:
impressão (t.string, t.Start, t.fim, token.tok_name [t.tipo])

Fornecendo “t.Digite ”constante para o dicionário“ Tok_Name ”, você pode obter um nome legível humano para o tipo de token. Depois de executar a amostra de código acima, você deve obter a seguinte saída:

UTF-8 (0, 0) (0, 0) Codificação
Lorem (1, 0) (1, 5) Nome
Ipsum (1, 6) (1, 11) Nome
Dolor (1, 12) (1, 17) Nome
..
..

Uma lista completa de todos os tipos de token e seus nomes está disponível aqui. Observe que o primeiro token é sempre o tipo de codificação de fluxo de entrada e não tem um valor de partida e final.

Você pode facilmente obter uma lista de nomes apenas de token usando instruções de loop ou compreensões de listar, como mostrado no exemplo de código abaixo.

importar tokenize
de IO Import bytesio
text = "Lorem ipsum dolor sit amet, consectur adipiscing elit, sed do eiusmod temporal incididunt ut labore et dolore magna aliqua."
tokens = tokenize.tokenize (bytesio (texto.Encode ('UTF-8')).Leia a linha)
token_list = [t.string para t em tokens]
Imprimir (token_list)

Depois de executar a amostra de código acima, você deve obter a seguinte saída:

['utf-8', 'lorem', 'ipsum', 'dolor', 'sit', 'amet', ',', 'consecteter', 'adipiscing', 'elit', ',' sed ' , 'do', 'eiusmod', 'temporal', 'incididunt', 'ut', 'labore', 'et', 'dolore', 'magna', 'aliqua', '.', ","]

Você pode usar o método "Gereate_tokens" disponível no módulo Tokenize se quiser tokenizar uma string sem convertê -la em bytes. Ainda é necessário um método de readline chamável como argumento obrigatório, mas apenas lida com as strings devolvidas pelo método ReadLine e não bytes (ao contrário do método tokenize explicado acima). O exemplo de código abaixo ilustra o uso do método Generate_tokens. Em vez da classe Bytesio, agora a classe "stringio" é usada.

importar tokenize
De IO Import stringio
text = "Lorem ipsum dolor sit amet, consectur adipiscing elit, sed do eiusmod temporal incididunt ut labore et dolore magna aliqua."
tokens = tokenize.generate_tokens (stringio (texto).Leia a linha)
token_list = [t.string para t em tokens]
Imprimir (token_list)

Depois de executar a amostra de código acima, você deve obter a seguinte saída:

['Lorem', 'ipsum', 'dolor', 'sit', 'AMET', ',' eiusmod ',' temporal ',' incididunt ',' ut ',' labore ',' et ',' dolore ',' magna ',' aliqua ','.', ","]

Conteúdo tokenizante de um arquivo

Você pode usar a declaração "com aberto" no modo "RB" para ler diretamente o conteúdo de um arquivo e depois tokenizá -lo. O "R" no modo "RB" significa o modo somente leitura, enquanto "B" significa modo binário. O exemplo de código abaixo abre uma “amostra.Arquivo TXT ”e tokeniza seu conteúdo usando os métodos Tokenize e ReadLine.

importar tokenize
com open ("amostra.txt "," rb ") como f:
tokens = tokenize.tokenize (f.Leia a linha)
token_list = [t.string para t em tokens]
Imprimir (token_list)

Você também pode usar o "Open", um método de conveniência disponível no módulo Tokenize e depois chama Generate_tokens e ReadLine Methods para criar tokens a partir de um arquivo diretamente.

importar tokenize
com tokenize.aberto ("amostra.txt ") como f:
tokens = tokenize.generate_tokens (f.Leia a linha)
token_list = [t.string para t em tokens]
Imprimir (token_list)

Assumindo que a amostra.O arquivo txt contém a mesma string de exemplo, você deve obter a seguinte saída depois de executar as duas amostras de código explicadas acima.

['Lorem', 'ipsum', 'dolor', 'sit', 'AMET', ',' eiusmod ',' temporal ',' incididunt ',' ut ',' labore ',' et ',' dolore ',' magna ',' aliqua ','.', ","]

Conclusão

O módulo Tokenize em Python fornece uma maneira útil de tokenizar pedaços de texto contendo palavras separadas por espaço. Ele também cria um mapa de posições iniciais e finais de tokens. Se você deseja tokenizar cada palavra de texto, o método tokenize é melhor que o método "dividido", pois também cuida de caracteres de pontuação / outros símbolos e também infecta o tipo de token.