-->

Intelligenza Artificiale

A un certo punto non fu più la biologia a dominare il destino dell'uomo, ma il prodotto del suo cervello: la cultura.
Cosicché: "Le uniche leggi della materia sono quelle che la nostra mente deve architettare e le uniche leggi della mente sono architettate per essa dalla materia".
JAMES CLERK MAXWELL

Pre-elaborazione


Migliorare le prestazioni del filtro anti-spam. Pre-elaborare il testo prima di addestrare il modello.

Pre-elaborare il testo prima di addestrare il modello


Per migliorare le prestazioni del filtro anti-spam, è essenziale pre-elaborare il testo prima di addestrare il modello.
La pre-elaborazione può includere:
1. Rimozione di stopword: Parole comuni come "il", "e", "di", che non aggiungono significato significativo al modello.
2. Rimozione di caratteri speciali e punteggiatura.
3. Conversione del testo in lowercase: Per rendere il modello insensibile al maiuscolo/minuscolo.

Ecco il codice aggiornato con la pre-elaborazione del testo:

### **Codice Python con Pre-elaborazione del Testo** #### Importare e configurare le librerie necessarie Assicurati di avere le librerie aggiornate e installate:

pip install pandas scikit-learn nltk

Script completo



import pandas as pd
import re
from nltk.corpus import stopwords
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score, classification_report

# Scaricare stopwords di NLTK
import nltk
nltk.download('stopwords')

# Pre-elaborazione del testo
def preprocess_text(text):
    # Converti in lowercase
    text = text.lower()
    # Rimuovi caratteri speciali e numeri
    text = re.sub(r'[^a-z\s]', '', text)
    # Tokenizza e rimuovi stopword
    stop_words = set(stopwords.words("english"))
    text = " ".join(word for word in text.split() if word not in stop_words)
    return text

# Caricare il dataset
dataset = pd.read_csv("spam.csv", encoding="latin-1")

# Rinominare le colonne per semplicità
dataset = dataset.rename(columns={"v1": "label", "v2": "text"})

# Tenere solo le colonne rilevanti
dataset = dataset[["label", "text"]]

# Convertire le etichette in valori numerici
dataset["label"] = dataset["label"].map({"ham": 0, "spam": 1})

# Applicare la pre-elaborazione del testo
dataset["text"] = dataset["text"].apply(preprocess_text)

# Dividere il dataset in caratteristiche (X) e target (y)
X = dataset["text"]
y = dataset["label"]

# Convertire il testo in una rappresentazione numerica
vectorizer = CountVectorizer()
X_vectorized = vectorizer.fit_transform(X)

# Dividere i dati in training e test set
X_train, X_test, y_train, y_test = train_test_split(X_vectorized, y, test_size=0.2, random_state=42)

# Inizializzare e addestrare il modello
model = MultinomialNB()
model.fit(X_train, y_train)

# Valutare il modello sui dati di test
y_pred = model.predict(X_test)
print("Accuracy:", accuracy_score(y_test, y_pred))
print("Report di classificazione:\n", classification_report(y_test, y_pred))

# Testare nuovi messaggi
new_emails = [
    "Congratulations! You've won a $1,000 Walmart gift card. Go to http://spam.com to claim now.",
    "Hey, are we still meeting for lunch today?",
]

# Pre-elaborare i nuovi messaggi
new_emails_processed = [preprocess_text(email) for email in new_emails]

# Trasformare i nuovi messaggi utilizzando il vettorizzatore addestrato
new_features = vectorizer.transform(new_emails_processed)

# Predire se i messaggi sono spam o ham
predictions = model.predict(new_features)

# Mostrare i risultati
for email, label in zip(new_emails, predictions):
    print(f"Messaggio: {email}")
    print(f"Classificazione: {'Spam' if label == 1 else 'Ham'}\n")