AshenClock commited on
Commit
74fdf10
·
verified ·
1 Parent(s): cb51311

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +18 -4
app.py CHANGED
@@ -4,7 +4,7 @@ from typing import List
4
  from pydantic import BaseModel
5
  from fastapi import FastAPI, HTTPException
6
  import rdflib
7
- from rdflib import RDF, RDFS, OWL
8
  from sentence_transformers import SentenceTransformer
9
  import faiss
10
  import json
@@ -93,6 +93,11 @@ def extract_ontology(rdf_file: str, output_file: str):
93
  for entity in g.subjects(RDF.type, OWL.NamedIndividual):
94
  label = g.value(entity, RDFS.label, default=str(entity))
95
  description = g.value(entity, RDFS.comment, default="No description.")
 
 
 
 
 
96
  # Estrai le proprietà dell'entità
97
  entity_properties = {}
98
  for predicate, obj in g.predicate_objects(entity):
@@ -300,7 +305,7 @@ Ecco alcune informazioni rilevanti recuperate dalla base di conoscenza:
300
 
301
  ### Regole Stringenti ###
302
  1) Se l'utente chiede informazioni su questa ontologia, genera SEMPRE una query SPARQL in UNA SOLA RIGA, con prefix:
303
- PREFIX base: <http://www.semanticweb.org/lucreziamosca/ontologies/progettoMuseo#>
304
  2) La query SPARQL deve essere precisa e cercare esattamente le entità specificate dall'utente. Ad esempio, se l'utente chiede "Chi ha creato l'opera 'Amore e Psiche'?", la query dovrebbe cercare l'opera esattamente con quel nome.
305
  3) Se la query produce 0 risultati o fallisce, ritenta con un secondo tentativo.
306
  4) Se la domanda è generica (tipo 'Ciao, come stai?'), rispondi breve.
@@ -309,7 +314,7 @@ Ecco alcune informazioni rilevanti recuperate dalla base di conoscenza:
309
  7) Non multiline. Esempio: PREFIX base: <...> SELECT ?x WHERE {{ ... }}.
310
  Esempio:
311
  Utente: Chi ha creato l'opera 'Amore e Psiche'?
312
- Risposta: PREFIX base: <http://www.semanticweb.org/lucreziamosca/ontologies/progettoMuseo#> SELECT ?creatore WHERE {{ ?opera base:hasName "Amore e Psiche" . ?opera base:creatoDa ?creatore . }}
313
  FINE REGOLE
314
 
315
  ### Conversazione ###
@@ -378,7 +383,16 @@ def load_entity_labels(documents_file: str):
378
  try:
379
  with open(documents_file, "r", encoding="utf-8") as f:
380
  document = json.load(f)
381
- entity_labels = [entity['label'].lower() for entity in document['entities']]
 
 
 
 
 
 
 
 
 
382
  logger.info(f"Elenco delle etichette delle entità caricato: {entity_labels}")
383
  except Exception as e:
384
  logger.error(f"Errore nel caricamento delle etichette delle entità: {e}")
 
4
  from pydantic import BaseModel
5
  from fastapi import FastAPI, HTTPException
6
  import rdflib
7
+ from rdflib import RDF, RDFS, OWL, URIRef
8
  from sentence_transformers import SentenceTransformer
9
  import faiss
10
  import json
 
93
  for entity in g.subjects(RDF.type, OWL.NamedIndividual):
94
  label = g.value(entity, RDFS.label, default=str(entity))
95
  description = g.value(entity, RDFS.comment, default="No description.")
96
+ # Se l'etichetta è un URI, estrai il fragment
97
+ if isinstance(label, URIRef):
98
+ label = label.split('#')[-1].replace('_', ' ')
99
+ else:
100
+ label = str(label)
101
  # Estrai le proprietà dell'entità
102
  entity_properties = {}
103
  for predicate, obj in g.predicate_objects(entity):
 
305
 
306
  ### Regole Stringenti ###
307
  1) Se l'utente chiede informazioni su questa ontologia, genera SEMPRE una query SPARQL in UNA SOLA RIGA, con prefix:
308
+ PREFIX base: <http://www.semanticweb.org/lucreziamosca/ontologies/progettomuseo#>
309
  2) La query SPARQL deve essere precisa e cercare esattamente le entità specificate dall'utente. Ad esempio, se l'utente chiede "Chi ha creato l'opera 'Amore e Psiche'?", la query dovrebbe cercare l'opera esattamente con quel nome.
310
  3) Se la query produce 0 risultati o fallisce, ritenta con un secondo tentativo.
311
  4) Se la domanda è generica (tipo 'Ciao, come stai?'), rispondi breve.
 
314
  7) Non multiline. Esempio: PREFIX base: <...> SELECT ?x WHERE {{ ... }}.
315
  Esempio:
316
  Utente: Chi ha creato l'opera 'Amore e Psiche'?
317
+ Risposta: PREFIX base: <http://www.semanticweb.org/lucreziamosca/ontologies/progettomuseo#> SELECT ?creatore WHERE {{ ?opera base:hasName "Amore e Psiche" . ?opera base:creatoDa ?creatore . }}
318
  FINE REGOLE
319
 
320
  ### Conversazione ###
 
383
  try:
384
  with open(documents_file, "r", encoding="utf-8") as f:
385
  document = json.load(f)
386
+ # Estrai etichette vere e proprie
387
+ entity_labels = []
388
+ for entity in document.get('entities', []):
389
+ label = entity.get('label', '')
390
+ if label.startswith("http://") or label.startswith("https://"):
391
+ # Estrai il fragment dell'URI
392
+ label = label.split('#')[-1].replace('_', ' ')
393
+ else:
394
+ label = label.replace('_', ' ')
395
+ entity_labels.append(label.lower())
396
  logger.info(f"Elenco delle etichette delle entità caricato: {entity_labels}")
397
  except Exception as e:
398
  logger.error(f"Errore nel caricamento delle etichette delle entità: {e}")