Mauro24 commited on
Commit
3d3f8f8
·
verified ·
1 Parent(s): ccbffae

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +77 -28
app.py CHANGED
@@ -7,41 +7,90 @@ from sklearn.metrics.pairwise import cosine_similarity
7
  import numpy as np
8
  import zipfile
9
 
10
- import shutil
11
 
12
- # Funzione per estrarre ed esporre i file
13
- def extract_zip(file):
14
- if not zipfile.is_zipfile(file.name):
15
- return "Errore: Il file caricato non è uno ZIP valido."
16
 
17
- # Percorso temporaneo per l'estrazione
18
- extraction_dir = "./extracted_files"
19
- os.makedirs(extraction_dir, exist_ok=True)
20
 
21
- # Estrazione del contenuto dello ZIP
22
- with zipfile.ZipFile(file.name, 'r') as zip_ref:
 
 
 
23
  zip_ref.extractall(extraction_dir)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
 
25
- # Sposta i file nella radice del progetto per renderli visibili
26
- project_dir = "./"
27
- for root, dirs, files in os.walk(extraction_dir):
28
- for f in files:
29
- source_path = os.path.join(root, f)
30
- dest_path = os.path.join(project_dir, f)
31
- shutil.move(source_path, dest_path)
32
 
33
- return "File estratti e copiati nella radice del progetto:\n" + "\n".join(os.listdir(project_dir))
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
 
35
  # Interfaccia Gradio
36
- interface = gr.Interface(
37
- fn=extract_zip,
38
- inputs=gr.File(label="Carica il file ZIP"),
39
- outputs="text",
40
- title="Estrattore ZIP e Copia nella Radice",
41
- description="Carica un file ZIP. I file verranno estratti e resi visibili nella radice del progetto."
 
42
  )
43
 
44
- # Avvia l'applicazione
45
- if __name__ == "__main__":
46
- interface.launch()
47
-
 
7
  import numpy as np
8
  import zipfile
9
 
 
10
 
11
+ zip_path = "en_core_web_sm-3.0.0.zip" # Carica il file ZIP nella cartella del progetto
12
+ extraction_dir = "./extracted_models" # Scegli una sottocartella per l'estrazione
13
+ test_dir = "./extracted_models/en_core_web_sm-3.0.0" # Cartella dopo l'estrazione
 
14
 
 
 
 
15
 
16
+
17
+ # Verifica se la cartella esiste già
18
+ if not os.path.exists(test_dir):
19
+ # Se la cartella non esiste, decomprimi il file ZIP
20
+ with zipfile.ZipFile(zip_path, 'r') as zip_ref:
21
  zip_ref.extractall(extraction_dir)
22
+ print(f"Modello estratto correttamente nella cartella {extraction_dir}")
23
+
24
+ # Percorso della cartella estratta
25
+ model_path = os.path.join(extraction_dir, "en_core_web_sm-3.0.0") # Assicurati che sia corretto
26
+
27
+ # Carica il modello
28
+ nlp = spacy.load(model_path)
29
+
30
+
31
+ # Carica il modello SentenceTransformer
32
+ #model = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2', device='cpu')
33
+ #model = SentenceTransformer('sentence-transformers/msmarco-distilbert-base-v4', device='cpu')
34
+ #model = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2', device='cpu')
35
+
36
+ model = SentenceTransformer('sentence-transformers/all-distilroberta-v1', device='cpu')
37
+
38
+
39
+
40
+ # Preprocessamento manuale (carica il manuale da un file o base di dati)
41
+ with open('testo.txt', 'r', encoding='utf-8') as file:
42
+ text = file.read()
43
 
44
+ # Tokenizza il testo in frasi usando SpaCy
45
+ doc = nlp(text)
46
+ sentences = [sent.text for sent in doc.sents] # Estrarre frasi dal testo
 
 
 
 
47
 
48
+ # Crea gli embedding per il manuale
49
+ embeddings = model.encode(sentences, batch_size=8, show_progress_bar=True)
50
+
51
+ # Funzione per ottenere le frasi più rilevanti
52
+ def find_relevant_sentences(query):
53
+ query_embedding = model.encode([query])
54
+ similarities = cosine_similarity(query_embedding, embeddings).flatten()
55
+
56
+ # Filtra i risultati in base alla similitudine
57
+ threshold = 0.2
58
+ filtered_results = [(idx, sim) for idx, sim in enumerate(similarities) if sim >= threshold]
59
+
60
+ # Ordina i risultati per similitudine
61
+ filtered_results.sort(key=lambda x: x[1], reverse=True)
62
+
63
+ # Ottieni le frasi più rilevanti
64
+ top_n = 5
65
+ relevant_sentences = [sentences[idx] for idx, _ in filtered_results[:top_n]]
66
+
67
+ doc = nlp(" ".join(relevant_sentences))
68
+
69
+ grouped_results = [sent.text for sent in doc.sents]
70
+ # Pulizia
71
+ cleaned_results = [text.replace("\n", " ") for text in grouped_results] # Rimuove gli a capo
72
+ final_output = " ".join(cleaned_results) # Combina tutte le frasi in un unico testo
73
+
74
+
75
+ return grouped_results
76
+
77
+ examples = [
78
+ ["irresponsible use of the machine?"],
79
+ ["If I have a problem how can I get help? "],
80
+ ["precautions when using the cutting machine"],
81
+ ["How do I change the knife of the cutting machine?"],
82
+
83
+ ]
84
 
85
  # Interfaccia Gradio
86
+ iface = gr.Interface(
87
+ fn=find_relevant_sentences,
88
+ inputs=gr.Textbox(label="Insert your query"),
89
+ outputs=gr.Textbox(label="Relevant sentences"),
90
+ examples=examples,
91
+ title="Manual Querying System",
92
+ description="Enter a question about the machine, and this tool will find the most relevant sentences from the manual."
93
  )
94
 
95
+ # Avvia l'app Gradio
96
+ iface.launch()