concatenate function inside sparqlwrapper
nnadine25 opened this issue · 1 comments
hi , i see in your code that you use a list inside a sparqlwrapper query, 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`
please check this thread
https://stackoverflow.com/questions/9918081/sparql-how-to-find-similar-strings
I think that this is a general question other than an issue in Falcon
So I'm going to close the issue :)