【问题标题】:SPARQL how to deal with different cased queries?SPARQL 如何处理不同的大小写查询?
【发布时间】:2014-11-03 10:00:18
【问题描述】:

我对 SPARQL 还是有点陌生​​。我已经为我们公司设置了一个 dbpedia 端点。我不知道最终用户将要查询什么,并且由于 DBpedia 区分大小写,因此我将主题与人的标题大小写和大写版本都传递了;例如“Computer_programming”与“Alcia_Keys”。而不是传入 2 个单独的查询,实现这一目标的最有效方法是什么?我已经尝试过 IN 运算符(来自 this question),但我似乎在某个地方失败了。

select ?label ?abstract where {
   IN (<http://dbpedia.org/resource/alicia_keys>, <http://dbpedia.org/resource/Alicia_Keys>) rdfs:label ?label;
               dbpedia-owl:abstract ?abstract.
                }
                LIMIT 1"""

【问题讨论】:

    标签: nlp sparql wikipedia dbpedia sparqlwrapper


    【解决方案1】:

    因为 DBpedia 区分大小写,所以我通过标题大小写和大写 主题与人的版本;例如 “Computer_programming”与“Alcia_Keys”。而不是传入 2 个单独的 询问实现这一目标的最有效方法是什么?

    URI 应该被视为不透明的。虽然 DBpedia 通常具有一些不错的结构,因此您可以通过连接 http://dbpedia.org/resource 和一些字符串与 _ 替换 来幸运,但这确实不是一种非常可靠的方法。一个更好的主意是注意您得到的字符串可能与某些资源的标签相同,以防万一。鉴于此,最好的想法是寻找具有相同标签的东西,模数大小写。例如,

    select ?resource where {
      values ?input { "AliCIA KeYS" }
    
      ?resource rdfs:label ?label .
      filter ( ucase(str(?label)) = ucase(?input) )
    }
    

    不过,这实际上会很慢,因为您必须找到每个资源,对其标签进行一些字符串处理。不过,原则上这是一种不错的方法。

    可以做些什么来让它变得更好?好吧,如果您知道自己在寻找什么种类,那将有很大帮助。例如,您可以将查询限制为 Persons:

    select distinct ?resource where {
      values ?input { "AliCIA KeYS" }
    
      ?resource rdf:type dbpedia-owl:Person ;
                rdfs:label ?label .
      filter ( ucase(str(?label)) = ucase(?input) )
    }
    

    这是一个改进,但仍然没有全部那么快。它仍然,至少在概念上,必须接触每个人并检查他们的名字。一些 SPARQL 端点支持文本索引,如果您想有效地做到这一点,这可能就是您所需要的。

    当然,最好的选择是简单地向您的用户询问更多信息,并提前对数据进行规范化。如果您的用户提供“AliCIA KEYS”,那么可以对“Alicia Keys”@en 进行规范化,然后执行类似操作:

    select distinct ?resource where {
      values ?input { "Alicia Keys"@en }
      ?resource rdfs:label ?input .
    }
    

    【讨论】:

    • 我真的希望有一种更有效的方法,因为在我的情况下向用户询问更多信息是不可行的。
    • 好吧,如果你已经在本地安装了三重存储(毕竟锤击 DBpedia 的服务器不太礼貌,而且也不是那么可靠),你可以进行全文索引,以便文本查询可能又好又快。
    猜你喜欢
    • 2015-01-31
    • 2014-03-25
    • 1970-01-01
    • 2017-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    相关资源
    最近更新 更多