区分维基百科与正常页面的歧义

时间:2011-11-16 22:01:04

标签: xpath wikipedia wikipedia-api

目前,我正在尝试将给定维基百科页面的内容检索为纯文本文件。使用XPath,我有完美的代码。但是,只有一个简单的问题:维基百科上的某些页面是消歧页面。

现在,这本身并不引人注目。我编写了一个XPath表达式,用于检索维基百科消歧页面的第一个链接:(/html/body/div[@id='content']/div[@id='bodyContent']//a[starts-with(@href, '/wiki')]/@href)[1]。这意味着我可以使用第一个链接作为我正在尝试从中检索内容的页面。

不,真正的问题是我还没有找到任何方法知道何时使用该代码(从消除歧义页面检索第一个链接的代码)或另一段代码(从有趣的页面直接获取内容的那个,非消歧的一个)。实际上,我似乎找不到区分消除歧义的页面和正常页面的方法。

到目前为止,我已经尝试过了:

查看消除歧义的页面的来源并将其与正常页面进行比较:我找不到差异。

查看两种类型页面上的内容:这里唯一的区别是有些页面说“此页面可能会引用顶部”。但是,并非所有页面都提到了这一点。

一个简单的解决方案是查看页面的标题(例如,http://en.wikipedia.org/wiki/Boston_(disambiguation))。但是,并非所有消除歧义的网页都在其标题中包含“消除歧义”一词:http://en.wikipedia.org/wiki/Freedom

因此,总而言之,是否有人知道如何通过实际内容区分维基百科消歧页面和维基百科页面?

编辑:这与问题无关,但我正在使用Objective-C进行编程。

2 个答案:

答案 0 :(得分:1)

现在可以使用?action=query&prop=pageprops

直接从API中获取,而不是依赖于类别

示例:http://en.wikipedia.org/w/api.php?action=query&prop=pageprops&format=json&titles=Ekeby将返回:

{"query":{"pages":{"24789600":{"pageid":24789600,"ns":0,"title":"Ekeby","pageprops":{"disambiguation":"","wikibase_item":"Q410694"}}}}}

答案 1 :(得分:0)

将消歧页面与实际文章区分开来的正确方法是,所有消歧页面都是隐藏类别Category:All disambiguation pages的成员。

但是解析实际的HTML可能不是一个好主意。您应该使用the API代替。使用它,您可以检查类别中的成员身份或获取文章文本。许多语言已经有了与API通信的库,但我没有找到一个用于客观C的文档。