以多种语言查询维基百科网址的维基数据

如何解决以多种语言查询维基百科网址的维基数据

我正在尝试使用维基数据作为中介,从维基数据中列出的唯一标识符(例如 VIAF ID)获取维基百科描述。

我已设法将这个查询拼凑起来,以从给定的 VIAF ID 中获取维基百科页面 ID(下面的 "153672966" 是“南伊利诺伊大学出版社”的 VIAF ID):

SELECT ?pageid WHERE {
    ?item wdt:P214 "153672966". 
    [ schema:about ?item ; schema:name ?name ;
      schema:isPartOf <https://en.wikipedia.org/> ]
     SERVICE wikibase:mwapi {
         bd:serviceParam wikibase:endpoint "en.wikipedia.org" .
         bd:serviceParam wikibase:api "Generator" .
         bd:serviceParam mwapi:generator "allpages" .
         bd:serviceParam mwapi:gapfrom ?name .
         bd:serviceParam mwapi:gapto ?name .
         ?pageid wikibase:apIoUtput "@pageid" .
    }
}

这会产生 pageid 9393762,我可以在 Wikipedia API 中查找它并使用此请求获取我需要的介绍文本:

https://en.wikipedia.org/w/api.PHP?format=json&action=query&prop=extracts&exintro&explaintext&redirects=1&pageids=9393762

生成的响应包含取自维基百科文章第一部分的未解析描述 (explaintext),因此这让我知道需要使用英语。

现在的问题是我需要在一个国际化的网站上使用它,在那里我可能甚至不知道将来可能会使用哪些语言。针对 Wikidata 的查询应该在后端作为批处理作业运行,而从 Wikipedia 获取实际描述将从前端完成并异步呈现。

理想情况下,我希望维基数据查询为有维基百科文章可用的每种给定语言返回一个 pageid。在前端,我将检查当前活动语言是否具有关联的 pageid调用 Wikipedia api 或在未给出 pageid 时呈现回退。

将来我需要使用其他库相关标识符(例如 ISNI)进行类似查询,但我认为这与当前用例没有太大不同。

这是完成工作的合理方式吗?我该如何扩展它以支持多种语言?

解决方法

要获得说明文本,您不一定需要 pageid,但页面标题就足够了。

您通过以下查询从维基数据获得的所有语言的页面标题:

SELECT ?item ?title ?site WHERE {
    ?item wdt:P214 "153672966" .
      [ schema:about ?item ; schema:name ?title ;
      schema:isPartOf ?site ] . 
}

然后你可以使用维基百科 API 来获取解释文本:

https://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exintro&explaintext&redirects=1&titles=Southern Illinois University Press

使用页面标题的缺点是它们不稳定。因此,您需要定期运行批处理作业以检查文章的重命名。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?