RDFLib / sparqlwrapper

A wrapper for a remote SPARQL endpoint
https://sparqlwrapper.readthedocs.io/
Other
513 stars 121 forks source link

Using Levenstein distance within SPARQLwrapper in python Ask Question #167

Open nnadine25 opened 3 years ago

nnadine25 commented 3 years ago

hi, I am interested to know if there is any way I could use Levenstein distance within a SPARQL query. Let's say I want to select only the objects that have a Levenstein distance < 3. I use the code below but it return the error : sparql.setQuery(""" TypeError: can only concatenate str (not "function") to str

def distance(s, t): m, n = len(s), len(t) d = [range(n + 1)] d += [[i] for i in range(1, m + 1)] for i in range(0, m): for j in range(0, n): cost = 1 if s[i] == t[j]: cost = 0 d[i + 1].append(min(d[i][j + 1] + 1, # deletion d[i + 1][j] + 1, # insertion d[i][j] + cost) # substitution ) return d[m][n]

def search_based_candidate(mention): sparql = SPARQLWrapper("http://dbpedia.org/sparql") sparql.setQuery(""" PREFIX rdfs:http://www.w3.org/2000/01/rdf-schema# SELECT DISTINCT ?candidate where { ?candidate rdfs:label ?itemLabel FILTER (LANG(?itemLabel)= 'en') FILTER (str("""+distance+""""(str(itemLabel),"""+mention+""")) < 3)

        }
     """)

sparql.setReturnFormat(JSON) try: candidates = sparql.query().convert() except: candidates = "no result"

return candidates so how i can concatenate a custon function inside sparqlwrapper?