Come usare il modulo tokenize in Python

Come usare il modulo tokenize in Python
Questo articolo coprirà una guida sull'uso del modulo "tokenize" in Python. Il modulo tokenize può essere usato per segmentare o dividere il testo in piccoli pezzi in vari modi. È possibile utilizzare questi segmenti in applicazioni Python che utilizzano l'apprendimento automatico, l'elaborazione del linguaggio naturale e gli algoritmi di intelligenza artificiale. Tutti i campioni di codice in questo articolo sono testati con Python 3.9.5 su Ubuntu 21.04.

Sul modulo tokenize

Come suggerisce il nome, il modulo tokenize può essere utilizzato per creare "token" da un paragrafo o un pezzo di testo. Ogni singolo pezzo rotto restituito dopo il processo di tokenizzazione è chiamato token. Una volta che tokenizza un testo, puoi implementare la tua logica nel tuo programma Python per elaborare i token in base al tuo caso d'uso. Il modulo tokenize fornisce alcuni metodi utili che possono essere utilizzati per creare token. L'uso di questi metodi può essere meglio compreso attraverso esempi. Alcuni di loro sono spiegati di seguito.

Tokenizzare un paragrafo o una frase

È possibile tokenizzare un paragrafo o una frase con parole separate dallo spazio usando il campione di codice spiegato di seguito.

TOKENIZE DI importazione
da Io import bytesio
text = "lorem ipsum dolor sit amet, contipiscing élit condecttur, sed do eiusmod temporario incididunt ut labore et dolore magna aliqua."
token = tokenize.tokenize (bytesio (testo.ENCODE ('UTF-8')).linea di lettura)
per t in token:
stampa (t)

Le prime due dichiarazioni importano i moduli Python necessari necessari per convertire un pezzo di testo in singoli token. Una variabile chiamata "testo" contiene una stringa di esempio. Successivamente, il metodo "tokenize" dal modulo tokenize viene chiamato. Utilizza il metodo "readline" come argomento obbligatorio. Poiché la variabile di testo è di tipo "STR", usandola direttamente lancerà un errore. L'argomento readline è un metodo richiamabile che deve restituire byte invece di una stringa per il metodo tokenize per funzionare correttamente. Quindi usando la classe "bytesio", il testo viene convertito in un flusso di byte specificando un tipo di codifica.

Il metodo tokenize genera una tupla denominata contenente cinque tipi: tipo (tipo di token), stringa (nome del token), inizio (posizione iniziale del token), fine (posizione finale del token) che è stato usato per la creazione di token). Quindi, dopo aver eseguito il campione di codice sopra, è necessario ottenere un output simile a questo:

Tokeninfo (type = 62 (codifica), string = 'utf-8', start = (0, 0), end = (0, 0), line = ")
Tokeninfo (type = 1 (name), string = 'lorem', start = (1, 0), end = (1, 5), line = 'lorem ipsum dolor sit amet, contipiscing élit, sed do eiusmod tempo tempora Labrore et Dolore Magna aliqua.')
..
..
Tokeninfo (tipo = 54 (op), string = '.', start = (1, 122), end = (1, 123), line =' lorem ipsum dolor sit amet, contipiscing élit di consect, sed do eiusmod tempo tempora.')
Tokeninfo (type = 4 (newline), string = ", start = (1, 123), end = (1, 124), line =")
Tokeninfo (type = 0 (endmarker), string = ", start = (2, 0), end = (2, 0), line =")

Come puoi vedere nell'output sopra, il metodo tokenize genera un "Tokeninfo"Oggetto con cinque tipi sopra menzionati. Se si desidera accedere a questi tipi individualmente, utilizzare la notazione punto (come mostrato nel campione di codice seguente).

TOKENIZE DI importazione
da Io import bytesio
text = "lorem ipsum dolor sit amet, contipiscing élit condecttur, sed do eiusmod temporario incididunt ut labore et dolore magna aliqua."
token = tokenize.tokenize (bytesio (testo.ENCODE ('UTF-8')).linea di lettura)
per t in token:
Stampa (t.String, t.Inizia, t.fine, t.tipo)

Dopo aver eseguito il campione di codice sopra, è necessario ottenere il seguente output:


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

Nota che il "T.tipo"La chiamata restituisce un numero costante per il tipo di token. Se vuoi un tipo di token più leggibile dall'uomo, usa il “gettone"Modulo e"tok_name"Dizionario disponibile in esso.

TOKENIZE DI importazione
da Io import bytesio
Token di importazione
text = "lorem ipsum dolor sit amet, contipiscing élit condecttur, sed do eiusmod temporario incididunt ut labore et dolore magna aliqua."
token = tokenize.tokenize (bytesio (testo.ENCODE ('UTF-8')).linea di lettura)
per t in token:
Stampa (t.String, t.Inizia, t.Fine, gettone.tok_name [t.tipo])

Fornendo “T.Digita "costante al dizionario" tok_name ", puoi ottenere un nome leggibile umano per il tipo token. Dopo aver eseguito il campione di codice sopra, è necessario ottenere il seguente output:

UTF-8 (0, 0) (0, 0) codifica
Lorem (1, 0) (1, 5) Nome
ipsum (1, 6) (1, 11) nome
dolor (1, 12) (1, 17) nome
..
..

Un elenco completo di tutti i tipi di token e i loro nomi è disponibile qui. Si noti che il primo token è sempre il tipo di codifica di flusso di input e non ha un valore di inizio e fine.

Puoi facilmente ottenere un elenco di nomi di token utilizzando per le dichiarazioni per loop o le comprensioni dell'elenco, come mostrato nel campione di codice seguente.

TOKENIZE DI importazione
da Io import bytesio
text = "lorem ipsum dolor sit amet, contipiscing élit condecttur, sed do eiusmod temporario incididunt ut labore et dolore magna aliqua."
token = tokenize.tokenize (bytesio (testo.ENCODE ('UTF-8')).linea di lettura)
token_list = [t.stringa per t in token]
Stampa (token_list)

Dopo aver eseguito il campione di codice sopra, è necessario ottenere il seguente output:

['Utf-8', 'Lorem', 'Ipsum', 'Dolor', 'Sit', 'Amet', ',', 'Consecttur', 'Adipiscing', 'Elit', ',', 'Sed' , "do", "eiusmod", "temporali", "incididunt", "ut", "laboro", "et", "dolore", "magna", "aliqua", ".', ","]

È possibile utilizzare il metodo "Generate_tokens" disponibile nel modulo tokenize se si desidera tokenizzare una stringa senza convertirla in byte. Ci vuole ancora un metodo di readline callabile come argomento obbligatorio, ma gestisce solo le stringhe restituite con il metodo readline e non i byte (a differenza del metodo tokenize spiegato sopra). Il campione di codice seguente illustra l'uso del metodo Generate_Tokens. Invece della classe bytesio, ora viene utilizzata la classe "Stringio".

TOKENIZE DI importazione
da IO import Stringio
text = "lorem ipsum dolor sit amet, contipiscing élit condecttur, sed do eiusmod temporario incididunt ut labore et dolore magna aliqua."
token = tokenize.Generate_tokens (Stringio (testo).linea di lettura)
token_list = [t.stringa per t in token]
Stampa (token_list)

Dopo aver eseguito il campione di codice sopra, è necessario ottenere il seguente output:

['Lorem', 'Ipsum', 'Dolor', 'Sit', 'Amet', ',', 'Consecttur', 'Adipiscing', 'Elit', ',', 'Sed', 'Do', ' eiusmod "," tempora "," incididunt "," ut "," laboro "," et "," dolore "," magna "," aliqua ",".', ","]

Tokenizzante contenuto di un file

È possibile utilizzare l'istruzione "con aperta" in modalità "RB" per leggere direttamente il contenuto di un file e quindi tokenizzarlo. La modalità "R" in modalità "RB" sta per la modalità di sola lettura mentre "B" sta per la modalità binaria. Il campione di codice seguente apre un "campione.txt ”file e tokenizza i suoi contenuti usando i metodi tokenize e readline.

TOKENIZE DI importazione
con aperto ("campione.txt "," rb ") come f:
token = tokenize.tokenize (f.linea di lettura)
token_list = [t.stringa per t in token]
Stampa (token_list)

Puoi anche utilizzare "Apri", un metodo di convenienza disponibile nel modulo Tokenize, quindi chiamare Generate_Tokens e ReadLine Metodi per creare token da un file direttamente.

TOKENIZE DI importazione
con tokenize.aperto ("campione.txt ") come f:
token = tokenize.Generate_Tokens (f.linea di lettura)
token_list = [t.stringa per t in token]
Stampa (token_list)

Supponendo che il campione.Il file txt contiene la stessa stringa di esempio, è necessario ottenere il seguente output dopo l'esecuzione dei due campioni di codice spiegati sopra.

['Lorem', 'Ipsum', 'Dolor', 'Sit', 'Amet', ',', 'Consecttur', 'Adipiscing', 'Elit', ',', 'Sed', 'Do', ' eiusmod "," tempora "," incididunt "," ut "," laboro "," et "," dolore "," magna "," aliqua ",".', ","]

Conclusione

Il modulo tokenize in Python fornisce un modo utile per tokenizzare pezzi di testo contenenti parole separate dallo spazio. Crea anche una mappa delle posizioni di partenza di inizio e fine. Se si desidera tokenizzare ogni parola di un testo, il metodo tokenize è migliore del metodo "diviso" in quanto si occupa anche di tokenizzare i caratteri di punteggiatura / altri simboli e inflitta anche il tipo di token.