Faffio commited on
Commit
2539bae
·
1 Parent(s): aef5ea1

Creazione Appunti del progetto

Browse files
.github/workflows/mlops_pipeline.yaml CHANGED
@@ -66,11 +66,11 @@ jobs:
66
  # 2. Build e Push vero e proprio
67
  - name: Build and Push
68
  run: |
69
- # Usa la variabile ${{ secrets.DOCKER_USERNAME }}
70
  IMAGE_TAG=${{ secrets.DOCKER_USERNAME }}/reputation-monitor:latest
71
 
72
  echo "Building image: $IMAGE_TAG"
73
- docker build -t $IMAGE_TAG .
74
 
75
  echo "Pushing image to Docker Hub..."
76
  docker push $IMAGE_TAG
 
66
  # 2. Build e Push vero e proprio
67
  - name: Build and Push
68
  run: |
69
+ # Usa la variabile ${{ secrets.DOCKER_USERNAME }} creata nel repository
70
  IMAGE_TAG=${{ secrets.DOCKER_USERNAME }}/reputation-monitor:latest
71
 
72
  echo "Building image: $IMAGE_TAG"
73
+ docker build -t $IMAGE_TAG . # Il punto finale indica di usare il Dockerfile nella root della repo, cioè il punto sta a significare "cartella corrente" e va a cercare in automatico il Dockerfile
74
 
75
  echo "Pushing image to Docker Hub..."
76
  docker push $IMAGE_TAG
Appunti_Progetto.doc ADDED
@@ -0,0 +1,197 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 📚 Parte 1: Anatomia del Progetto (File Structure)
2
+
3
+ ROOT_PROJECT/
4
+
5
+ ├── .github/
6
+ │ └── workflows/
7
+ │ └── mlops_pipeline.yaml # 🤖 Configurazione CI/CD (GitHub Actions)
8
+
9
+ ├── app/ # 🧠 BACKEND (Logica e API)
10
+ │ ├── api/
11
+ │ │ ├── __init__.py
12
+ │ │ └── main.py # Endpoint FastAPI (/analyze, /predict)
13
+ │ ├── model/
14
+ │ │ ├── __init__.py
15
+ │ │ └── loader.py # Caricamento Modello RoBERTa (Singleton)
16
+ │ └── services/
17
+ │ ├── __init__.py
18
+ │ └── news_client.py # Scraper Google News
19
+
20
+ ├── data/
21
+ │ └── new_data.csv # 💾 Dati grezzi per il Retraining (Vuoto)
22
+
23
+ ├── src/
24
+ │ └── train.py # 🎓 Script di Retraining (Simulazione)
25
+
26
+ ├── streamlit_app/ # 🎨 FRONTEND
27
+ │ └── app.py # Dashboard Interattiva
28
+
29
+ ├── tests/ # 🧪 QUALITY ASSURANCE
30
+ │ └── test_api.py # Test automatici (Pytest)
31
+
32
+ ├── Dockerfile # 🐳 Istruzioni per costruire l'immagine
33
+ ├── entrypoint.sh # 🚦 Script di avvio (FastAPI + Streamlit)
34
+ ├── requirements.txt # 📦 Lista librerie (dipendenze)
35
+ ├── reputation_logs.csv # 📝 Log monitoraggio (generato a runtime)
36
+ └── README.md # 📄 Documentazione pubblica
37
+
38
+ 🛠️ 1. MLOps & Automazione (Root & Github)
39
+ Questi file trasformano il codice in un prodotto "vivo" e automatizzato.
40
+
41
+ .github/workflows/mlops_pipeline.yaml: È il "Direttore d'Orchestra". È un file di configurazione per GitHub Actions. Ogni volta che fai git push, questo file dice a GitHub di accendere un computer, scaricare il tuo codice, lanciare i test, provare ad addestrare il modello, costruire il container Docker e spedirlo su Hugging Face.
42
+
43
+ Dockerfile: È la "Ricetta". Dice a Docker come costruire il computer virtuale (Container). Specifica: "Usa Python 3.9, installa queste librerie, copia i miei file, dai i permessi all'utente".
44
+
45
+ entrypoint.sh: È il "Semaforo". Docker di solito lancia un solo programma. Dato che noi vogliamo sia l'API che Streamlit, questo script Bash li avvia entrambi: prima FastAPI in background (&), poi Streamlit in primo piano.
46
+
47
+ requirements.txt: La "Lista della Spesa". Elenca tutte le librerie necessarie (fastapi, streamlit, torch, GoogleNews, etc.) per far girare il progetto.
48
+
49
+ 🧠 2. Il Backend (Cartella app/)
50
+ Il cervello del sistema che fa i calcoli.
51
+
52
+ app/api/main.py: Il "Centralino". Crea l'API con FastAPI. Definisce gli endpoint (es. /analyze, /health). Riceve le richieste dal frontend, coordina lo scraper e il modello, salva i log e risponde con i dati JSON.
53
+
54
+ app/services/news_client.py: L' "Investigatore". Contiene la classe che usa GoogleNews. Cerca le notizie, gestisce la paginazione, prova prima in inglese e poi fa fallback in italiano se non trova nulla.
55
+
56
+ app/model/loader.py: Il "Magazziniere". Si occupa di caricare il pesante modello RoBERTa in memoria una volta sola all'avvio (Singleton Pattern), evitando che il server esploda ricaricandolo a ogni richiesta.
57
+
58
+ 🎨 3. Il Frontend (Cartella streamlit_app/)
59
+ La faccia che vede l'utente.
60
+
61
+ streamlit_app/app.py: L' "Interfaccia". È il sito web. Disegna i grafici, le barre di input e le tabelle. Non fa calcoli pesanti: prende l'input dell'utente, lo manda all'API (requests.post) e visualizza la risposta.
62
+
63
+ 🎓 4. Continuous Training (Cartella src/ & data/)
64
+ La parte che gestisce l'evoluzione del modello.
65
+
66
+ src/train.py: Il "Simulatore". È lo script che verrebbe lanciato per ri-addestrare il modello. Controlla se ci sono nuovi dati e simula il processo di fine-tuning (poiché su GitHub non abbiamo GPU).
67
+
68
+ data/new_data.csv: Il "Carburante". È il file (attualmente vuoto) dove dovrebbero finire i dati etichettati per il retraining.
69
+
70
+ 🧪 5. Testing & Logs
71
+ tests/: Contiene i test automatici (test_api.py) che verificano se l'API risponde correttamente.
72
+
73
+ reputation_logs.csv: Il "Diario di Bordo". Viene creato automaticamente dall'API. Ogni volta che qualcuno fa una previsione, viene scritta una riga qui. Streamlit legge questo file per la tab "Monitoring".
74
+
75
+ 🔄 Parte 2: I Flussi Logici (Architettura)
76
+
77
+ Qui disegniamo come si muovono i dati e le decisioni.
78
+
79
+
80
+ A. Architettura del Container (Come girano insieme)
81
+
82
+
83
+ Questo schema mostra come abbiamo risolto il problema di avere due programmi (Backend e Frontend) nello stesso spazio.
84
+
85
+ Snippet di codice
86
+
87
+ graph TD
88
+ User((Utente su Internet))
89
+
90
+ subgraph "Docker Container (Hugging Face Space)"
91
+ direction TB
92
+ Entry[entrypoint.sh]
93
+
94
+ subgraph "Processo 1 (Backend)"
95
+ FastAPI[FastAPI Server :8000]
96
+ Model[RoBERTa AI]
97
+ Scraper[Google News Scraper]
98
+ end
99
+
100
+ subgraph "Processo 2 (Frontend)"
101
+ Streamlit[Streamlit App :7860]
102
+ end
103
+
104
+ Entry -->|Avvia in background| FastAPI
105
+ Entry -->|Avvia in primo piano| Streamlit
106
+
107
+ Streamlit <-->|HTTP Request (localhost)| FastAPI
108
+ FastAPI <--> Model
109
+ FastAPI --> Scraper
110
+ end
111
+
112
+ User <-->|Vede solo porta 7860| Streamlit
113
+ Scraper <-->|Cerca Info| Google(Google Web)
114
+
115
+ Come fanno a convivere due programmi nello stesso container su Hugging Face?
116
+
117
+ **Spiegazione del processo**
118
+
119
+ - **Panoramica:** L'app è composta da due processi che convivono nello stesso container: un backend che espone un'API per l'analisi dei testi e un frontend Streamlit che fornisce l'interfaccia utente. Lo scopo è permettere allo user-facing frontend di richiedere analisi al backend in locale, mantenendo il modello in memoria per efficienza.
120
+
121
+ - **Esecuzione nel container:** Al container viene eseguito uno script di avvio che:
122
+ - avvia il server API in background;
123
+ - avvia l'app Streamlit in primo piano;
124
+ - mantiene Streamlit come processo principale esposto all'utente (porta pubblica), mentre l'API è raggiungibile in locale (porta interna).
125
+
126
+ - **Flusso dell'API (/analyze):**
127
+ - **Input:** richiesta JSON contenente la query e il numero massimo di risultati.
128
+ - **Scraping:** il servizio ricerca notizie (prima in inglese, poi fallback in italiano), raccoglie titoli e descrizioni e pre-processa il testo.
129
+ - **Inference:** ogni testo viene passato al modello (caricato una sola volta all'avvio) per ottenere la predizione di sentimento e la probabilità.
130
+ - **Logging:** ogni previsione viene registrata in un log (CSV) con timestamp, input e risultato per monitoring e retraining.
131
+ - **Output:** la risposta JSON contiene le statistiche aggregate (conteggi, percentuali) e la lista di risultati analizzati.
132
+
133
+ - **Retraining continuo (simulato):**
134
+ - Periodicamente o a seguito di nuovi dati, lo script di retraining verifica la presenza di dati etichettati.
135
+ - Se non ci sono dati nuovi, il retraining viene saltato senza interrompere la pipeline.
136
+ - Se ci sono dati, viene eseguita una simulazione di fine-tuning e i risultati vengono testati automaticamente.
137
+
138
+ - **Pipeline CI/CD (sintesi):**
139
+ - **Trigger:** un push sul repository avvia la pipeline.
140
+ - **Job 1 — Qualità & Training:** installa dipendenze, lancia la simulazione di retraining (se necessario) e poi esegue i test automatici. Se i test falliscono, la pipeline si blocca.
141
+ - **Job 2 — Packaging:** solo se i test passano, viene costruita l'immagine Docker e (opzionalmente) pubblicata su un registry.
142
+ - **Job 3 — Deploy:** se il packaging ha successo, l'immagine viene distribuita alla piattaforma di hosting (es. Space). Al termine l'app aggiornata è disponibile online.
143
+ - **Precisione operativa:** il retraining è condizionale (salta se mancano dati); l'esecuzione dei test è il gate principale che previene il deploy di codice rotto.
144
+
145
+
146
+ B. Il Flusso dell'API (/analyze)
147
+
148
+
149
+
150
+ Cosa succede esattamente quando l'utente clicca "Analyze"?
151
+
152
+ 1. INPUT: Arriva richiesta JSON {"query": "Tesla", "limit": 5}.
153
+
154
+ 2. SCRAPING:
155
+
156
+ Cerco "Tesla" su Google News (EN).
157
+
158
+ Scarico Titoli + Descrizioni.
159
+
160
+ LOOP (Ciclo For): Per ogni notizia trovata:
161
+
162
+ Pulisco il testo.
163
+
164
+ Inference: Passo il testo a RoBERTa -> Ottengo "Positive" (0.98).
165
+
166
+ Logging: Scrivo su reputation_logs.csv.
167
+
168
+ Aggiorno i contatori (es. Positive +1).
169
+
170
+ 3. OUTPUT: Restituisco JSON con statistiche e lista risultati.
171
+
172
+ C. La Pipeline CI/CD (Il file YAML)
173
+ Cosa succede su GitHub quando fai git push? È una catena di montaggio.
174
+
175
+ Snippet di codice
176
+
177
+ Push[Git Push] -->|Trigger| GitHubActions Questo è il trigger, quando fascio push sul ramo main.
178
+
179
+ subgraph "Job 1: Quality & Training" Job centrale per il controllo e retraining del modello (se non passa i test questo viene bloccato il commit)
180
+ Install[Install Dependencies] --> Retrain[Simulazione Retraining] Prima di tutto installa le dipendenze, poi fa il retrain
181
+ Retrain --> Test[Run Pytest] Fatto il retrain, eseguiamo il test con pytest (Se fallisce qui, BLOCCA TUTTO 🛑).
182
+ end
183
+
184
+ subgraph "Job 2: Packaging"
185
+ Test -->|Se Verde| Build[Docker Build]
186
+ Build --> PushHub[Push to DockerHub]
187
+ end
188
+
189
+ subgraph "Job 3: Deploy"
190
+ PushHub -->|Se Verde| Deploy[Deploy to Hugging Face]
191
+ end
192
+
193
+ Deploy -->|Fine| LiveApp((App Aggiornata))
194
+
195
+ Punto Critico: Se Run Pytest fallisce (X Rossa), il Docker Build non parte nemmeno. Questo protegge la produzione da codice rotto.
196
+
197
+ Punto Intelligente: Il retraining (Job 1) controlla se new_data.csv è vuoto. Se è vuoto, dice "Skipping" e prosegue senza rompere nulla.
reputation_logs.csv CHANGED
@@ -1,62 +1 @@
1
  timestamp,query,text,sentiment,confidence
2
- 2025-12-11 23:33:12.555398,Elettromedia Spa,"Kia EV6 Owner Discovers Factory Wiring Error in Subwoofer, Fixes Weak Sound in Minutes. The EV6's weak sound system has frustrated owners, but reversing a few wires running to the Meridian subwoofer is all it takes to boost bass dramatically.",negative,0.6096141934394836
3
- 2025-12-11 23:33:12.740590,Elettromedia Spa,"Automotive Audio Speakers Market to Grow by USD 9.02 Billion (2024-2028) with Cost-Effective Aftermarket Speakers Boosting the Market, Report on Market Evolution Powered by AI - Technavio. Report on how AI is driving market transformation - The global automotive audio speakers market size is estimated to grow by USD 9.02 billion from 2024-2028...",positive,0.6643907427787781
4
- 2025-12-11 23:33:12.872823,Elettromedia Spa,"Lavoce Italiana Comes to North America. Italian transducer company Lavoce Italiana has established its first U.S. division, Elettromedia Corporation, based in Old Hickory, TN.",neutral,0.7901442050933838
5
- 2025-12-11 23:33:13.005912,Elettromedia Spa,"Elettromedia Training at KnowledgeFest. Press Release: Irvine, CA – Elettromedia USA is hosting several training sessions at KnowledgeFest Las Vegas February 3rd-5th.",neutral,0.8425894975662231
6
- 2025-12-11 23:40:24.248518,Ferrari,Ferrari crash: Luxury car had a history of speeding. Kolkata: Kolkata Police will seek help of engineers from Ferrari to study the reasons that led to one of their cars getting involved in an accident on.,negative,0.62410968542099
7
- 2025-12-11 23:40:24.383238,Ferrari,"Adrian Newey or Max Verstappen: what would Ferrari’s former key figures choose?. Maurizio Arrivabene and Luigi Mazzola reveal whether Ferrari should choose Adrian Newey or Max Verstappen, highlighting why technical excellence is more...",neutral,0.9174836277961731
8
- 2025-12-11 23:40:24.498802,Ferrari,60 Years Of The Dino: How Ferrari Turned A “Junior” Into A Legend. Ferrari's new feature on the Dino's 60th anniversary reveals how its first mid-engined V6 road car was hand-shaped into an icon that is now a blue-chip...,neutral,0.566238284111023
9
- 2025-12-11 23:40:24.606439,Ferrari,Former Ferrari boss weighs in on departing engine specialists: what Maranello should worry about. Maurizio Arrivabene discusses the departure of key Ferrari engine specialists and the potential impact on the team's 2026 F1 season as rivals prepare for...,neutral,0.9085403680801392
10
- 2025-12-11 23:40:24.708324,Ferrari,"Lewis Hamilton warned his F1 legacy is at risk after disastrous first season with Ferrari. Lewis Hamilton faces growing concerns about damaging his Formula 1 legacy after a difficult first season with Ferrari, as his ongoing struggles and lack of...",negative,0.7664820551872253
11
- 2025-12-11 23:40:24.824364,Ferrari,"While confident he made the most of what Ferrari gave him this year, Leclerc hopes for a lot more from 2026. After Ferrari's promising form of 2024 faded in 2025, Charles Leclerc is staying cautious about the team's chances of a quick rebound under the incoming...",positive,0.6923292875289917
12
- 2025-12-11 23:40:24.913603,Ferrari,"Bookies open betting on Lewis Hamilton retiring after nightmare season at Ferrari. When Lewis Hamilton announced he was joining Ferrari for the 2025 season, everything seemed to be lined up for a title charge.",neutral,0.7515650391578674
13
- 2025-12-11 23:40:25.015110,Ferrari,"Representing Ferrari, Alba Larsen is living a ""dream come true"".. Every racing driver dreams of racing in the famous Ferrari red, and at just 16 years old, Alba Larsen is about to achieve this feat.",positive,0.9591248035430908
14
- 2025-12-11 23:40:25.173862,Ferrari,"Ferrari: Fred Vasseur cautions Lewis Hamilton and Charles Leclerc about a key pitfall ahead of 2026 F1 campaign. Ferrari enter the 2026 Formula 1 season under huge pressure, with Lewis Hamilton and Charles Leclerc urged to push the team relentlessly rather than offer...",neutral,0.897258996963501
15
- 2025-12-11 23:40:25.289483,Ferrari,"""Lewis Hamilton isn't finished"": Former Ferrari boss tries to knock 'common sense' into the team's driver decisions. Former Ferrari F1 team principal Maurizio Arrivabene has lent support to Lewis Hamilton after his nightmare first season with the Scuderia.",neutral,0.681147038936615
16
- 2025-12-11 23:40:25.392379,Ferrari,"Lewis Hamilton’s dire first Ferrari season keeps drawing the same comparison to Michael Schumacher. Lewis Hamilton joining Ferrari sparked pandemonium in Maranello ahead of the 2025 F1 season, but bitter disappointment and even anger quickly replaced any...",negative,0.7126820683479309
17
- 2025-12-11 23:40:25.496356,Ferrari,Lewis Hamilton urged to study Max Verstappen’s radio craft to help drive Ferrari forward. Lewis Hamilton is urged to adopt Max Verstappen's motivational style as Ferrari seek stronger leadership after a difficult 2025 F1 season.,neutral,0.6595488786697388
18
- 2025-12-11 23:40:25.642155,Ferrari,Recon 2022 Ferrari Roma 3.9 Coupe SURROUND VIEW / CARBON / JBL / ELECTRIC SEAT / INCOMING STOCK. 2022 Ferrari Roma 3.9 Coupe SURROUND VIEW / CARBON / JBL / ELECTRIC SEAT / INCOMING STOCK. Find all the best used / second hand and new cars from trusted...,neutral,0.69819575548172
19
- 2025-12-11 23:40:25.788479,Ferrari,"Ghost in white: a nearly-new, 986 HP Ferrari SF90 Stradale hits the market. This impeccably specced SF90 Stradale comes with a clean Carfax report and is now ready to find a new home. Ferrari SF90 Stradale.",positive,0.8663274645805359
20
- 2025-12-11 23:40:25.889634,Ferrari,Lewis Hamilton gets response from Ferrari after joint complaints with Charles Leclerc. Lewis Hamilton and Charles Leclerc spent the Formula 1 season complaining about how uncompetitive their Ferrari cars were compared to their championship...,neutral,0.6231443285942078
21
- 2025-12-11 23:40:26.000135,Ferrari,"214-Mile 2025 Ferrari 12Cilindri For Sale. Grab the keys to Ferrari's latest and greatest supercar! While most Ferraris have historically been recognized for their mid-engine configurations, Enzo.",positive,0.797694981098175
22
- 2025-12-11 23:40:26.115016,Ferrari,"Dubai Police Force Commits Crime Against Sanity With Mansory Purosangue. Dubai's police force is all about putting on a show. Its fleet is legendary for its collection of supercars, hypercars, and even four-rotor flying...",neutral,0.5327199101448059
23
- 2025-12-11 23:40:26.236435,Ferrari,"Carlos Sainz silences Williams ‘doubts’ after Ferrari departure. Carlos Sainz admitted ""there were doubts"" from outside about his move to Williams in 2025, but he believes the team is on an upward trend.",neutral,0.8175623416900635
24
- 2025-12-11 23:40:26.336150,Ferrari,"Europe cracks down on rule-breaking Ferrari, Rolls-Royce owners. Authorities in London and Vienna recently took these rich dweebs down a peg and let them know they can't just do whatever they want.",negative,0.7607141733169556
25
- 2025-12-11 23:40:26.446514,Ferrari,Lewis Hamilton's Dad may have just set up Ferrari star's F1 retirement. Seven-time F1 world champion Lewis Hamilton may just have been given a retirement plan from his father Anthony Hamilton.,neutral,0.5159865617752075
26
- 2025-12-11 23:40:44.616365,Elettromedia,Elettromedia USA Names New President. Rob Wempe to President of Mobile Audio for Advanced Marketing companies. Wempe was previously VP of Sales & Marketing at the company for fifteen years.,neutral,0.7228948473930359
27
- 2025-12-11 23:40:44.727524,Elettromedia,"Elettromedia USA Parent Buys Biketronics. Advanced Marketing, the parent company of Elettromedia USA, American Hard Bag and Velocity brands is proud to announce the acquisition of Biketronics located...",positive,0.8176090717315674
28
- 2025-12-11 23:40:44.818475,Elettromedia,"Elettromedia Elevated in MESA Role. Elettromedia, takes an elevated position as a vendor for the car audio Mobile Electronics Specialists of America buying group.",positive,0.6863150596618652
29
- 2025-12-11 23:40:44.936782,Elettromedia,"Elettromedia Adds Automated DSP Tuning. Elettromedia Adds Automated DSP Tuning ... Elettromedia, maker of Hertz and Audison, is offering the next generation of its tuning software, bit Drive 2.0. It...",neutral,0.5924315452575684
30
- 2025-12-11 23:40:45.039521,Elettromedia,"Elettromedia USA Owner Buys This Company. Elettromedia USA Owner Buys This Company ... Advanced Marketing, the US Distributor of Hertz, Audison and other brands, announced it is taking over the operations...",neutral,0.7651730179786682
31
- 2025-12-11 23:40:45.137103,Elettromedia,"Former JL Exec Joins Hertz/Audison Marine. Elettromedia announced the appointment of Brian Power as Vice President of its Marine Division, which includes both the Hertz and Audison marine audio...",neutral,0.8856467008590698
32
- 2025-12-11 23:40:45.252198,Elettromedia,"Elettromedia Names New Rep. Press Release (UNEDITED): IRVINE, CA– Elettromedia-USA, manufacturer of premium electronics and speaker systems for the automotive, marine, and motorsports...",neutral,0.9273980855941772
33
- 2025-12-11 23:40:45.397305,Elettromedia,"Lavoce Italiana Comes to North America. Italian transducer company Lavoce Italiana has established its first U.S. division, Elettromedia Corporation, based in Old Hickory, TN.",neutral,0.7901442050933838
34
- 2025-12-11 23:40:45.510152,Elettromedia,Audison Announces Wide Availability of Forza Amps. Press Release (UNEDITED): LAS VEGAS– Audison announces wide availability for award-winning Forza DSP amplifiers. “After a very successful launch of AF Forza...,positive,0.5248441100120544
35
- 2025-12-11 23:40:45.602417,Elettromedia,"Elettromedia Training at KnowledgeFest. Press Release: Irvine, CA – Elettromedia USA is hosting several training sessions at KnowledgeFest Las Vegas February 3rd-5th.",neutral,0.8425894975662231
36
- 2025-12-11 23:40:45.700735,Elettromedia,Elettromedia Names Reps of the Year 2021. Press Release: Elettromedia is proud to announce the following reps and rep firms that were named Elettromedia Reps of the Year for 2021.,positive,0.9222844839096069
37
- 2025-12-11 23:40:45.802643,Elettromedia,"Elettromedia Hosts Reps in Italy. Press Release: Elettromedia will be conducting a sales rep training in Potenza Picena, Italy in March. Forty USA field reps will be trained on new products,...",neutral,0.8989458084106445
38
- 2025-12-11 23:40:45.897368,Elettromedia,"Elettromedia Appoints New Executive. Effectively immediately, Pilgrim will work with dealers to supply marketing support and materials and help drive sales. He will also keep a hand technical...",neutral,0.7104781270027161
39
- 2025-12-11 23:40:45.998556,Elettromedia,Advanced Marketing Exits Full Line 12 Volt Distribution. Advanced Marketing (AM) announced it is ceasing its full-line car audio wholesale distribution business. Instead it will devote its full efforts to growing...,neutral,0.7373328804969788
40
- 2025-12-11 23:40:46.081800,Elettromedia,"Elettromedia Names New Rep. Elettromedia has appointed Current Marketing as its representative for the Arizona and southern Nevada territories, effective immediately.",neutral,0.9036652445793152
41
- 2025-12-11 23:40:46.176913,Elettromedia,Elettromedia Promotes Wempe and Delgado. Elettromedia-USA has promoted Rob Wempe to Vice President of the company from his former post as Director of Sales and Marketing.,neutral,0.4994317293167114
42
- 2025-12-11 23:40:46.264677,Elettromedia,"Larry Frederick Leaves Elettromedia. Prominent, veteran car audio product developer Larry Frederick has left Elettromedia and is entertaining other possibilities in car electronics.",neutral,0.5087681412696838
43
- 2025-12-11 23:42:09.006472,Celaschi,Charleroi will pursue funding from restitution in Ha case. Councilman Larry Celaschi said the borough was harmed by the failure to pay taxes on illegal aliens.,negative,0.6671392917633057
44
- 2025-12-11 23:42:09.109556,Celaschi,"Charleroi councilman claims glass plant will reopen, but other officials cannot confirm. The closed Corelle Brands plant in Charleroi, shown on Friday. After it closed in April, production was moved to Lancaster, Ohio.",neutral,0.85775226354599
45
- 2025-12-11 23:42:09.233219,Celaschi,"Perryopolis man held for court in vehicular death case. John Delbert Celaschi Jr., 25, of Perryopolis, was held for court on all but one charge filed against him in Fayette County in relation to the vehicular...",neutral,0.715713381767273
46
- 2025-12-11 23:42:09.340242,Celaschi,"Immigrants Rebuilt a Pennsylvania Town — Then Became Targets. Larry Celaschi summons me to look at his cell phone, which displays a photo of a truck. The picture, which someone shared with Celaschi, features the...",neutral,0.945743203163147
47
- 2025-12-11 23:42:09.465843,Celaschi,"Andrew Celaschi Obituary (2025) - Carmichaels, PA - Observer-Reporter. Andrew Celaschi Obituary. Andrew Michael Celaschi, 25, died Tuesday, April 29, 2025, from injuries sustained when he was struck by a tree...",neutral,0.7802605032920837
48
- 2025-12-11 23:42:09.576318,Celaschi,"Greene man killed Tuesday when tree falls on car. Andrew Celaschi, 25, was the passenger in a Toyota Corolla that was headed westbound on Jefferson Road in Franklin Township, about 150 feet north of the...",negative,0.5343117713928223
49
- 2025-12-11 23:42:09.678246,Celaschi,"Perryopolis man charged with homicide by vehicle. A Perryopolis man faces homicide by vehicle while driving under the influence charges following a two-vehicle head-on crash Sept. 21, 2024.",negative,0.7082436680793762
50
- 2025-12-11 23:42:09.781644,Celaschi,"Fayette County man charged with vehicular homicide in crash that killed Ringgold grad. John Celaschi, 25, was leaving a wedding when the truck he was driving allegedly crossed the center line on Brownsville Road in Jefferson Township, hitting a...",negative,0.6681841015815735
51
- 2025-12-11 23:42:09.877497,Celaschi,"Perryopolis man charged with homicide by vehicle. A Perryopolis man faces homicide by vehicle while driving under the influence charges following a two-vehicle head-on accident on Sept. 21, 2024.",negative,0.695264458656311
52
- 2025-12-11 23:42:09.992874,Celaschi,"Victor Celaschi. He is survived by his beloved wife of 67 years, Alberta E. Celaschi (nee: Miller); his children, Victoria Aring (Lee) of Avon, and Victor Celaschi (Marie) of...",neutral,0.6017436981201172
53
- 2025-12-11 23:42:10.093366,Celaschi,"Bearcats grapplers pin down ’Dores. Bentworth dug deep to secure a hard-fought 42-26 victory over Frazier Wednesday night, using timely wins, clutch performances and key forfeits to pull away...",neutral,0.5737037062644958
54
- 2025-12-11 23:42:10.183541,Celaschi,"Charleroi council president statement draws ire of fellow council member. Councilman Larry Celaschi expressed his displeasure, taking issue with a statement concerning the plant property and its possible availability.",negative,0.6969603896141052
55
- 2025-12-11 23:42:10.289656,Celaschi,"Donora man killed in head-on collision in Fayette County. Quinte Lamar Brown, 26, of Donora, was traveling in the 800 block of Brownsville Road in Jefferson Township shortly before 11 pm when a vehicle being driven by...",neutral,0.5457555055618286
56
- 2025-12-11 23:42:10.385365,Celaschi,"Donora man dies in Fayette County crash. Troopers said Quinte Lamar Brown, 26, was driving a Chevrolet Cobalt on Brownsville Road in Jefferson Township just before 11 pm when an oncoming Chevrolet...",neutral,0.588758647441864
57
- 2025-12-11 23:42:10.478229,Celaschi,Efforts underway to save Charleroi plant. The company announced last week that it plans to shut down the facility by the end of the year. It's not over until it's over.,neutral,0.5509985089302063
58
- 2025-12-11 23:42:10.611811,Celaschi,"Tracy Lynn Herrada Obituary - Wolverine Lake , MI (1962-2024). Tracy Lynn Herrada (Celaschi) OBITUARY. Beloved wife of 20 years to Randall Herrada. Loving mother of Michelle (Abraham) Handgis, Jennifer (Stan) Sebastian,...",neutral,0.5667412877082825
59
- 2025-12-11 23:42:10.714440,Celaschi,"Linda Bailey Obituary (2023) - Carmichaels, PA - Observer-Reporter. Linda Joyce Bailey, 77, of Rices Landing, died Thursday, October 12, 2023, in Premier Care, Washington.",neutral,0.7752928137779236
60
- 2025-12-11 23:42:10.829393,Celaschi,"Claire Elizabeth Kolt Obituary. In Loving Memory of Claire Elizabeth Kolt A Bright Light Taken Too Soon It is with heavy hearts that we mourn the loss of our beloved Claire, a...",neutral,0.47717931866645813
61
- 2025-12-11 23:42:10.923217,Celaschi,"Clearview FCU's former CEO at helm of credit union in Chambersburg. Ron Celaschi, president and CEO at Clearview FCU for five years, joined Patriot FCU last month.",neutral,0.9147176742553711
62
- 2025-12-11 23:42:11.007703,Celaschi,"Patriot Federal Credit Union in Pennsylvania names new CEO. Ronald Celaschi will succeed Brad Warner, who announced his intention to retire last year.",neutral,0.8869218826293945
 
1
  timestamp,query,text,sentiment,confidence