首页 > 解决方案 > 在 python 中的 SPARQLwrapper 中使用 Levenstein 距离

问题描述

我很想知道是否有任何方法可以在 SPARQL 查询中使用 Levenstein 距离。假设我只想选择 Levenstein 距离 < 3 的对象。我使用下面的代码,但它返回错误: 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

那么我如何在 sparqlwrapper 中连接一个 custon 函数呢?

标签: pythonlevenshtein-distancesparqlwrapper

解决方案


推荐阅读