如何在不知道所有字符的确切情况的情况下使维基百科API正常化和重定向?

时间:2014-01-18 23:07:20

标签: redirect mediawiki normalization wikipedia-api mediawiki-api

如果我试图通过他们的API获取维基百科上的页面的语言链接:

http://en.wikipedia.org/w/api.php?action=query&prop=langlinks&format=json&lllimit=10&llurl=&titles=wreck-it%20Ralph&redirects=

我得到了一份结果清单。

但是如果我像拉尔夫一样贬低拉尔夫的R:

http://en.wikipedia.org/w/api.php?action=query&prop=langlinks&format=json&lllimit=10&llurl=&titles=wreck-it%20ralph&redirects=

我没有结果。

查看返回的信息,看起来维基百科将第一个例子中的“wreck-it Ralph”规范化为“Wreck-it Ralph”,重定向到“Wreck-It Ralph”。

在第二个例子中,“wreck-it ralph”被标准化为“Wreck-it ralph”,它显然没有重定向。

http://wikipedia.org上搜索“wreck-it ralph”当然有效:

http://www.wikipedia.org/search-redirect.php?family=wikipedia&search=wreck-it+ralph&language=en

我能否以相同的方式使langlinks查询工作,当我不知道搜索词的所有字符的确切情况时帮助我?

更新Sorawee的答案中,我设法找到了如何进行不区分大小写的搜索:https://en.wikipedia.org/w/api.php?action=query&generator=search&format=json&gsrsearch=wreck-it%20ralph&gsrlimit=1&prop=info

1 个答案:

答案 0 :(得分:6)

在MediaWiki中,所有标题将自动大写。因此,“wreck-it Ralph”和“Wreck-it Ralph”是同一页。同样,“wreck-it ralph”和“Wreck-it ralph”也是同一页。请注意,大写只需要与第一个字母一起使用。

MediaWiki还有一个名为“重定向页面”的页面。重定向页面可以将您从页面重定向到另一个完全不同的页面。例如,https://en.wikipedia.org/wiki/Template:cn会将您重定向到https://en.wikipedia.org/wiki/Template:Citation_needed。这些页面由用户创建,而不是软件。

您提出的情况如下图所示。

  

“wreck-it Ralph”= normalized => “Wreck-it Ralph”=重定向=> “Wreck-It Ralph”(找到了)

     

“wreck-it ralph”= normalized => “Wreck-it ralph”(不存在)

所以现在你知道你不能查询页面“wreck-it ralph”,因为它不存在。

但是,如果你想从“wreck-it Ralph”中查询,你可能会或者可能不会得到“Wreck-It Ralph”的langlinks。这取决于参数“& redirects =”。如果你没有这个参数,它将不会返回任何langlinks,因为“wreck-it Ralph”本身没有langlinks。使用“& redirects =”,api将在重定向页面搜索langlinks(如果存在)。因此,它将返回您想要的langlinks。你可以比较:

对于http://www.wikipedia.org/search-redirect.php?family=wikipedia&search=wreck-it+ralph&language=en为什么有效的问题,答案是search-redirect.php不是api。它搜索并返回最近的匹配,而api只返回确切的结果。