Site icon Antonio Lamorgese

Creare un linguaggio di programmazione con Python

Creazione di un interprete di comandi con Python

Creare un linguaggio di programmazione che possa eseguire azioni in base alla comprensione di frasi di testo immesse dall'utente con Python.
di Antonio Lamorgese

In questo articolo vedrai, come utilizzare la libreria NLTK di Python per creare un linguaggio di programmazione, o un interprete di comandi, che possa eseguire determinate azioni in base alla comprensione di frasi di testo immesse dall’utente. Per lo scopo di questo articolo ti parlerò di due librerie utilissime, tramite le quali, potrai realizzare un vero e proprio interprete dei comandi. Cioè, un linguaggio di programmazione tutto tuo.

Introduzione alla libreria NLTK

Natural Language Toolkit (NLTK) è una libreria Python, open-source, che fornisce delle classi per gestire tutte le funzionalità del linguaggio naturale, come l’analisi del testo, la segmentazione del testo, la classificazione dei testi, l’analisi del sentiment, l’analisi sintattica e la lemmatizzazione.

NLTK è utilizzata in molte applicazioni che lavorano con il linguaggio naturale, come i motori di ricerca, i sistemi di traduzione automatica, i chatbot e gli assistenti vocali.

Requisiti

Per creare il nostro interprete di comandi, avremo bisogno delle seguenti librerie Python:

1- nltk

2- speech_recognition

Per installare queste librerie, apri la finestra del prompt dei comandi, o il terminale, e digita il seguente comando e premi il tasto INVIO:

pip install nltk speech_recognition

Definizione dei comandi

La prima cosa che devi fare è, definire, una lista di comandi che il tuo interprete dovrà riconoscere ed eseguire. In questo esempio, consideriamo solo tre semplici comandi: “apri“, “chiudi” e “cerca“. Quindi, apri il tuo editor di testi preferito e inizia a digitare le seguenti istruzioni:

commands = ["apri", "chiudi", "cerca"]

Tokenizzazione del testo

Per comprendere la frase, comprensiva del comando immesso dall’utente, devi prima eseguire la tokenizzazione del testo. Per tokenizzazione di un testo si intende quel processo che porta ad estrapolare tutte le parole, dal testo immesso, per una loro successiva interpretazione ed esecuzione dell’azione ad esso associata.

Nella libreria NLTK esiste una classe appropriata che utilizzeremo. La classe in questione è “word_tokenize“. Sfruttando questa classe potremo suddividere la frase in parole. Cioè i Token. In questo caso, la funzione tokenize, restituisce un array di parole, o keywords del tuo interprete, contenute nel parametro text passato alla funzione stessa. Adesso, copia e incolla il codice di seguito riportato, subito dopo l’istruzione precedentemente inserita.

import nltk

def tokenize(text):
    return nltk.word_tokenize(text)

Comprensione della frase di comando

Ora, definiamo la funzione, in questo caso understand, che eseguirà la comprensione della frase di comando, immessa dall’utente:

def understand(text):
    words = tokenize(text)
    for command in commands:
        if command in words:
            return words
    return None

Questa funzione prende in input una frase di testo e restituisce il comando corrispondente se presente nella frase di testo dell’utente. Se la frase di testo non contiene un comando supportato, cioè presente nell’array commands, la funzione restituirà “None“. Ora, copia e incolla questo codice, all’interno del tuo script Python dove, mano-mano, il tuo interprete prenderà vita.


Leggi anche: Come creare un linguaggio di programmazione con Flex e Bison


Esecuzione dell’azione associata al comando

Una volta che compreso, e rilevato il comando dell’utente, dobbiamo eseguire l’azione corrispondente. In questo esempio, eseguiremo l’azione su un file di testo. Per mettere in atto tutto questo è stata definita la funzione execute.

def execute(command):
    if "apri" in command:
        # Apri il file
        pass
    elif "chiudi" in command:
        # Chiudi il file
        pass
    elif "cerca" in command:
        # Cerca nel file
        pass

In questa funzione, controlliamo il comando passato e eseguiamo l’azione corrispondente. In questo esempio, le azioni sono solo delle simulazioni e non vengono eseguite effettivamente operazioni sui file. Per questo motivo è stato utilizzato il comando pass di Python che non esegue alcuna azione. Pertanto la definizione dell’azione, da associare ad ogni comando, è delegata alle necessità dello sviluppatore. Pertanto, solo a scopo di prova, aggiungi anche questo codice al tuo interprete.

Interazione con l’utente

Infine, definirai la funzione principale del tuo interprete di comandi. Questa funzione inizia un ciclo infinito che ascolta i comandi dell’utente e li esegue. Per questo motivo è stata utilizzata la libreria speech_recognition. Questa libreria, attraverso il suo metodo Recognizer, resta in ascolto di un comando vocale impartito dall’utente.

import speech_recognition as sr

def main():
    r = sr.Recognizer()
    with sr.Microphone() as source:
        print("Parla adesso...")
        while True:
            audio = r.listen(source)
            try:
                text = r.recognize_google(audio, language='it-IT')
                command = understand(text)
                if command is not None:
                    execute(command)
                else:
                    print("Comando non supportato.")
            except sr.UnknownValueError:
                print("Non ho capito. Ripeti.")
            except sr.RequestError as e:
                print("Errore nella connessione a Internet.")

Il codice inserito all’interno della funzione main, non lascia dubbi. Infatti, la libreria “speech_recognition” intercetterà l’audio, proveniente dal microfono del computer dell’utente e lo convertirà in testo utilizzando il servizio di riconoscimento vocale di Google. Successivamente, la funzione richiamerà le funzioni “understand” ed “execute” per comprendere e eseguire il comando correttamente.

Conclusioni

In questo articolo, hai visto come creare un interprete di comandi utilizzando la libreria NLTK di Python. Ora, potrai modificare il codice proposto in questa guida, lasciando processare all’interprete, i comandi contenuti all’interno di un file di testo. Quindi, se crei il file “script.commands“, con questo contenuto

comandi contenuti in script.commands

le istruzioni della funzione main dovrebbero cambiare come di seguito suggerito:

def main():
    with open("script.commands", "r") as file:
    for text in file:
        try:
            command = understand(text)
            if command is not None:
                execute(command)
            else:
                print("Comando non supportato.")
        except:
            print("Syntax error...!")

Se poi hai la necessità di prelevare il contenuto di un eventuale parametro, ad esempio, un eventuale nome di file da associare al comando apri, puoi trasformare il contenuto della funzione execute, e del file script.commands, in questo modo:

comandi e loro parametri in script.commands
def execute(command):
    if "apri" in command:
        # Apri il file
        _parameter = command[-1]
        pass
    elif "chiudi" in command:
        # Chiudi il file
        _parameter = command[-1]
        pass
    elif "cerca" in command:
        # Cerca nel file
        pass

Leggi anche: Navigare anonimamente in Internet con una VPN gratuita


Domande frequenti

Che cos’è NLTK e come può essere utilizzato per creare un linguaggio di programmazione con Python?

NLTK (Natural Language Toolkit) è una libreria Python utilizzata per il processing del linguaggio naturale. Può essere utilizzata per creare un linguaggio di programmazione con Python che supporti la manipolazione del testo, la classificazione del testo e l’analisi semantica.

Quali sono gli strumenti della libreria NLTK utili per la creazione di linguaggi di programmazione personalizzati?

NLTK offre una vasta gamma di strumenti utili per la creazione di linguaggi di programmazione personalizzati, tra cui:
– Tokenizzazione: per dividere il testo in parole o frasi significative.
POS tagging: per etichettare le parole con parti del discorso come verbi, sostantivi, aggettivi, ecc.
– Chunking: per identificare frasi nominali o verbali all’interno del testo.
– Parsing: per analizzare la struttura sintattica del testo e generare un albero di sintassi astratta.
– Named Entity Recognition (NER): per identificare le entità (ad esempio, nomi di persone, luoghi o organizzazioni) all’interno del testo.

Ci sono esempi di linguaggi di programmazione creati con Python e NLTK?

Sì, ci sono diversi esempi di linguaggi di programmazione creati con Python e NLTK. Ad esempio, PyAST (Python Abstract Syntax Trees) è un linguaggio di programmazione che utilizza NLTK per la creazione di alberi di sintassi astratta e la generazione di codice Python. Un altro esempio è NLTK-Lite, un linguaggio di programmazione semplificato basato su Python e NLTK, che è stato creato per fornire una sintassi più semplice e facile da usare per i principianti di programmazione. Infine, NLTK-Python è un linguaggio di programmazione progettato per l’elaborazione del linguaggio naturale, che utilizza NLTK per fornire una vasta gamma di funzionalità di elaborazione del testo e di analisi semantica.

Exit mobile version