Elaborazione del linguaggio naturale - Python
In questo capitolo impareremo come elaborare il linguaggio usando Python.
Le seguenti caratteristiche rendono Python diverso dagli altri linguaggi:
Python is interpreted - Non abbiamo bisogno di compilare il nostro programma Python prima di eseguirlo perché l'interprete elabora Python in fase di runtime.
Interactive - Possiamo interagire direttamente con l'interprete per scrivere i nostri programmi Python.
Object-oriented - Python è di natura orientata agli oggetti e rende questo linguaggio più facile scrivere programmi perché con l'aiuto di questa tecnica di programmazione incapsula il codice all'interno degli oggetti.
Beginner can easily learn - Python è anche chiamato linguaggio per principianti perché è molto facile da capire e supporta lo sviluppo di un'ampia gamma di applicazioni.
Prerequisiti
L'ultima versione di Python 3 rilasciata è Python 3.7.1, disponibile per Windows, Mac OS e la maggior parte delle versioni di Linux OS.
Per Windows, possiamo andare al link www.python.org/downloads/windows/ per scaricare e installare Python.
Per MAC OS, possiamo usare il link www.python.org/downloads/mac-osx/ .
In caso di Linux, diverse versioni di Linux utilizzano diversi gestori di pacchetti per l'installazione di nuovi pacchetti.
Ad esempio, per installare Python 3 su Ubuntu Linux, possiamo utilizzare il seguente comando dal terminale:
$sudo apt-get install python3-minimal
Per saperne di più sulla programmazione Python, leggi il tutorial di base di Python 3 - Python 3
Introduzione a NLTK
Useremo la libreria Python NLTK (Natural Language Toolkit) per fare analisi del testo in lingua inglese. Il Natural language toolkit (NLTK) è una raccolta di librerie Python progettate appositamente per identificare e taggare parti del discorso trovate nel testo del linguaggio naturale come l'inglese.
Installazione di NLTK
Prima di iniziare a utilizzare NLTK, è necessario installarlo. Con l'aiuto del seguente comando, possiamo installarlo nel nostro ambiente Python -
pip install nltk
Se stiamo usando Anaconda, allora un pacchetto Conda per NLTK può essere creato usando il seguente comando:
conda install -c anaconda nltk
Download dei dati di NLTK
Dopo aver installato NLTK, un'altra attività importante è scaricare i suoi repository di testo preimpostati in modo che possa essere facilmente utilizzato. Tuttavia, prima dobbiamo importare NLTK nel modo in cui importiamo qualsiasi altro modulo Python. Il seguente comando ci aiuterà a importare NLTK -
import nltk
Ora scarica i dati NLTK con l'aiuto del seguente comando:
nltk.download()
Ci vorrà del tempo per installare tutti i pacchetti disponibili di NLTK.
Altri pacchetti necessari
Alcuni altri pacchetti Python come gensim e patternsono anche molto necessari per l'analisi del testo e per la creazione di applicazioni di elaborazione del linguaggio naturale utilizzando NLTK. i pacchetti possono essere installati come mostrato di seguito -
gensim
gensim è una robusta libreria di modelli semantici che può essere utilizzata per molte applicazioni. Possiamo installarlo seguendo il comando -
pip install gensim
modello
Può essere usato per fare gensimpacchetto funziona correttamente. Il seguente comando aiuta nell'installazione del pattern:
pip install pattern
Tokenizzazione
La tokenizzazione può essere definita come il processo di rottura del testo dato, in unità più piccole chiamate token. Parole, numeri o segni di punteggiatura possono essere gettoni. Può anche essere chiamata segmentazione delle parole.
Esempio
Input - Il letto e la sedia sono tipi di mobili.
Abbiamo diversi pacchetti per la tokenizzazione forniti da NLTK. Possiamo utilizzare questi pacchetti in base alle nostre esigenze. I pacchetti ei dettagli della loro installazione sono i seguenti:
pacchetto sent_tokenize
Questo pacchetto può essere utilizzato per dividere il testo di input in frasi. Possiamo importarlo usando il seguente comando:
from nltk.tokenize import sent_tokenize
pacchetto word_tokenize
Questo pacchetto può essere utilizzato per dividere il testo di input in parole. Possiamo importarlo usando il seguente comando:
from nltk.tokenize import word_tokenize
Pacchetto WordPunctTokenizer
Questo pacchetto può essere utilizzato per dividere il testo di input in parole e segni di punteggiatura. Possiamo importarlo usando il seguente comando:
from nltk.tokenize import WordPuncttokenizer
Stemming
Per motivi grammaticali, la lingua include molte variazioni. Variazioni nel senso che la lingua, l'inglese come anche altre lingue, hanno forme diverse di una parola. Ad esempio, le parole comedemocracy, democratic, e democratization. Per i progetti di machine learning, è molto importante che le macchine comprendano che queste diverse parole, come sopra, hanno la stessa forma di base. Ecco perché è molto utile estrarre le forme di base delle parole durante l'analisi del testo.
Lo stemming è un processo euristico che aiuta a estrarre le forme base delle parole tagliandone le estremità.
I diversi pacchetti per lo stemming forniti dal modulo NLTK sono i seguenti:
Pacchetto PorterStemmer
L'algoritmo di Porter viene utilizzato da questo pacchetto di stemming per estrarre la forma base delle parole. Con l'aiuto del seguente comando, possiamo importare questo pacchetto:
from nltk.stem.porter import PorterStemmer
Per esempio, ‘write’ sarebbe l'output della parola ‘writing’ dato come input a questo stemmer.
Pacchetto LancasterStemmer
L'algoritmo di Lancaster viene utilizzato da questo pacchetto di stemming per estrarre la forma base delle parole. Con l'aiuto del seguente comando, possiamo importare questo pacchetto:
from nltk.stem.lancaster import LancasterStemmer
Per esempio, ‘writ’ sarebbe l'output della parola ‘writing’ dato come input a questo stemmer.
Pacchetto SnowballStemmer
L'algoritmo di Snowball viene utilizzato da questo pacchetto di stemming per estrarre la forma base delle parole. Con l'aiuto del seguente comando, possiamo importare questo pacchetto:
from nltk.stem.snowball import SnowballStemmer
Per esempio, ‘write’ sarebbe l'output della parola ‘writing’ dato come input a questo stemmer.
Lemmatizzazione
È un altro modo per estrarre la forma base delle parole, che normalmente mira a rimuovere le terminazioni flessive utilizzando il vocabolario e l'analisi morfologica. Dopo la lemmatizzazione, la forma base di ogni parola è chiamata lemma.
Il modulo NLTK fornisce il seguente pacchetto per la lemmatizzazione:
Pacchetto WordNetLemmatizer
Questo pacchetto estrarrà la forma base della parola a seconda che sia usata come nome o come verbo. Il seguente comando può essere utilizzato per importare questo pacchetto:
from nltk.stem import WordNetLemmatizer
Conteggio dei tag POS: blocco
L'identificazione di parti del discorso (POS) e brevi frasi può essere eseguita con l'aiuto del chunking. È uno dei processi importanti nell'elaborazione del linguaggio naturale. Poiché siamo consapevoli del processo di tokenizzazione per la creazione di token, il chunking in realtà consiste nell'etichettatura di quei token. In altre parole, possiamo dire che possiamo ottenere la struttura della frase con l'aiuto del processo di chunking.
Esempio
Nell'esempio seguente, implementeremo il chunking della frase del nome, una categoria di chunking che troverà i pezzi della frase nominale nella frase, utilizzando il modulo NLTK Python.
Considera i seguenti passaggi per implementare la suddivisione in frasi nominali:
Step 1: Chunk grammar definition
In questo passaggio, dobbiamo definire la grammatica per il chunking. Consisterà nelle regole, che dobbiamo seguire.
Step 2: Chunk parser creation
Successivamente, dobbiamo creare un parser di blocchi. Analizzerebbe la grammatica e darebbe l'output.
Step 3: The Output
In questo passaggio, otterremo l'output in un formato ad albero.
Esecuzione dello script NLP
Inizia importando il pacchetto NLTK -
import nltk
Ora dobbiamo definire la frase.
Qui,
DT è il determinante
VBP è il verbo
JJ è l'aggettivo
IN è la preposizione
NN è il sostantivo
sentence = [("a", "DT"),("clever","JJ"),("fox","NN"),("was","VBP"),
("jumping","VBP"),("over","IN"),("the","DT"),("wall","NN")]
Successivamente, la grammatica dovrebbe essere fornita sotto forma di espressione regolare.
grammar = "NP:{<DT>?<JJ>*<NN>}"
Ora, dobbiamo definire un parser per analizzare la grammatica.
parser_chunking = nltk.RegexpParser(grammar)
Ora, il parser analizzerà la frase come segue:
parser_chunking.parse(sentence)
Successivamente, l'output sarà nella variabile come segue: -
Output = parser_chunking.parse(sentence)
Ora, il codice seguente ti aiuterà a disegnare il tuo output sotto forma di albero.
output.draw()