我曾经通过使用一些正则表达式解析导出来从导出的维基百科文章中检索中介语链接.
在WikiData项目的第1阶段,这些链接已移至维基数据上的单独页面.
例如,文章Ore Mountains在导出中不再有语言链接.语言链接现在是Q4198.
如何导出语言链接?
我想知道是否有可能获得 Wikidata 的最新增量 n-triple 转储。
我正在使用Wikidata Toolkit下载最新版本的转储并将它们自动转换为 n-triple 文件(使用RdfSerializationExample
),但我不知道如何生成该转储的增量版本(指定修改的、新的和删除的实体) )。
我的想法是在像OpenLink Virtuoso这样的系统中维护 Wikidata 信息的更新版本。因此,我认为有必要获得n-triples的增量版本。
我知道xml version 中有转储的增量版本,但我不知道如何将它们转换为 n-triples。
那么,这是最好的方法吗?
我有很多文本(数百万),从100到4000字不等.文本被格式化为书面作品,带有标点符号和语法.一切都用英文.
问题很简单:如何从给定文本中提取每个WikiData实体?
实体被定义为每个名词,正确或规则.即,人,组织,地点和椅子,土豆等的名称.
到目前为止,我已经尝试了以下内容:
这有效,但我觉得我可以做得更好.一个明显的改进是在本地缓存相关的WikiData,我打算这样做.但是,在我这样做之前,我想检查是否有其他解决方案.
建议?
我标记了Scala的问题,因为我正在使用Spark来执行任务.
scala information-retrieval machine-learning wikidata wikidata-api
目前,Wikidata有一个SPARQL端点" https://query.wikidata.org/ ",我想使用Jena(3.0.1)查询此站点,我使用以下代码但是我收到一条错误消息" Endpoint返回内容-Type:SELECT查询当前不支持的text/html ".有办法解决吗?相同的代码适用于dbpedia.谢谢
queryString = "PREFIX bd: <http://www.bigdata.com/rdf#>\n" +
"PREFIX wikibase: <http://wikiba.se/ontology#>\n" +
"PREFIX wdt: <http://www.wikidata.org/prop/direct/>\n" +
"PREFIX wd: <http://www.wikidata.org/entity/>\n" +
"SELECT DISTINCT ?country ?countryLabel\n" +
"WHERE\n" +
"{\n" +
"\t?country wdt:P31 wd:Q3624078 .\n" +
" ?country wdt:P1622 wd:Q13196750.\n" +
" ?country wdt:P30 wd:Q15\n" +
"\tFILTER NOT EXISTS {?country wdt:P31 wd:Q3024240}\n" +
"\tSERVICE wikibase:label { bd:serviceParam wikibase:language \"en\" }\n" +
"}\n" +
"ORDER BY ?countryLabel";
query = QueryFactory.create(queryString);
qexec = QueryExecutionFactory.sparqlService("https://query.wikidata.org/", queryString);
try {
ResultSet results = qexec.execSelect(); …
Run Code Online (Sandbox Code Playgroud) 我想从维基数据中获取特定类别的所有成员。例如,我想P31 Q11424
从类别“类别:以斯德哥尔摩为背景的电影”( ) 中获取所有电影(电影实例: ) Q7519614
。但是,我似乎找不到这种关系。DBpedia 使用“主题”,但 Wikidata 的等效项 ( P805
) 不返回任何结果。
我还以为我可以通过此查询引导找到答案,但无济于事:
SELECT ?s ?p ?pLabel WHERE {
?s ?p wd:Q7519614.
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
Run Code Online (Sandbox Code Playgroud) 如何使用SPARQL端点通过ID获取维基数据中的英语或任何其他语言的标签?
我正在努力用意大利语和英语来获得意大利的地区.我可以通过这个查询进入一个语言...
PREFIX wikibase: <http://wikiba.se/ontology#>
PREFIX wd: <http://www.wikidata.org/entity/>
PREFIX wdt: <http://www.wikidata.org/prop/direct/>
SELECT DISTINCT ?RegionIT ?RegionITLabel ?ISO_code ?Geo
{
?RegionIT wdt:P31 wd:Q16110;
wdt:P300 ?ISO_code;
wdt:P625 ?Geo
SERVICE wikibase:label { bd:serviceParam wikibase:language "it" }
}
ORDER BY ?regionITLabel
Run Code Online (Sandbox Code Playgroud)
...但是使用标准SPARQL语法添加另一种语言不起作用.
假设我想获得每个国家 (Q6256) 及其最近记录的人类发展指数 (P1081) 值的列表。该国家/地区的人类发展指数属性包含在不同时间点采集的数据点列表,但我只关心最新数据。此查询将不起作用,因为它会为每个国家/地区获得多个结果(每个人类发展指数数据点一个):
SELECT
?country
?countryLabel
?hdi_value
?hdi_date
WHERE {
?country wdt:P31 wd:Q6256.
OPTIONAL { ?country p:P1081 ?hdi_statement.
?hdi_statement ps:P1081 ?hdi_value.
?hdi_statement pq:P585 ?hdi_date.
}
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
Run Code Online (Sandbox Code Playgroud)
我知道 GROUP BY/GROUP CONCAT 但是当我更喜欢只有一个结果时,它仍然会给我每一个结果。GROUP BY/SAMPLE 也将不起作用,因为 SAMPLE 不能保证采用最新的结果。
感谢任何帮助或相关示例查询的链接!
PS我感到困惑的另一件事是为什么这个查询中的人口P1082每个国家只返回一个人口结果
SELECT
?country
?countryLabel
?population
WHERE {
?country wdt:P31 wd:Q6256.
OPTIONAL { ?country wdt:P1082 ?population. }
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
Run Code Online (Sandbox Code Playgroud)
而相同的查询但对于 HDI 会返回每个国家/地区的多个结果:
SELECT
?country
?countryLabel
?hdi
WHERE {
?country …
Run Code Online (Sandbox Code Playgroud) 我知道以下针对Wikidata SPARQL Endpoint查询的 SPARQL 是毫无意义的。我的应用程序中会自动生成类似的查询。请忽略概念的合理性,让我们深入研究这个奇怪的(至少对我来说)发生的事情。
\n\nSELECT ?year1 ?year_labelTemp\n WHERE\n { \n ?year1 <http://www.w3.org/2000/01/rdf-schema#label> ?year_labelTemp .\n { SELECT distinct ?year1\n WHERE\n { ?film <http://www.wikidata.org/prop/direct/P577> ?date ;\n <http://www.wikidata.org/prop/direct/P31> <http://www.wikidata.org/entity/Q11424>\n BIND(year(?date) AS ?year1)\n }\n } \n }\n limit 10\n
Run Code Online (Sandbox Code Playgroud)\n\n根据 SPARQL 中的查询评估,首先评估子查询,然后将其结果投影到包含查询。因此,将首先评估该子查询。
\n\nSELECT distinct ?year1\n WHERE\n { ?film <http://www.wikidata.org/prop/direct/P577> ?date ;\n <http://www.wikidata.org/prop/direct/P31> <http://www.wikidata.org/entity/Q11424>\n BIND(year(?date) AS ?year1)\n }\n
Run Code Online (Sandbox Code Playgroud)\n\n子查询准确地给出了预期的结果(130 个不同的年份)。然后,该子查询(变量)的结果?year1
将被投影出来并与外部选择中的三元组模式连接。
?year1 <http://www.w3.org/2000/01/rdf-schema#label> ?year_labelTemp .\n
Run Code Online (Sandbox Code Playgroud)\n\n但是,由于外部选择不应该有任何数据(没有标签?year1
),因此连接不会给出任何结果。
令人惊讶的是(至少对我来说),执行首先声明的整个查询 () 给出了结果,而且结果很奇怪。
\n\n wd:Q43576 Mi\xc3\xab\n …
Run Code Online (Sandbox Code Playgroud) 现在我有一个查询返回特定实体的各种属性列表:
SELECT ?propLabel ?val WHERE {
BIND(wd:Q122426 as ?entity)
{
BIND(?entity AS ?valUrl)
BIND("n/a" AS ?propUrl)
BIND("name"@en AS ?propLabel)
?entity rdfs:label ?val.
FILTER((LANG(?val)) = "en")
# instance of
} UNION {
?entity wdt:P31 ?valUrl .
BIND("instance of"@en AS ?propLabel)
# filter isIRI(?valUrl)
?valUrl rdfs:label ?valLabel
FILTER (LANG(?valLabel) = "en")
BIND(CONCAT(?valLabel) AS ?val)
# occupation
} UNION {
?entity wdt:P106 ?val.
BIND("occupation"@en AS ?propLabel)
# position held
} UNION {
?entity wdt:P39 ?val.
BIND("position"@en AS ?propLabel)
# ... and more ... …
Run Code Online (Sandbox Code Playgroud) wikidata ×10
sparql ×7
wikidata-api ×3
wikipedia ×2
blazegraph ×1
dbpedia ×1
java ×1
mediawiki ×1
rdf ×1
scala ×1
semantic-web ×1