Nlp SPARQL如何处理不同的大小写查询?

Nlp SPARQL如何处理不同的大小写查询?,nlp,sparql,wikipedia,dbpedia,sparqlwrapper,Nlp,Sparql,Wikipedia,Dbpedia,Sparqlwrapper,我对SPARQL还是有点陌生。我已经为我们公司建立了一个dbpedia端点。我不知道最终用户将查询什么,因为DBpedia是区分大小写的,所以我传递主题的标题大小写和大写版本,而不是像person这样的内容;e、 g.“计算机编程”与“Alcia_键”。与其传入两个单独的查询,实现这一点最有效的方法是什么?我试过(从)的IN接线员,但似乎在什么地方失败了 select ?label ?abstract where { IN (<http://dbpedia.org/resource/

我对SPARQL还是有点陌生。我已经为我们公司建立了一个dbpedia端点。我不知道最终用户将查询什么,因为DBpedia是区分大小写的,所以我传递主题的标题大小写和大写版本,而不是像person这样的内容;e、 g.“计算机编程”与“Alcia_键”。与其传入两个单独的查询,实现这一点最有效的方法是什么?我试过(从)的IN接线员,但似乎在什么地方失败了

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"""
选择?标签?摘要在哪里{
在(,)rdfs中:标签?标签;
dbpedia猫头鹰:摘要?摘要。
}
限制1“
因为DBpedia是区分大小写的,所以我同时传递标题大小写和大写字母 主题与人物的版本;例如。 “计算机编程”与“Alcia_键”。而不是通过两个单独的 质疑实现这一目标最有效的方法是什么

URI应该被视为不透明的,而DBpedia通常有一些很好的结构,因此可以通过连接
http://dbpedia.org/resource
和一些用
替换
的字符串,这确实不是一种非常可靠的方法。更好的方法是注意,您得到的字符串可能是他把它看作是某种资源的标签,在case中的模变化。鉴于此,最好的办法是寻找具有相同标签的东西,模case。例如

select ?resource where {
  values ?input { "AliCIA KeYS" }

  ?resource rdfs:label ?label .
  filter ( ucase(str(?label)) = ucase(?input) )
}
这实际上会非常慢,因为你必须找到每一个资源,在它的标签上做一些字符串处理

可以做些什么来让它变得更好呢?好吧,如果你知道你在寻找什么样的东西,那会有很大帮助。例如,你可以将查询限制为个人:

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密钥”,那么您可以对“AliCIA密钥”@en进行规范化,然后执行类似的操作:

select distinct ?resource where {
  values ?input { "Alicia Keys"@en }
  ?resource rdfs:label ?input .
}
因为DBpedia是区分大小写的,所以我同时传递标题大小写和大写字母 主题与人物的版本;例如。 “计算机编程”与“Alcia_键”。而不是通过两个单独的 质疑实现这一目标最有效的方法是什么

URI应该被视为不透明的,而DBpedia通常有一些很好的结构,因此可以通过连接
http://dbpedia.org/resource
和一些用
替换
的字符串,这确实不是一种非常可靠的方法。更好的方法是注意,您得到的字符串可能是他把它看作是某种资源的标签,在case中的模变化。鉴于此,最好的办法是寻找具有相同标签的东西,模case。例如

select ?resource where {
  values ?input { "AliCIA KeYS" }

  ?resource rdfs:label ?label .
  filter ( ucase(str(?label)) = ucase(?input) )
}
这实际上会非常慢,因为你必须找到每一个资源,在它的标签上做一些字符串处理

可以做些什么来让它变得更好呢?好吧,如果你知道你在寻找什么样的东西,那会有很大帮助。例如,你可以将查询限制为个人:

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密钥”,那么您可以对“AliCIA密钥”@en进行规范化,然后执行类似的操作:

select distinct ?resource where {
  values ?input { "Alicia Keys"@en }
  ?resource rdfs:label ?input .
}
因为DBpedia是区分大小写的,所以我同时传递标题大小写和大写字母 主题与人物的版本;例如。 “计算机编程”与“Alcia_键”。而不是通过两个单独的 质疑实现这一目标最有效的方法是什么

URI应该被视为不透明的,而DBpedia通常有一些很好的结构,因此可以通过连接
http://dbpedia.org/resource
和一些用
替换
的字符串,这确实不是一种非常可靠的方法。更好的方法是注意,您得到的字符串可能是他把它看作是某种资源的标签,在case中的模变化。鉴于此,最好的办法是寻找具有相同标签的东西,模case。例如

select ?resource where {
  values ?input { "AliCIA KeYS" }

  ?resource rdfs:label ?label .
  filter ( ucase(str(?label)) = ucase(?input) )
}
这实际上会非常慢,因为你必须找到每一个资源,在它的标签上做一些字符串处理

可以做些什么来让它变得更好呢?好吧,如果你知道你在寻找什么样的东西,那会有很大帮助。例如,你可以将查询限制为个人:

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密钥”,那么您可以对“AliCIA密钥”@en进行规范化,然后执行类似的操作:

select distinct ?resource where {
  values ?input { "Alicia Keys"@en }
  ?resource rdfs:label ?input .
}
因为DBpedia是区分大小写的,所以我同时传递标题大小写和大写字母 主题与人物的版本;例如。 “计算机编程”与“Alcia_键”。而不是通过两个单独的 质疑实现这一目标最有效的方法是什么

URI应该被视为不透明的,而DBpedia通常有一些ni