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()