我想使用维基百科数据创建一个名称实体识别器,我需要获得一个单词的所有超类,以查看该单词的类别(地点,人类,组织或无)。我上网了很多,并找到了一些页面:
当我执行查询结果“找不到匹配的记录”时,即使使用页面中提到的单词并尝试其他名称空间。 和
这与我的工作非常相似,但我也得到了“找不到匹配的记录”的结果。
我认为这些链接中提到的查询在逻辑上是正确的,但我不知道为什么它们对我没有任何结果。我还尝试通过这些网站中提到的示例学习SPARQL:
我没有找到任何可以找到一个单词的超类。
有一些我没有得到结果的代码示例:
PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#>
PREFIX ns:<http://dbpedia.org/>
SELECT ?subClass ?label WHERE {
?subClass rdfs:subClassOf ns:Albert .
?subClass rdfs:label ?label . }
或:
SELECT * WHERE {
dbpedia:Albert a ?c1 ; a ?c2 .
?c1 rdfs:subClassOf ?c2 .
}
如果你回答我的问题,我真的很感激。
先谢谢
答案 0 :(得分:1)
谁是&#34; Albert&#34;?!您只能查询DBpedia中存在的数据。没有资源http://dbpedia.org/resource/Albert
您的第一个查询使用了错误的命名空间,至少我从未见过http://dbedia.org作为命名空间,因为资源通常是http://dbpedia.org/resource/
您的第一个查询使用public boolean onNavigationItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.profil) {
}
else if (id == R.id.accueil) {
AccueilFragment fragment = new AccueilFragment();
android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.fragment1, fragment );
fragmentTransaction.commit();
floatingActionButton.show();
getSupportActionBar().setTitle("Accueil");
} else if (id == R.id.categories) {
CategoriesFragment fragment = new CategoriesFragment();
android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.fragment1, fragment );
fragmentTransaction.commit();
floatingActionButton.hide();
getSupportActionBar().setTitle("Categories");
}
}
谓词错误的情况&#34; Albert&#34;应该是一种资源。表达资源&#34;:x&#34;属于类rdfs:subClassOf
由RDF三:C
完成。类:x a :C .
有一个超类:C
在RDF中用:D
表示。
您的第二个查询再次使用一些旧的名称空间前缀:C rdfs:subClassOf :D .
,现在称为dbpedia:
并且确实代表名称空间http://dbpedia.org/resource/。但正如我在第一点提到的那样,没有任何资源可以用于&#34; Albert&#34;
单词&#34;&#34;&#34;&#34;是什么?只是为了澄清,资源属于一个类,一个类可以有超类。
如果您希望所有类包括资源所属的超类,您可以使用例如为汤姆汉克斯&#34;
dbr:
答案 1 :(得分:1)
可能您正在寻找类似此查询的内容:
SELECT DISTINCT ?c WHERE {
?Q wdt:P31/wdt:P279? ?c .
?Q rdfs:label "Tom Hanks"@en
}
维基数据使用自己的谓词而不是rdf:type
和rdfs:subClassOf
(分别为wdt:P31
和wdt:P279
)。
答案 2 :(得分:0)
因此,subClassOf谓词仅适用于通常不是实例的事物类。您需要通过rdf:type
连接课程。
SELECT * WHERE {
<http://dbpedia.org/resource/Albert_Einstein> a ?c1 ; a ?c2 .
?c1 rdfs:subClassOf ?c2 .
}
我不确定您可以从Albert获得什么类型的实体,它可能需要消除歧义。我的示例查询使用Albert Einstein
作为DBPEDIA资源。
请记住,根据您感兴趣的抽象级别,您可以在根类中进行多次跳转。第二个查询上升了两个级别。
SELECT DISTINCT ?c3 WHERE {
<http://dbpedia.org/resource/Albert_Einstein> a ?c1 ; a ?c2 .
?c1 rdfs:subClassOf ?c2 .
?c2 rdfs:subClassOf ?c3 .
}