Come estrarre frasi dal testo usando il modulo NLTK Python

Come estrarre frasi dal testo usando il modulo NLTK Python
The Natural Language Toolkit (NLTK) è un modulo di elaborazione del linguaggio e del testo per Python. NLTK può analizzare, elaborare e tokenizzare il testo disponibile in molte diverse lingue utilizzando la sua libreria di corpora integrata e un grande pool di dati lessicali. Python è uno dei linguaggi di programmazione più popolari utilizzati nella scienza dei dati e nell'elaborazione del linguaggio, principalmente a causa della versatilità della lingua e della disponibilità di moduli utili come NLTK. Questo articolo spiegherà come estrarre frasi dai paragrafi di testo usando NLTK. Il codice in questa guida è stato testato con Python 3.8.2 e nltk 3.4.5 su Ubuntu 20.04 LTS.

Installazione di NLTK in Linux

Per installare NLTK in Ubuntu, eseguire il comando di seguito:

$ sudo apt install python3-nltk

I pacchetti NLTK sono disponibili in tutte le principali distribuzioni Linux. Cerca la parola chiave "NLTK" nel gestore dei pacchetti per installare i pacchetti. Se per qualche motivo, NLTK non è disponibile nei repository della tua distribuzione, è possibile installarlo dal gestore dei pacchetti PIP eseguendo il comando di seguito:

$ pip install --user -u nltk

Nota che dovrai prima installare PIP dal tuo gestore pacchetti per il comando sopra per funzionare. Su alcune distribuzioni, può essere chiamato PIP3. Puoi anche seguire istruzioni di installazione dettagliate disponibili sul sito ufficiale di NLTK.

Estrarre frasi da un paragrafo usando NLTK

Per i paragrafi senza punteggi e spaziatura complessi, è possibile utilizzare il tokenizer della frase NLTK incorporato, chiamato "Punkt Tokenizer", che viene fornito con un modello pre-addestrato. Puoi anche utilizzare i tuoi modelli di dati addestrati per tokenizzare il testo in frasi. I modelli di dati addestrati su misura sono fuori dall'ambito di questo articolo, quindi il codice seguente utilizzerà il tokenizer inglese Punkt integrato. Per scaricare il file delle risorse Punkt, eseguire i seguenti tre comandi in successione e attendere che il download finisca:

$ Python3
$ import nltk
$ nltk.Download ('Punkt')

Un paragrafo di "Alice's Adventures in Wonderland" sarà utilizzato nel campione di codice di seguito:

importare nltk
para = "o il pozzo era molto profondo, o cadde molto lentamente, perché lo aveva fatto
un sacco di tempo mentre scendeva a guardare lei e a chiedersi cosa stesse succedendo
per accadere dopo. Innanzitutto, ha provato a guardare in basso e a capire cosa stava arrivando,
Ma era troppo buio per vedere qualcosa; Quindi guardò i lati del pozzo e
notate che erano pieni di armadi e temi di libri; qua e là lei
Mappe e immagini di sega appese su pioli. Ha abbattuto un barattolo da uno degli scaffali
mentre passava; Era etichettato "Marmalade arancione", ma con sua grande delusione
era vuoto: non le piaceva lasciare il barattolo per paura di uccidere qualcuno, quindi gestito
per metterlo in uno degli armadi mentre cadeva oltre."
token = nltk.Sent_Tokenize (para)
per t in token:
print (t, "\ n")

L'esecuzione del codice sopra ti darà il seguente output:

Il tokenizer della frase Punkt incorporato funziona bene se vuoi tokenizzare semplici paragrafi. Dopo aver importato il modulo NLTK, tutto ciò che devi fare è utilizzare il metodo "Sent_Tokenize ()" su un corpus di testo di grandi dimensioni. Tuttavia, il tokenizzatore della frase punkt potrebbe non rilevare correttamente le frasi quando esiste un paragrafo complesso che contiene molti segni di punteggiatura, segni esclamativi, abbreviazioni o simboli ripetitivi. Non è possibile definire un modo standard per superare questi problemi. Dovrai scrivere codice personalizzato per affrontare questi problemi utilizzando Regex, Manipolation String o addestrando il proprio modello di dati invece di utilizzare il modello di dati Punkt incorporato.

Puoi anche provare a modificare il modello Punkt esistente per correggere la tokenizzazione errata utilizzando alcuni parametri aggiuntivi. Per fare ciò, segui la documentazione ufficiale di tokenization disponibile qui. Per utilizzare le tue modifiche personalizzate, è richiesta una leggera modifica del codice:

da nltk.tokenizzare.Punkt Import PunktsentenceTokenizer, PunktParameters
para = "o il pozzo era molto profondo, o cadde molto lentamente, perché aveva molto
di tempo mentre scendeva a guardarle e a chiedersi cosa sarebbe successo
Prossimo. Innanzitutto, ha cercato di guardare in basso e capire cosa stava arrivando, ma era
Troppo buio per vedere qualcosa; Quindi guardò i lati del pozzo e notò
che fossero pieni di armadi e temi di libri; Qua e là ha visto le mappe
e le foto appese ai pioli. Ha abbattuto un barattolo da uno degli scaffali mentre lei
passato; era etichettato "Marmalade arancione", ma con sua grande delusione era
vuoto: non le piaceva lasciar cadere il barattolo per paura di uccidere qualcuno, quindi è riuscito a farlo
mettilo in uno degli armadi mentre lo è caduto."
Punkt_params = PunktParameters ()
Punkt_params.Abbrev_Types = set (['Mr', 'Mrs', 'LLC'])
Tokenizer = PunktsentenceTokenizer (Punkt_Params)
token = tokenizer.tokenize (para)
per t in token:
print (t, "\ n")

Il codice sopra fa lo stesso lavoro del metodo "Sent_Tokenize ()". Tuttavia, ora puoi definire le tue regole utilizzando i metodi integrati e passarle come argomenti, come descritto nella documentazione. Ad esempio, alcune abbreviazioni sono state aggiunte al codice sopra. Se queste abbreviazioni sono seguite dalla punteggiatura, non verranno suddivissioni in una nuova frase. Il comportamento normale è usare un punto o un periodo come indicazione della fine di una frase.

Conclusione

NLTK e i suoi metodi di tokenizzazione sono abbastanza efficienti nel tokenizzazione e nell'elaborazione dei dati di testo. Tuttavia, i modelli pre-addestrati potrebbero non funzionare al 100% con diversi tipi di testi. Potrebbe essere necessario migliorare i modelli esistenti, addestrare e fornire il proprio o scrivere il tuo codice per correggere le anomalie.