Natural Language Toolkit - Tokenizzazione del testo

Cos'è la tokenizzazione?

Può essere definito come il processo di suddivisione di una parte di testo in parti più piccole, come frasi e parole. Queste parti più piccole sono chiamate gettoni. Ad esempio, una parola è un segno in una frase e una frase è un segno in un paragrafo.

Come sappiamo, la PNL viene utilizzata per creare applicazioni come l'analisi del sentiment, i sistemi di controllo qualità, la traduzione della lingua, i chatbot intelligenti, i sistemi vocali, ecc. I token, menzionati sopra, sono molto utili per trovare e comprendere questi modelli. Possiamo considerare la tokenizzazione come il passaggio base per altre ricette come lo stemming e la lemmatizzazione.

Pacchetto NLTK

nltk.tokenize è il pacchetto fornito dal modulo NLTK per ottenere il processo di tokenizzazione.

Tokenizzare frasi in parole

Dividere la frase in parole o creare un elenco di parole da una stringa è una parte essenziale di ogni attività di elaborazione del testo. Cerchiamo di capirlo con l'aiuto di varie funzioni / moduli forniti danltk.tokenize pacchetto.

modulo word_tokenize

word_tokenizeviene utilizzato per la tokenizzazione di parole di base. L'esempio seguente utilizzerà questo modulo per dividere una frase in parole.

Esempio

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

Produzione

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

Classe TreebankWordTokenizer

word_tokenize module, usato sopra è fondamentalmente una funzione wrapper che chiama la funzione tokenize () come un'istanza di TreebankWordTokenizerclasse. Fornirà lo stesso output che otteniamo utilizzando il modulo word_tokenize () per dividere le frasi in parole. Vediamo lo stesso esempio implementato sopra -

Esempio

Innanzitutto, dobbiamo importare il toolkit del linguaggio naturale (nltk).

import nltk

Ora importa il file TreebankWordTokenizer classe per implementare l'algoritmo di tokenizzatore di parole -

from nltk.tokenize import TreebankWordTokenizer

Quindi, crea un'istanza della classe TreebankWordTokenizer come segue:

Tokenizer_wrd = TreebankWordTokenizer()

Ora, inserisci la frase che vuoi convertire in token -

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

Produzione

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

Esempio di implementazione completo

Vediamo di seguito l'esempio di implementazione completo

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

Produzione

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

La convenzione più significativa di un tokenizer è separare le contrazioni. Ad esempio, se usiamo il modulo word_tokenize () per questo scopo, darà l'output come segue:

Esempio

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

Produzione

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

Questo tipo di convenzione di TreebankWordTokenizerè inaccettabile. Ecco perché abbiamo due tokenizer di parole alternative, vale a direPunktWordTokenizer e WordPunctTokenizer.

Classe WordPunktTokenizer

Un tokenizer di parole alternativo che divide tutta la punteggiatura in token separati. Cerchiamo di capirlo con il seguente semplice esempio:

Esempio

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

Produzione

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

Tokenizzare il testo in frasi

In questa sezione suddivideremo il testo / paragrafo in frasi. NLTK forniscesent_tokenize modulo per questo scopo.

Perché è necessario?

Una domanda ovvia che ci è venuta in mente è che quando abbiamo tokenizer di parole, perché abbiamo bisogno di tokenizer di frasi o perché abbiamo bisogno di tokenizzare il testo in frasi. Supponiamo di dover contare le parole medie nelle frasi, come possiamo farlo? Per eseguire questa operazione, abbiamo bisogno sia della tokenizzazione delle frasi che della tokenizzazione delle parole.

Cerchiamo di capire la differenza tra frase e tokenizzatore di parole con l'aiuto del seguente semplice esempio:

Esempio

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)

Produzione

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

Tokenizzazione di frasi utilizzando espressioni regolari

Se ritieni che l'output di word tokenizer sia inaccettabile e desideri il controllo completo su come tokenizzare il testo, abbiamo un'espressione regolare che può essere utilizzata durante la tokenizzazione delle frasi. Fornire NLTKRegexpTokenizer classe per raggiungere questo obiettivo.

Cerchiamo di capire il concetto con l'aiuto di due esempi di seguito.

Nel primo esempio useremo espressioni regolari per abbinare token alfanumerici più virgolette singole in modo da non dividere le contrazioni come “won’t”.

Esempio 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.")

Produzione

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

Nel primo esempio, useremo espressioni regolari per tokenizzare su spazi bianchi.

Esempio 2

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

Produzione

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

Dall'output sopra, possiamo vedere che la punteggiatura rimane nei token. Il parametro gaps = True significa che il pattern identificherà i gap su cui tokenizzare. D'altra parte, se useremo il parametro gaps = False, il modello verrà utilizzato per identificare i token che possono essere visti nel seguente esempio:

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

Produzione

[ ]

Ci darà l'output vuoto.