[知识图谱]Python 您所在的位置:网站首页 wikipedia知识图谱 [知识图谱]Python

[知识图谱]Python

2023-08-07 05:33| 来源: 网络整理| 查看: 265

目录 项目链接前言官方API使用`action` = `wbsearchentities`参数设置查询过程json数据解析 `action`=`wbgetentities`参数设置查询过程json数据解析 维基百科数据模型(Wikidata datamodel)ch1.基本数据模型(Datamodel)---> ch2.label(实体名称)---> ch3.aliases(别名)---> ch4.descriptions(描述)---> ch5.claims(属性)⭐--> ch5.1 datatype(数据类型)--> ch5.2 valuetype(值类型)wikibase-entityid(维基数据实体id值)globecoordinate(地理位置)time(时间)string(字符串)monolingualtext(未翻译文本)quantity(十进制数字) --> ch 5.3 qualifiers-order(限定词顺序)--> ch 5.4 qualifiers(限定词)--> ch 5.5 references(引用) ---> ch6.sitelinks(外部链接)Example部分`claims``sitelinks`

项目链接

为了实现知识图谱API的高效查询,自己也集成了一些常用API的多线程查询接口,其中包括WikiMedia API、DBpedia Lookup、SPARQL语言查询、Bing搜索引擎、Ask搜索引擎,欢迎大家提出宝贵意见,项目链接如下: A-BigTree/searchmanage_Wiki

前言 维基百科是☞多种语言、内容自由个网络百科全书项目。而维基数据是一个自由的协作式的多语言辅助数据库,用于收集结构化的数据,旨在支援维基百科、维基共享资源以及其他维基媒体运动中的项目。维基数据可以通过多种方式访问:使用内建工具、外部工具或程序接口。 Wikidata Query和Reasonator是搜索和检查维基数据项的一些流行工具。tools一页有大量有趣的项目可供探索。客户端维基可以使用Lua Scribunto接口访问其页面的数据。您可以使用Wikidata API独立检索所有数据。 我们这次利用python调用官方API来实现数据的获取。 官方API使用 注意:因为某些原因wiki国内好像访问不稳定,必要请在魔法😀下使用

Wiki官方提供了很多不同功能的接口,具体见其官方文档。

url=https://www.wikidata.org/w/api.php

这里我们使用两个action,action=wbsearchentities和action=wbgetentities

action=wbsearchentities:对输入文本进行搜索得到实体id;

action=wbgetentities:对输入实体id搜索得到该实体的详细信息;

action = wbsearchentities 接口API文档MediaWiki API help - Wikidata 参数设置

action:'wbsearchentities'

format:'json'

search: (带查询文本)必须⭐

language: (查询语言)必须⭐

type: (查询实体类型,默认:'item')

limit: (结果返回最大数量,默认:7)

strictlanguage: (是否禁用语言回退)非必须

continue: (继续搜索的偏移量,默认:0)

props: (返回每个实体的这些属性,默认:'url',好像只有url😓)

查询过程

以文本"SEU"为例

import requests url = "https://www.wikidata.org/w/api.php" params = { 'action': 'wbsearchentities', 'format': 'json', 'search': "SEU", # 搜索文本 'language': 'en', # 查询语言(英文) 'type': 'item', 'limit': 10 # 返回最大数目 } # 访问 get = requests.get(url=url, params=params) # 转为json数据 re_json = get.json() print(re_json) json数据解析

该json数据结构较简单,分析如下:

searchinfo: search:“SEU” search: 0..*(结果队列) id(实体id):(目标值)titile(实体id,同id):(目标值)pageid(网页id):(目标值)display: label(实体名称): language(语言):(目标值)value:(目标值) (description)(实体描述) language(语言):(目标值)value:(目标值) repository(存储库):(目标值)url(实体链接):(目标值)concepturi(实体概念链接):(目标值)label(实体名称):(目标值)description(实体描述):(目标值)match(该结果的匹配实体出处,即为什么返回该实体): type(查询部分,label? alias(别名)?,description?):(目标值)language:entext:“SEU” aliases(别名,简称): 0..*(列表) (目标值) search-continue(返回结果数目):(目标值)success(是否查询成功):1

通过解析我们可以得到一些查询结果的实体id,比如Q3551770,但是我们只能简单知道该实体的名称、描述,如果我们想知道该实体的更多详细信息,比如属性关系等,我们就需要利用下面介绍的action=wbgetentities

action=wbgetentities 接口API文档MediaWiki API help - Wikidata 参数设置 action:'wbgetentities'format:'json'ids: (带查询实体id,可接受多个用'|'隔开)必须⭐language: (查询语言)非必须

还有更多的参数可以调整设置,不过不是必须的,这里就不再介绍,详情见官方文档

查询过程

以实体id Q3551770为例

import requests url = "https://www.wikidata.org/w/api.php" params = { 'ids': 'Q3551770', # 实体id,可多个,比如'Q123|Q456' 'action': 'wbgetentities', 'format': 'json', 'language': 'en', } # 访问 get = requests.get(url=url, params=params) # 转为json数据 re_json = get.json() print(re_json) json数据解析

哦哦哦哦哦!重头戏来喽! 通过输出的json格式数据我们发现这个json数据”又臭又长“,看了让人头大。

其实这里的每个实体的数据包含了该实体的全部信息,符合维基百科数据模型,所以想要真正清晰的解析该json数据,就要明白维基百科数据模型层次结构。下面才开始今天真正是主题。

前方高能!

维基百科数据模型(Wikidata datamodel) 维基百科数据模型介绍页Help:Wikidata datamodel - Wikidata使用官方API(action=wbgetentities)查询wikidata返回实体json文件时,json数据的基本结构(对应键值) ch1.基本数据模型(Datamodel) entities: Qxx: id:Qxxtitile:Qxxtype:itempageid:(目标值)lastrevid:(目标值)label: —> ch 2(aliases): —> ch 3(descriptions): —> ch 4(claims): —> ch 5(sitelinks): —> ch 6 Qxxx: … success:1 —> ch2.label(实体名称)

(xx为语言标记,之后不再赘述) 具体见 https://www.wikidata.org/w/api.php?action=help&modules=wbgetentities的Parameters中 language介绍。

labels: xx: language:xxvalue:(目标值) —> ch3.aliases(别名) aliases: xx 0..(列表) language:xxvalue:(目标值) —> ch4.descriptions(描述) descriptions: xx language:xxvalue:(目标值) —> ch5.claims(属性)⭐

(Pxx为属性编号)

claims: Pxx: 0..*(列表) mainsnak snaktype:valueproperty:Pxxhash:(目标值)datatype: --> ch 5.1datavalue: --> ch 5.2 type:statement(qualifiers-order): --> ch 5.3(qualifiers): --> ch 5.4(references): --> ch 5.5 –> ch5.1 datatype(数据类型) wikidata目前确定的数据类型共17种,每种数据类型对应一种值类型(valuetype)(List of all data types available - Wikidata,Help:数据类型 - Wikidata),列表如下: Datetypejson键值ValuetypeCommons media (参考维基共享资源上的文件,图片等)commonsMediastringGlobe coordinate (地理位置,经纬度)globe-coordinateglobecoordinateItem (内部链接到另一个项)wikibase-itemwikibase-entityidProperty (指向属性的内部链接)wikibase-propertywikibase-entityidString (不需要翻译成不同语言或数字格式的字符链,数字和符号)stringstringMonolingual text (未翻译为其他语言的字符串,当地语言编写的位置实体名称,某种标识符,化学式或拉丁学名)monolingualtextmonolingualtextExternal identifier (表示外部系统中使用的标识符的字符串)external-idstringQuantity (代表一个十进制数字,以及有关该数字的不确定性区间的信息,以及一个测量单位)quantityquantityTime (以格里高利或朱利安日历存储日期)timetimeURL (用于标识某种外部资源,可能是某种外部网站的链接)urlstringMathematical expression (显示为数学公式的格式化字符串)mathstringGeographic shape (参考维基共享资源上的地图数据文件命名空间)geo-shapestringMusical Notation (描述遵循 LilyPond 语法的音乐的字符串)musical-notationstringTabular data (参考维基共享资源上的表格数据文件命名字符串)tabular-datastringLexeme (对于引用另一个 Lexeme 的 Lexemes 的陈述)wikibase-lexemewikibase-entityidForm (对于 Lexemes 上的陈述,这些陈述引用了其他 Lexeme 上的 Forms 以表明它们的关系)wikibase-formwikibase-entityidSense (对于在其他 Lexemes 上引用 Senses 的 Lexemes 的陈述)wikibase-sensewikibase-entityid –> ch5.2 valuetype(值类型) 确定datatype(数据类型)后,可以知道valuetype(值类型),从而确定value的结构层次;由ch5.1可知,17种datatype(数据类型)对应共6种valuetype(值类型); wikibase-entityid(维基数据实体id值) datavalue: type:wikibase-entityidvalue: entity-type(实体类型):itemnumeric-id(实体id):(目标值)(id)(类型+id,如Q5,P31):(目标值) globecoordinate(地理位置) datavalue: type:globecoordinatevalue: latitude(纬度):(目标值)longitude(经度):(目标值)precision(精度):(目标值)globe(观测星球实体链接):(目标值) time(时间) datavalue: type:timevalue: time(时间):(目标值)precision(精度):(目标值)before(给定时间后可能有多少个单位的显式整数值):(目标值)after(给定时间前可能有多少个单位的显式整数值):(目标值)timezone(时区信息作为与 UTC 的偏移量(以分钟为单位)):(目标值)calendarmodel(作为 URI 给出的显式值):(目标值) string(字符串)

datavalue:

type:string

value:(目标值)

monolingualtext(未翻译文本) datavalue: type:monolingualtextvalue: text(文本信息):(目标值)language(语言):(目标值) quantity(十进制数字) datavalue: type:quantityvalue: amount(主值):(目标值)lowerBound(下界误差):(目标值)upperBound(上界误差):(目标值)unit(默认为“1”的字符串的隐含部分):"1" –> ch 5.3 qualifiers-order(限定词顺序) qualifiers-order: 0..*(列表) Pxx… –> ch 5.4 qualifiers(限定词) qualifiers: Pxx: 0..*(列表) snaktype:valueproperty:Pxxhash:(目标值)datatype: --> ch 5.1datavalue: --> ch 5.2 –> ch 5.5 references(引用) references: 0..*(列表) hash:(目标值)snaks-order: 0..*(列表) Pxx… snaks: Pxx: 0..*(列表) snaktype:valueproperty:Pxxhash:(目标值)datatype: --> ch 5.1datavalue: --> ch 5.2 —> ch6.sitelinks(外部链接) sitelinks: xxwiki: site:xxwiki(badges): 0..*(列表) id(目标值) title:(目标值) xxwikivoyage: site:xxwikivoyage(badges): 0..*(列表) id(目标值) title:(目标值) commonswiki: site:commonswiki(badges): 0..*(列表) id(目标值) title:(目标值) Example (https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q3551770&languages=en)结果如下 { "entities": { "Q3551770": { "pageid": 3380864, "ns": 0, "title": "Q3551770", "lastrevid": 1653372026, "modified": "2022-06-03T07:33:09Z", "type": "item", "id": "Q3551770", "labels": { "en": { "language": "en", "value": "Southeast University" } }, "descriptions": { "en": { "language": "en", "value": "university in Nanjing, China" } }, "aliases": { "en": [ { "language": "en", "value": "SEU" } ] }, "claims": { .... }, "sitelinks":{ ... }, "success": 1 } 部分claims "claims": { "P159": [ { "mainsnak": { "snaktype": "value", "property": "P159", "hash": "5491d0bd1b2b30b9e4747254d508f277795a3c7f", "datavalue": { "value": { "entity-type": "item", "numeric-id": 16666, "id": "Q16666" }, "type": "wikibase-entityid" }, "datatype": "wikibase-item" }, "type": "statement", "qualifiers": { "P625": [ { "snaktype": "value", "property": "P625", "hash": "2d91cc4e510689c095172344a17b0a0bee41fa4b", "datavalue": { "value": { "latitude": 32.057777777778, "longitude": 118.78888888889, "altitude": null, "precision": 0.0001, "globe": "http://www.wikidata.org/entity/Q2" }, "type": "globecoordinate" }, "datatype": "globe-coordinate" } ] }, "qualifiers-order": [ "P625" ], "id": "Q3551770$b269c8db-4c49-d2c9-628e-393a5c0d9b65", "rank": "normal" } ], "P856": [ { "mainsnak": { "snaktype": "value", "property": "P856", "hash": "0d857dd8262d0b6729ea3b911c534d0075fbb77d", "datavalue": { "value": "http://www.seu.edu.cn/", "type": "string" }, "datatype": "url" }, "type": "statement", "id": "Q3551770$8ed363d2-400b-f684-a881-bd02902fe19d", "rank": "normal" } ], "P910": [ { "mainsnak": { "snaktype": "value", "property": "P910", "hash": "1f3b85ac00b0aa7408defdb9e93dbf9278752b73", "datavalue": { "value": { "entity-type": "item", "numeric-id": 8781146, "id": "Q8781146" }, "type": "wikibase-entityid" }, "datatype": "wikibase-item" }, "type": "statement", "id": "Q3551770$6C7F1667-F717-4374-A48D-4A0838D77B41", "rank": "normal" } ] } sitelinks "sitelinks": { "cswiki": { "site": "cswiki", "title": "Jihov\u00fdchodn\u00ed univerzita", "badges": [] }, "dewiki": { "site": "dewiki", "title": "Universit\u00e4t S\u00fcdostchinas", "badges": [] }, "enwiki": { "site": "enwiki", "title": "Southeast University", "badges": [] }, "frwiki": { "site": "frwiki", "title": "Universit\u00e9 du Sud-Est", "badges": [] }, "ganwiki": { "site": "ganwiki", "title": "\u4e1c\u5357\u5927\u5b66", "badges": [] }, "idwiki": { "site": "idwiki", "title": "Universitas Tenggara", "badges": [] } }

综上,我们已经清楚了维基百科数据模型的解析的方法啦,可以愉快获得我们想要的数据啦! 😊 如果看完觉得博主写的不错,请给博主点赞关注收藏鼓励一下哦🤭



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有