从维基百科文章提取第一段(Python)
我怎么用Python提取维基百科文章的第一段呢?
比如说,对于阿尔伯特·爱因斯坦,第一段内容是:
阿尔伯特·爱因斯坦(发音为/ˈælbərt ˈaɪnstaɪn/;德语:[ˈalbɐt ˈaɪnʃtaɪn](听));1879年3月14日 – 1955年4月18日)是一位理论物理学家、哲学家和作家,被广泛认为是历史上最具影响力和标志性的科学家之一。他是一位德瑞混血的诺贝尔奖得主,常常被视为现代物理学的奠基人。爱因斯坦于1921年获得诺贝尔物理学奖,表彰他在理论物理学方面的贡献,特别是他发现的光电效应定律。
10 个回答
维基百科使用了一种叫做MediaWiki的扩展,它提供了一个API模块,可以实现你想要的功能。这个叫做TextExtracts的扩展,能够通过action=query&prop=extracts
这个请求,返回前N句话和/或仅仅是文章的介绍,格式可以是HTML或者纯文本。
action=query&prop=extracts
是用来请求这些信息的。- (ex)sentences=2, (ex)intro=, (ex)plaintext这些是模块的参数(可以查看第一个链接的API文档),意思是请求从介绍中获取两句纯文本;如果想要HTML格式,可以不写后面的参数。
redirects=
(true)表示如果你请求“titles=Einstein”,你会得到阿尔伯特·爱因斯坦页面的信息。formatversion=2
可以让返回的数据格式更干净,使用UTF-8编码。
有很多库可以帮助你调用MediaWiki的API,比如DGund的回答中提到的那个,但其实自己调用API也并不难。
搜索结果中的页面信息讨论了如何获取这个文本提取,以及如何获取文章的描述和主图像。
我写了一个Python库,目的是让这个过程变得非常简单。你可以在Github上查看它。
要安装这个库,你只需要运行
$ pip install wikipedia
然后,如果你想获取一篇文章的第一段,只需使用 wikipedia.summary
函数。
>>> import wikipedia
>>> print wikipedia.summary("Albert Einstein", sentences=2)
这会输出
阿尔伯特·爱因斯坦(/ˈælbərt ˈaɪnstaɪn/;德语:[ˈalbɐt ˈaɪnʃtaɪn](收听);1879年3月14日 – 1955年4月18日)是一位出生于德国的理论物理学家,他提出了广义相对论,这是现代物理学的两个支柱之一(另一个是量子力学)。虽然他因质量与能量等价公式E=mc²而最为人知(这个公式被称为“世界上最著名的方程”),但他在1921年获得诺贝尔物理学奖“以表彰他对理论物理学的贡献,特别是他对光电效应法则的发现”。
至于它是如何工作的,wikipedia
会向MediaWiki API的移动前端扩展发送请求,这样就能返回适合手机阅读的维基百科文章版本。具体来说,通过传递参数prop=extracts&exsectionformat=plain
,MediaWiki的服务器会解析维基文本,并返回你请求的文章的纯文本摘要,甚至包括整篇页面的文本。它还接受exchars
和exsentences
这两个参数,顾名思义,这两个参数用来限制API返回的字符数和句子数。
之前我写了两个类,用来获取维基百科的文章并把它们转换成简单的文本格式。我知道这不是最好的解决方案,但你可以根据自己的需要进行调整:
你可以这样使用它:
from wikipedia import Wikipedia
from wiki2plain import Wiki2Plain
lang = 'simple'
wiki = Wikipedia(lang)
try:
raw = wiki.article('Uruguay')
except:
raw = None
if raw:
wiki2plain = Wiki2Plain(raw)
content = wiki2plain.text