{"id":25556488,"url":"https://github.com/virginioc/software-anti-spam","last_synced_at":"2026-02-16T15:35:47.708Z","repository":{"id":318429812,"uuid":"936101739","full_name":"VirginioC/software-anti-spam","owner":"VirginioC","description":"Modello di Machine Learning sviluppato in Python con scikit-learn per la classificazione delle email SPAM con successiva analisi dei topic con LDA e riconoscimento delle organizzazioni tramite NER.","archived":false,"fork":false,"pushed_at":"2025-02-23T12:11:58.000Z","size":2713,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-07T06:56:28.891Z","etag":null,"topics":["binary-classification","ner","nlp","scikitlearn-machine-learning","topic-modeling"],"latest_commit_sha":null,"homepage":"","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/VirginioC.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-02-20T14:31:26.000Z","updated_at":"2025-02-23T14:24:17.000Z","dependencies_parsed_at":null,"dependency_job_id":"13b6ea39-3e7b-424f-bae0-6c461acd509b","html_url":"https://github.com/VirginioC/software-anti-spam","commit_stats":null,"previous_names":["virginioc/software-anti-spam"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/VirginioC/software-anti-spam","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VirginioC%2Fsoftware-anti-spam","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VirginioC%2Fsoftware-anti-spam/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VirginioC%2Fsoftware-anti-spam/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VirginioC%2Fsoftware-anti-spam/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/VirginioC","download_url":"https://codeload.github.com/VirginioC/software-anti-spam/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VirginioC%2Fsoftware-anti-spam/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29511684,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-16T09:05:14.864Z","status":"ssl_error","status_checked_at":"2026-02-16T08:55:59.364Z","response_time":115,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["binary-classification","ner","nlp","scikitlearn-machine-learning","topic-modeling"],"created_at":"2025-02-20T14:38:16.031Z","updated_at":"2026-02-16T15:35:47.692Z","avatar_url":"https://github.com/VirginioC.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Analisi e classificazione delle email per la rilevazione di SPAM\n\n## Descrizione e obiettivi del progetto\nQuesto progetto, realizzato durante il Master in Data Science di ProfessionAI, si propone di sviluppare col linguaggio **Python** su ambiente **Google Colab**, una libreria software per l'analisi e la classificazione delle email, con l'obiettivo di identificare e comprendere meglio le email di tipo spam. Attraverso tecniche di NLP e Machine Learning, il software permette di:\n\n1. **Addestrare un classificatore** per identificare le email SPAM.\n2. **Individuare i topic principali** tra le email classificate come SPAM.\n3. **Calcolare la distanza semantica** tra i topics ottenuti per valutare l'eterogeneità dei contenuti delle email SPAM.\n4. **Estrarre dalle email NON SPAM** le informazioni sulle Organizzazioni menzionate.\n\nLe informazioni sulle tendenze, i contenuti e i comportamenti delle email SPAM  possono essere utilizzate per migliorare la sicurezza delle comunicazioni aziendali e perfezionare i filtri anti-spam.\n\n## Struttura del progetto\nIl progetto è organizzato nelle seguenti fasi:\n\n1. **Analisi descrittiva**:\n   - Studio del dataset **`spam_dataset.csv`** (incluso nel repository), con colonne `text` (email) e `label_num` (0 = ham, 1 = spam).\n   - Identificazione di consistente **sbilanciamento del dataset** (71 % ham).\n\n2. **Preprocessing dei dati**:\n   - Pulizia del testo: conversione in lowercase, rimozione di punteggiatura e numeri, rimozione stopwords, lemmatizzazione e rimozione spazi bianchi extra.\n   - Creazione dell'array contenente i messaggi testuali \"puliti\" e dell'array con la variabile target.\n\n3. **Classificazione**:\n   - Per effettuare la **classificazione binaria** viene costruita una pipeline contenente vectorizer **TF-IDF** e modello ML, addestrata e valutata tramite **K-Fold Cross-Validation** (5 fold) con metriche: **accuracy**, **precision**, **recall** e **f1-score**.\n   - Modelli valutati:\n      - **Logistic Regression**: utilizzo del parametro `class_weight=\"balanced\"`\n      - **Complement Naive Bayes**\n      - **Support Vector Machines**: utilizzo del parametro `class_weight=\"balanced\"`\n      - **Random Forest**: utilizzo del parametro `class_weight=\"balanced\"`\n\n   - Il modello migliore è il **SVM**, vengono quindi ricavati i migliori iperparametri ottenendo metriche medie quasi perfette sul test set:\n     \n     ```python\n      Testing Scores:\n      ╒══════════╤════════════╤═════════════╤══════════╤══════╕\n      │ Model    │   accuracy │   precision │   recall │   f1 │\n      ╞══════════╪════════════╪═════════════╪══════════╪══════╡\n      │ Best SVM │       0.99 │        0.97 │     0.99 │ 0.98 │\n      ╘══════════╧════════════╧═════════════╧══════════╧══════╛\n     ```\n4. **Topic Modeling**:\n   - Tokenizzazione di ciascuna email spam escludendo stopword, tag HTML, proprietà e attributi CSS, URL ed unità di misura.\n   - Creazione del dizionario dei token (token, id) e conversione dei token nel formato **bag of Words** (id, count).\n   - **Latent Dirichlet Allocation (LDA)** con valutazione di coerenza, identificando **5 topic principali**:\n     \n      - **Topic 0 (Farmaci)**: sfrutta il desiderio di privacy e risparmio per medicinali sensibili.\n      - **Topic 1 (Commerciale)**: usa l'urgenza e le offerte limitate come leva psicologica.\n      - **Topic 2 (Personale)**: fa leva sulle emozioni con riferimenti familiari e finanziari.\n      - **Topic 3 (Software)**: sfrutta il desiderio di accedere a software costosi a prezzi ridotti.\n      - **Topic 4 (Finanza)**: utilizza un linguaggio professionale per apparire legittimo.\n   \n   - Calcolo della **distance matrix**: le distanze semantiche hanno valori abbastanza elevati, indicando l'eterogeneità dei topic.\n   - Analisi della distribuzione dei topic: il topic 0 è il più frequente (42.83 %).\n  \n5. **NER - Organizzazioni**\n   - Task di **Named Entity Recognition (NER)** per estrarre tutte le organizzazioni presenti nelle email ham tramite modello **en_core_web_lg** di `spacy`.\n   - Identificazione delle 10 organizzazioni più frequenti.\n   - La **Enron Corporation** risulta essere, in maniera netta, l'organizzazione più menzionata.\n  \n## Tecnologie utilizzate\n- **Linguaggio**: Python\n- **Ambiente di sviluppo**: Google Colab (Jupyter Notebook)\n- **Librerie**:\n   - `pandas`\n   - `numpy`\n   - `matplotlib`\n   - `seaborn`\n   - `scikit-learn`\n   - `nltk`\n   - `tabulate`\n   - `gensim`\n   - `spacy`\n\n## Utilizzo  \n1. Scarica o clona il repository.\n2. Apri il file `software_anti-spam.ipynb` su Google Colab o altri ambienti compatibili con Jupyter Notebook.\n3. Esegui il codice passo-passo per ottenere i risultati.\n4. Il dataset utilizzato (`spam_dataset.csv`) è incluso nel repository.\n\n## Autore\n[Virginio Cocciaglia](https://github.com/VirginioC)\n\n---\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvirginioc%2Fsoftware-anti-spam","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvirginioc%2Fsoftware-anti-spam","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvirginioc%2Fsoftware-anti-spam/lists"}