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.