【问题标题】:dbpedia fetch entitites in language other than englishdbpedia 以英语以外的语言获取实体
【发布时间】:2015-03-16 04:04:11
【问题描述】:

我正在尝试使用 sparql 从 dbpedia 中提取包含人名等的实体字典。

PREFIX owl: <http://dbpedia.org/ontology/>
PREFIX dbpprop: <http://dbpedia.org/property/>
SELECT ?name
WHERE {
    ?person a owl:Person .

    ?person dbpprop:name ?name . FILTER(lang(?name) = "en")
}

上面的查询确实成功了,但是当我将语言名称更改为fr 时,没有任何东西可以获取。

如何获取其他语言的名称?

另外,为什么我不能使用下面的查询过滤语言?

SELECT ?name
WHERE {
    ?person a owl:Person .
    ?person dbpprop:language "English"
    ?person dbpprop:name ?name . 
}
// this query returns nothing

我尝试使用

获取所有语言
SELECT DISTINCT ?lanName
WHERE {
    ?person a owl:Person .
    ?person dbpprop:language ?lanName .
}

结果集包含English

【问题讨论】:

    标签: sparql owl wikipedia dbpedia foaf


    【解决方案1】:

    您需要根据属性值的语言进行过滤。并非每个 属性都有不同语言的值,但有些属性会有。从您的示例看来, dbpprop:name 似乎在每种语言中都没有值。如果您查看其他语言特定的 DBpediae,您可能会在其他语言中找到更多值。

    但是,对于名称之类的内容,如果您使用 rdfs:label 属性,您可能会得到多语言结果。例如,要获得俄文中巴拉克奥巴马、丹尼尔韦伯斯特和约翰尼卡什的名字,您可以这样做:

    select ?label {
      values ?person { dbpedia:Johnny_Cash dbpedia:Barack_Obama dbpedia:Daniel_Webster }
      ?person rdfs:label ?label .
      filter langMatches(lang(?label),"ru")
    }
    

    SPARQL results

    顺便说一句,请注意使用langMatches 而不是匹配语言标签的相等性。这通常是一种更好的方法,因为它可以正确处理一种语言中的不同语言标记。例如(来自 SPARQL 规范),您可以找到两种法语文字:

    "Cette Série des Années Soixante-dix"@fr .
    "Cette Série des Années Septante"@fr-BE .
    

    使用 langMatches(lang(?title),"fr"),但只有第一个使用 lang(?title) = "fr"

    【讨论】:

      【解决方案2】:

      你在找rdfs:label的名字,当然所有的名字都是英文的,你看的是英文的dbpedia。

      PREFIX owl: <http://dbpedia.org/ontology/>
      PREFIX dbpprop: <http://dbpedia.org/property/>
      SELECT distinct *
      WHERE {
          ?person a owl:Person .
          ?person rdfs:label ?name . 
          FILTER(lang(?name) = "fr")
      }
      

      同样,对于第二个,如果您将名称替换为 rdfs: label,您可以:

          PREFIX owl: <http://dbpedia.org/ontology/>
          PREFIX dbpprop: <http://dbpedia.org/property/>
          SELECT distinct *
              WHERE {
          ?person a owl:Person .
          ?person rdfs:label ?name .
          ?person dbpprop:language <http://dbpedia.org/resource/English_language>.
      }
      

      【讨论】:

      • dbpedia.org/sparql 上运行select ?label { dbpedia:England rdfs:label ?label } 返回twelve different results,并且只有一个是英文的。不是很清楚“你在找一个名字的rdfs:label,当然所有的名字都是英文的”。
      • 而且使用langMatches(lang(?name),"fr") 比使用lang(?name) = "fr" 更好。
      • 谢谢,有没有关于这些属性的详细文档?官方的本体层次结构(如mappings.dbpedia.org/server/ontology/classes/Person)只包含一些简单的cmets。
      • @Tilney http://dbpedia.org/ontology/ 中的属性来自 DBpedia 本体,并且通常比 http://dbpedia.org/property/ 中的属性更清晰的值,后者非常接近原始信息框数据。看看4.3 Infobox data
      • 非常感谢!我正在检查本体页面。顺便问一下,dbpedia sparql 端点是否限制了结果集的大小?即使增加了超时字段,我也只能得到 10,001 条记录。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-26
      • 1970-01-01
      • 2013-04-22
      相关资源
      最近更新 更多