从维基百科文章中摘录?

时间:2010-04-01 12:28:17

标签: api parsing wikipedia wikipedia-api

我一直在Wikipedia API上下,但我无法弄清楚是否有很好的方法来获取文章的摘录(通常是第一段)。获得该段落的HTML格式也很不错。

我目前看到的获取类似代码片段的唯一方法是执行全文搜索(example),但这不是我想要的(太短)。

有没有其他方法来获取维基百科文章的第一段而不是野蛮地解析HTML / WikiText?

4 个答案:

答案 0 :(得分:6)

使用此链接以xml格式获取未解析的简介 “http://en.wikipedia.org/w/api.php?format=xml&action=query&prop=extracts&exsentences=10&titles=Aati kalenja”

之前我可以通过添加iframe与src一样在单个页面中引入一个主题/文章列表,如上面的链接..但现在chrome正在抛出此错误 - “拒绝显示文档因为显示禁止通过X-Frame-Options。“通过什么方式?请帮助..

答案 1 :(得分:3)

我发现无法通过API执行此操作,因此我使用PHP's DOM functions解析HTML。这很容易,其中包括:

$doc = new DOMDocument();
$doc->loadHTML($wikiPage);
$xpath = new DOMXpath($doc);
$nlPNodes = $xpath->query('//div[@id="bodyContent"]/p');
$nFirstP = $nlPNodes->item(0);
$sFirstP = $doc->saveXML($nFirstP);
echo $sFirstP; // echo the first paragraph of the wiki article, including <p></p>

答案 2 :(得分:3)

正如ARAVIND VR所说,在运行MobileFrontend extension的wiki上 - 包括维基百科 - 您可以使用MediaWiki API通过prop=extracts API query轻松获取文章的摘录。

例如,this link会在JSON包装器中为您提供Stack Overflow article on Wikipedia的简短摘录。

查询的各种选项可用于控制摘录格式(HTML或纯文本),其最大长度(以字符和/或句子为单位,并可选择将其限制为文章的介绍部分)和格式输出中的章节标题。也可以在单个查询中从多篇文章中获取介绍摘录。

答案 3 :(得分:2)

可以使用API​​获取文章的“介绍”,参数rvsection=0explained here

将Wiki文本转换为HTML有点困难;我想有更完整/官方的方法,但这就是我最终做的事情:

// remove templates (even nested)
do {
    $c = preg_replace('/[{][{][^{}]+[}][}]\n?/', '', $c, -1, $count);
} while ($count > 0);
// remove HTML comments
$c = preg_replace('/<!--(?:[^-]|-[^-]|[[[^>])+-->\n?/', '', $c);
// remove links
$c = preg_replace('/[[][[](?:[^]|]+[|])?([^]]+)[]][]]/', '$1', $c);
$c = preg_replace('/[[]http[^ ]+ ([^]]+)[]]/', '$1', $c);
// remove footnotes
$c = preg_replace('#<ref(?:[^<]|<[^/])+</ref>#', '', $c);
// remove leading and trailing spaces
$c = trim($c);
// convert bold and italic
$c = preg_replace("/'''((?:[^']|'[^']|''[^'])+)'''/", $html ? '<b>$1</b>' : '$1', $c);
$c = preg_replace("/''((?:[^']|'[^'])+)''/", $html ? '<i>$1</i>' : '$1', $c);
// add newlines
if ($html) $c = preg_replace('/(\n)/', '<br/>$1', $c);