Pitone

Come estrarre frasi dal testo usando il modulo Python NLTK

Come estrarre frasi dal testo usando il modulo Python NLTK
Il 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 lingue diverse utilizzando la sua libreria incorporata di corpora e un ampio pool di dati lessicali. Python è uno dei linguaggi di programmazione più popolari utilizzati nella scienza dei dati e nell'elaborazione del linguaggio, principalmente per la versatilità del linguaggio e la disponibilità di moduli utili come NLTK. Questo articolo spiegherà come estrarre frasi da 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, esegui il comando seguente:

$ sudo apt install python3-nltk

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

$ pip install --user -U nltk

Nota che dovrai prima installare pip dal tuo gestore di pacchetti affinché il comando sopra funzioni. Su alcune distribuzioni, può essere chiamato pip3. È inoltre possibile seguire le istruzioni di installazione dettagliate disponibili sul Sito ufficiale di NLTK.

Estrarre frasi da un paragrafo usando NLTK

Per i paragrafi senza punteggiatura e spaziatura complesse, puoi utilizzare il tokenizer di frasi NLTK integrato, chiamato "Punkt tokenizer", fornito con un modello pre-addestrato. Puoi anche utilizzare i tuoi modelli di dati addestrati per convertire il testo in frasi. I modelli di dati con training personalizzato non rientrano nell'ambito di questo articolo, quindi il codice seguente utilizzerà il tokenizer Punkt English integrato. Per scaricare il file di risorse Punkt, esegui i seguenti tre comandi in successione e attendi il completamento del download:

$ pitone3
$ import nltk
$ nltk.scarica('punk')

Nell'esempio di codice riportato di seguito verrà utilizzato un paragrafo di "Alice's Adventures in Wonderland":

import nltk
para = "O il pozzo era molto profondo, o lei è caduta molto lentamente, perché aveva
un sacco di tempo mentre scendeva per guardarsi intorno e chiedersi cosa stesse succedendo
accadrà dopo. Per prima cosa, ha cercato di guardare in basso e capire a cosa stava arrivando,
ma era troppo buio per vedere qualcosa; poi guardò i lati del pozzo, e
notò che erano pieni di armadi e scaffali per libri; qua e là lei
ho visto mappe e immagini appese ai pioli. Ha preso un barattolo da uno degli scaffali
mentre passava; era etichettato come "Marmellata di arance", ma con suo grande disappunto lo era
era vuoto: non le piaceva far cadere il barattolo per paura di uccidere qualcuno, così riuscì
metterlo in uno degli armadietti mentre ci cadeva davanti."
token = nltk.sent_tokenize(para)
per t in token:
stampa (t, "\n")

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

O il pozzo era molto profondo, o lei cadde molto lentamente, perché aveva tutto il tempo che..
scese a guardarsi intorno e a chiedersi cosa sarebbe successo dopo.
Per prima cosa, ha cercato di guardare in basso e capire a cosa stava arrivando, ma era troppo buio
vedere qualcosa; poi guardò i lati del pozzo, e notò che erano..
pieno di armadi e librerie; qua e là vedeva mappe e quadri appesi
su pioli.
Al suo passaggio prese un barattolo da uno degli scaffali; era etichettato 'ORANGEMARMALADE',
ma con suo grande disappunto era vuoto: non le piaceva far cadere il barattolo per paura di
uccidendo qualcuno, quindi è riuscito a metterlo in uno degli armadietti mentre ci cadeva davanti.

Il tokenizzatore di frasi Punkt integrato funziona bene se vuoi tokenizzare paragrafi semplici. 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 tokenizer di frasi Punkt potrebbe non rilevare correttamente le frasi quando è presente un paragrafo complesso che contiene molti segni di punteggiatura, punti 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, manipolazione di stringhe o addestrando il tuo modello di dati invece di utilizzare il modello di dati Punkt integrato.

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 sulla tokenizzazione Punkt disponibile Qui. Per utilizzare le tue modifiche personalizzate, è necessaria una leggera modifica al codice:

da nltk.tokenizzare.punkt import PunktSentenceTokenizer, PunktParameters
para = "O il pozzo era molto profondo, o cadeva molto lentamente, perché ne aveva in abbondanza
di tempo mentre scendeva a guardarsi intorno e a chiedersi cosa sarebbe successo
Il prossimo. Per prima cosa, ha cercato di guardare in basso e capire a cosa stava arrivando, ma era..
troppo buio per vedere qualcosa; poi guardò i lati del pozzo, e notò
che erano pieni di armadi e scaffali per libri; qua e là vedeva mappe
e quadri appesi ai pioli. Ha preso un barattolo da uno degli scaffali mentre..
passato; era etichettato come "Marmellata di arance", ma con suo grande disappunto lo era
vuoto: non le piaceva far cadere il barattolo per paura di uccidere qualcuno, così riuscì a
mettilo in uno degli armadietti mentre ci cadeva davanti."
punkt_params = PunktParameters()
punkt_params.abbrev_types = set(['Mr', 'Mrs', 'LLC'])
tokenizer = PunktSentenceTokenizer(punkt_params)
gettoni = tokenizzatore.tokenizzare (para)
per t in token:
stampa (t, "\n")

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

Conclusione

NLTK e i suoi metodi di tokenizzazione sono abbastanza efficienti nella 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 i propri o scrivere il proprio codice per correggere le anomalie.

Come modificare il puntatore del mouse e le dimensioni, il colore e lo schema del cursore su Windows 10
Il puntatore del mouse e il cursore in Windows 10 sono aspetti molto importanti del sistema operativo. Questo si può dire anche per altri sistemi oper...
Motori di gioco gratuiti e open source per lo sviluppo di giochi Linux
Questo articolo tratterà un elenco di motori di gioco gratuiti e open source che possono essere utilizzati per lo sviluppo di giochi 2D e 3D su Linux....
Tutorial Shadow of the Tomb Raider per Linux
Shadow of the Tomb Raider è la dodicesima aggiunta alla serie Tomb Raider, un franchise di giochi d'azione e avventura creato da Eidos Montreal. Il gi...