标签: wikidata

如何有效地解析C++中的bigdata json文件(wikidata)?

我有一个大约36 GB的json文件(来自wikidata),我希望更有效地访问它.目前我在C++中使用rapidjsons SAX风格的API - 但解析整个文件需要我的机器大约7415200毫秒(= 120分钟).我想根据json对象内部的两个主键之一('name'或'entity-key' - >'Stack Overflow'或'Q549037')访问此文件中的json对象.这意味着我必须在最坏的情况下解析当前的整个文件.

所以我想到了两种方法:

  • 将大文件拆分成数十亿个小文件 - 文件名指示名称/实体键(即Q549037.json/Stack_Overflow.json或Q549037#Stack_Overflow.json) - >不确定存储过载
  • 从主键到ftell()文件中的位置构建某种索引.构建索引应该花费大约120分钟(就像现在解析一样),但访问速度应该更快
    • 即使用两个东西std::unorderedmap(可能再次遇到内存问题)
    • 索引文件 - 创建两个文件:一个按名称排序的条目和一个按实体键排序的文件(由于排序,创建这些文件可能需要更长的时间)

这样的问题最好的做法是什么?我应该遵循哪种方法?还有其他想法吗?

c++ json bigdata rapidjson wikidata

8
推荐指数
1
解决办法
1326
查看次数

查询WikiData,p和wdt默认前缀之间的区别

我是wikidata的新手,我不知道何时应该使用->

wdt前缀(http://www.wikidata.org/prop/direct/

当我应该使用->

p前缀(http://www.wikidata.org/prop/)。

在我的sparql查询中。有人可以解释这些含义是什么吗?有什么区别?

rdf sparql wikidata

8
推荐指数
2
解决办法
583
查看次数

维基数据查询超时

我想将属性实例添加到此示例查询中,以仅获取作为人类实例的项目。

这是示例查询:

SELECT ?entityLabel (YEAR(?date) as ?year) 
WHERE
{
    BIND(MONTH(NOW()) AS ?nowMonth)
    BIND(DAY(NOW()) AS ?nowDay)

    ?entity wdt:P569 ?date .
    FILTER (MONTH(?date) = ?nowMonth && DAY(?date) = ?nowDay)
    SERVICE wikibase:label {
        bd:serviceParam wikibase:language "en" .
    }
}
LIMIT 10
Run Code Online (Sandbox Code Playgroud)

这是我使用属性实例调整后的版本:

SELECT ?entityLabel (YEAR(?date) as ?year) 
WHERE
{
    ?entity wdt:P31 wd:Q5 .

    BIND(MONTH(NOW()) AS ?nowMonth)
    BIND(DAY(NOW()) AS ?nowDay)

    ?entity wdt:P569 ?date .
    FILTER (MONTH(?date) = ?nowMonth && DAY(?date) = ?nowDay)
    SERVICE wikibase:label {
        bd:serviceParam wikibase:language "en" .
    }
}
LIMIT 10
Run Code Online (Sandbox Code Playgroud)

但我也只添加了一行,现在我得到了查询超时。有谁知道我如何云改进我的查询,以便我不会超时。

sparql wikidata

8
推荐指数
1
解决办法
2554
查看次数

获取作为给定项目实例的所有维基数据项目

维基数据有一个名为智能手机模型的项目.
我想得到它的所有实例.

问题:如何使用实时服务器以编程方式获取实例的标识符?

最好不要包含在WhatLinksHere中显示但在"Wikidata:"命名空间而不是主命名空间中的误报.

mediawiki-api wikidata wikidata-api

7
推荐指数
2
解决办法
2003
查看次数

如何从Wikidata Id获取维基百科页面?

如何从维基数据ID(例如:Q19675)获取维基百科页面(使用特定语言,比如法语)?这个问题似乎很明显,但奇怪的是,我在网上找不到任何内容.我正在寻找一个url命令,我可以使用请求Python模块,如:

url = "https://www.wikidata.org/w/api.php?action=some_method&ids=Q19675"
r = requests.post(url, headers={"User-Agent" : "Magic Browser"})
Run Code Online (Sandbox Code Playgroud)

有人可以帮帮我吗?

wikipedia-api python-2.7 wikidata wikidata-api

7
推荐指数
1
解决办法
2096
查看次数

是否有 wikipedia Pageid 到 wikidata id 映射的转储?

此页面: http: //wikidata.dbpedia.org/downloads/20160111/ 有一个名为 wikidatawiki-20160111-page-ids.ttl.bz2 的转储,其中包含 Wikidata id 到他们所谓的 wikipage id。不过,维基页面 ID 似乎与维基百科页面 ID 不同。

例如德国:

  • 维基百科 pageid = 11867
  • 维基数据 id = Q183 和维基页面 id = 322。

所以基本上这个转储将 Q183 映射到 322,而我需要将 Q183 映射到 11867。

作为参考:https://en.wikipedia.org/w/index.php? title=Germany&curid=11867 URL 中的 curid 代表维基百科页面 id。

是否有任何具有维基数据 ID 和维基百科页面 ID 的等效转储文件?(我不想使用 API 并像下面这样一一循环我的维基百科页面 id:https://en.wikipedia.org/w/api.php ?action=query&prop=pageprops&format=xml&pageids=11867 )

编辑:我不确定 waht 到底是 wikipage id,但也许在我在问题中提到的转储顶部有一个 wikipageId 到 Wikipedia pageid 映射文件。

wikipedia wikidata

7
推荐指数
2
解决办法
3618
查看次数

如何使用其标签查询Wikidata项目?

如何查询维基数据以获取标签包含单词的所有项目?我尝试了这个,但没有奏效; 它什么也没找到.

SELECT ?item ?itemLabel WHERE {
  SERVICE wikibase:label {
    bd:serviceParam wikibase:language "en".
    ?item rdfs:label ?itemLabel.  
  }
FILTER(CONTAINS(LCASE(?itemLabel), "keyword"))
}
LIMIT 1000
Run Code Online (Sandbox Code Playgroud)

sparql wikidata

7
推荐指数
2
解决办法
3637
查看次数

wikidata获取包含项目标签和值的所有属性

我的问题是我如何提取所有属性以及各自的标签,这些标签也是在wikidata网页上呈现的,最好是通过SPARQL.

以wikidata上的Google条目为例.对于物业P414(证券交易所)或P159,有像P969(位于街道地址)的子属性.一旦您查询 wbgetentities为qualifieres,它们就会显示出来.问题wbgetentities是缺少标签.我wdt:P17 => country => United States of America使用以下SPARQL查询获得所需的输出(例如):

SELECT ?prop_id ?prop_label ?prop_val_label WHERE {
  VALUES (?company) {
    (wd:Q95)
  }
  ?company ?prop_id ?company_item.
  ?wd wikibase:directClaim ?prop_id.
  ?wd rdfs:label ?prop_label.
  OPTIONAL {
    ?company_item rdfs:label ?prop_val.
    FILTER((LANG(?prop_val)) = "en")
  }
  BIND(COALESCE(?prop_val, ?companyItem) AS ?prop_val_label)
  FILTER((LANG(?prop_label)) = "en")
}
Run Code Online (Sandbox Code Playgroud)

但这些"子属性"缺失,因为它们不是直接索赔.要提取单个语句限定符,我可以这样做:

SELECT ?company ?hq ?country WHERE {
  wd:Q95 p:P159 ?company.
  OPTIONAL {
    ?company ps:P159 ?hq.
    ?company pq:P17 ?country. 
  }
}
Run Code Online (Sandbox Code Playgroud)

但问题是,是否有办法将所有内容组合到一个查询中?

database sparql wikidata

7
推荐指数
1
解决办法
2253
查看次数

在PHP中使用历史日期(如10,000或一百万年前)的最佳方法是什么?

我正在解析Wikidata JSON数据集以收集历史数据。到目前为止,我还没有找到正确的格式将它们存储在PHP / MySQL中(通过Doctrine)。

在过去的几千年中,DateTime似乎可以正常工作,但是我不想将我的应用程序局限于此。完全有可能必须处理Universestart time属性。此外,我还想存储数据的精度,因为我们可能知道一个人的出生年份和另一个人的确切分钟。(编辑:就目前而言,日期就足够了,我可以没有时间生活,我的例子被夸大了。不过,我有时知道确切的日期,有时甚至是月份甚至年份。)

我考虑过要为日期创建自己的类(我不打算计算时差或类似的东西),但我也不想重新发明轮子。

令人遗憾的是,某些搜索引擎以及此处的搜索结果都令人...目结舌。

您可以分享任何想法或经验吗?

php date doctrine-orm wikidata

7
推荐指数
1
解决办法
127
查看次数

维基数据查询重复项

抱歉,如果我的英语不好,但我真的没有任何地方可以用我的母语问这个问题。我一直在尝试为 Wikidata 创建 SPARQL 查询,该查询应该创建 1925-1950 年间创作的所有恐怖小说、作者姓名以及图片(如果有)的列表:

SELECT DISTINCT ?item ?itemLabel ?author ?name ?creation ?picture
WHERE
{
    ?item wdt:P136 wd:Q193606 . # book
    ?item wdt:P50 ?author .   # author
    ?item wdt:P577 ?creation .
    ?item wdt:P577 ?end .
  ?author rdfs:label ?name .    
  OPTIONAL{ ?item wdt:P18 ?picture }
  FILTER (?creation >= "1925-01-01T00:00:00Z"^^xsd:dateTime) .
  FILTER (?end <= "1950-12-31T23:59:59Z"^^xsd:dateTime) .

SERVICE wikibase:label
{ 
bd:serviceParam wikibase:language "en" .
} 
}
Run Code Online (Sandbox Code Playgroud)

但是,由于某种原因,该查询在列表中放置了重复项。DISTINCT 没有多大作用。一段时间后,我发现原因是“?item rdfs:label ?name .”。如果删除此行,则不会列出重复项。但我需要这一行来在列表中显示作者姓名!有想法该怎么解决这个吗?

sparql wikidata

6
推荐指数
1
解决办法
2293
查看次数