Knowledge2Model/Hugging2Graph/searchGraph.py

154 lines
4.3 KiB
Python

from rdflib import Graph, Namespace, RDF, Literal
from rdflib.namespace import XSD
def load_graph(file_path):
g = Graph()
g.parse(file_path, format="turtle")
return g
def get_cover_tags(graph):
query = """
PREFIX conn: <http://example.org/conn/>
SELECT ?coverTag
WHERE {
?coverTag a conn:CoverTag .
}
"""
results = graph.query(query)
cover_tags = [row[0] for row in results]
return cover_tags
def get_problems(graph):
query = """
PREFIX conn: <http://example.org/conn/>
SELECT ?problem
WHERE {
?problem a conn:Problem .
}
"""
results = graph.query(query)
problems = [row[0] for row in results]
return problems
def get_problems_for_cover_tag(graph, cover_tag_literal_text):
cover_tag_literal = Literal(cover_tag_literal_text, datatype=XSD.string)
query = """
PREFIX conn: <http://example.org/conn/>
PREFIX problem: <http://example.org/problem/>
PREFIX tag: <http://example.org/tag/>
SELECT ?problem
WHERE {
?problem a conn:Problem .
?problem conn:hasCoverTag ?coverTag .
FILTER (?coverTag = ?cover_tag_literal)
}
"""
results = graph.query(query, initBindings={'cover_tag_literal': cover_tag_literal})
problems = [row[0] for row in results]
return problems
def get_models_for_problem(graph, problem_literal_text):
problem_literal = Literal(problem_literal_text, datatype=XSD.string)
query = """
PREFIX conn: <http://example.org/conn/>
PREFIX model: <http://example.org/model/>
SELECT ?model ?downloads
WHERE {
?model a conn:Model .
?model conn:hasProblem ?problem .
?model conn:downloads ?downloads .
FILTER (?problem = ?problem_literal)
}
ORDER BY DESC(?downloads)
"""
results = graph.query(query, initBindings={'problem_literal': problem_literal})
models = [(row[0], row[1]) for row in results]
return models
def get_model_details(graph, model_name):
model_literal = Literal(model_name, datatype=XSD.string)
query = """
PREFIX conn: <http://example.org/conn/>
PREFIX model: <http://example.org/model/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT ?model ?id ?name ?problem ?coverTag ?library ?downloads ?likes ?lastModified
WHERE {
?model a conn:Model .
?model conn:model_name ?name .
?model conn:model_id ?id .
?model conn:hasProblem ?problem .
?model conn:hasCoverTag ?coverTag .
?model conn:usesLibrary ?library .
?model conn:downloads ?downloads .
?model conn:likes ?likes .
?model conn:lastModified ?lastModified .
FILTER (?name = ?model_literal)
}
"""
results = graph.query(query, initBindings={'model_literal': model_literal})
details = {}
for row in results:
details = {
'model_uri': row[0],
'id': row[1],
'name': row[2],
'problem': row[3],
'coverTag': row[4],
'library': row[5],
'downloads': row[6],
'likes': row[7],
'lastModified': row[8]
}
return details
def print_results(literals, label):
print(f"List of available {label}:")
for literal in literals:
print(literal)
print()
def print_models(models):
print("Models ordered by downloads:")
for model, downloads in models:
print(f"Model: {model}, Downloads: {downloads}")
print()
def print_model_details(details):
print("Model details:")
for key, value in details.items():
print(f"{key}: {value}")
print()
if __name__ == "__main__":
graph = load_graph("graph.ttl")
# Get Modality (Cover Tags)
cover_tags = get_cover_tags(graph)
print_results(cover_tags, "cover tags")
# Get Problem List
problems = get_problems(graph)
print_results(problems, "problems")
cover_tag = "audio"
problems = get_problems_for_cover_tag(graph, cover_tag)
print_results(problems, "problems connected to the cover tag")
# Get Model by Problem to solve
problem_literal_text = "image-to-text"
models = get_models_for_problem(graph, problem_literal_text)
print_models(models)
# Get Model Details (Example)
model_name = "OleehyO/TexTeller"
model_details = get_model_details(graph, model_name)
print_model_details(model_details)