# Strategia di Suggerimento Canti Liturgici

Questo documento descrive l'approccio tecnico utilizzato per suggerire i canti attinenti alle letture del giorno nella PWA "CantiCristiani".

## 1. Algoritmo di Analisi (Keyword Matching)

Al momento **non viene utilizzata un'Intelligenza Artificiale generativa (LLM)** per due motivi principali:
- **Performance**: L'analisi avviene istantaneamente sul dispositivo dell'utente senza chiamate API esterne lente.
- **Privacy e Offline**: Il sistema può funzionare anche con una connettività limitata una volta scaricato il testo delle letture.

### Fasi dell'Algoritmo:

1.  **Keyword Extraction**: 
    - Il testo di tutte le letture (Prima, Salmo, Seconda, Vangelo) viene normalizzato in minuscolo.
    - Vengono rimosse le "stop words" (parole comuni come articoli, preposizioni, congiunzioni).
    - Vengono estratte solo le parole con lunghezza superiore a 3 caratteri per evitare rumore.
2.  **Ponderazione e Scoring**:
    - Ogni canto nel database viene analizzato cercando le keyword estratte.
    - **Titolo (Peso 10)**: Se una parola chiave appare nel titolo, il punteggio del canto aumenta drasticamente.
    - **Testo/Lyrics (Peso 1)**: Ogni occorrenza di una parola chiave nel testo del canto aggiunge 1 punto al punteggio totale.
3.  **Classificazione per Momento Liturgico**:
    - I canti vengono raggruppati in base alle categorie liturgiche (Ingresso, Gloria, Offertorio, Comunione, ecc.) definite nel database.
    - Il sistema seleziona i migliori 3 canti per ogni categoria per offrire una scelta bilanciata.

## 2. Selezione della Data Predefinita

L'applicazione calcola automaticamente la **prossima domenica** come data di default. Questo perché la maggior parte degli utenti utilizza la funzione per preparare la liturgia festiva imminente.

## 3. Sviluppi Futuri: Ricerca Semantica (Embeddings)

Per superare i limiti del matching testuale, la strategia futura prevede l'integrazione di tecniche di **Semantic Search** che possono essere eseguite direttamente nella PWA:

### Architettura Proposta:
- **Pre-calcolo dei Vettori**: Generazione dei vettori (embeddings) per l'intero database dei canti. Questi dati verrebbero inclusi in una versione estesa del file `canti.json`.
- **Analisi On-Device**: Utilizzo di librerie matematiche leggere (come `similarity-js`) per calcolare la "distanza del coseno" tra il vettore della lettura e quelli dei canti.
- **Vantaggi**: Il sistema identificherebbe correlazioni concettuali (es. "Luce" -> "Mondo", "Pane" -> "Eucarestia") anche in assenza di corrispondenze testuali esatte.

### Implementazione Tecnica:
1.  Integrazione di un modello di embedding (es. `all-MiniLM-L6-v2`) via Web Workers per non bloccare l'interfaccia.
2.  Memorizzazione locale dei vettori tramite IndexedDB per garantire performance elevate dopo il primo caricamento.
