如何使用mwparserfromhell或python中的简单解析器从MediaWiki标记格式中获取干净的文本?

时间:2015-08-10 18:19:39

标签: python mediawiki wikipedia-api mediawiki-api

我正试图从一个物种的维基百科页面中获得干净的句子。

例如 Abeis durangensis (pid = 1268312)。使用python中的Wikipedia API获取Wikipedia页面:

import requests
pid = 1268312
q = {'action' : 'query',
     'pageids': pid,
     'prop'   : 'revisions',
     'rvprop' : 'content',
     'format' : 'json'}
result = requests.get(eswiki_URI, params=q).json()
wikitext = result["query"]["pages"].values()[0]["revisions"][0]["*"]

给出:

{{Ficha de taxón
| name = ''Abies durangensis''
| image = Abies tamazula dgo.jpg 
| status = LR/lc
| status_ref =<ref>Conifer Specialist Group 1998.  [http://www.iucnredlist.org/search/details.php/42279/all ''Abies durangensis''].   [http://www.iucnredlist.org 2006 IUCN Red List of Threatened Species. ]  Downloaded on 10 July 2007.</ref>
| regnum = [[Plantae]]
| divisio = [[Pinophyta]]
| classis = [[Pinopsida]]
| ordo = [[Pinales]]
| familia = [[Pinaceae]]
| genus = ''[[Abies]]'' 
| binomial = '''''Abies durangensis'''''
| binomial_authority = [[Maximino Martínez|Martínez]]<ref name=ipni>{{ cite web |url=http://www.ipni.org:80/ipni/idPlantNameSearch.do;jsessionid=0B15264060FDA0DCF216D997C89185EC?id=676563-1&back_page=%2Fipni%2FeditSimplePlantNameSearch.do%3Bjsessionid%3D0B15264060FDA0DCF216D997C89185EC%3Ffind_wholeName%3DAbies%2Bdurangensis%26output_format%3Dnormal |title=Plant Name Details for ''Abies durangensis'' |publisher=[[International Plant Names Index|IPNI]] |accessdate=6 de octubre de 2009}}</ref>
| synonyms = 
}}
'''''Abies durangensis''''' es una [[especie]] de [[conífera]] perteneciente a la familia [[Pinaceae]]. Son [[endémica]]s de [[México]] donde se encuentran en [[Durango]], [[Chihuahua]], [[Coahuila]], [[Jalisco]] y [[Sinaloa]]. También es conocido como 'Árbol de Coahuila' y 'pino mexicano'.<ref name=cje>{{ cite web |url=http://www.conifers.org/pi/ab/durangensis.htm |title=''Abies durangaensis'' description |author=Christopher J. Earle |date=11 de junio de 2006 |accessdate=6 de octubre de 2009}}</ref> 

== Descripción ==
Es un [[árbol]] que alcanza los 40 metros de altura con un [[Tronco (botánica)|tronco]] recto que tiene 150&nbsp;cm de diámetro. Las [[rama]]s son horizontales y la [[corteza (árbol)|corteza]] de color gris. Las [[hoja]]s son verde brillante de 20–35&nbsp;mm de longitud por 1-1.5&nbsp;mm de ancho. Tiene los conos de [[semilla]]s erectos en ramas laterales sobre un corto [[pedúnculo]]. Las [[semilla]]s son [[resina|resinosas]] con una [[núcula]] amarilla con alas.

== Taxonomía ==
''Abies durangensis'' fue descrita por [[Maximino Martínez]] y publicado en ''[[Anales del instituto de Biología de la Universidad Nacional de México]]'' 13: 2. 1942.<ref name = Trop>{{cita web |url=http://www.tropicos.org/Name/24901700 |título= ''{{PAGENAME}}''|fechaacceso=21 de enero de 2013 |formato= |obra=  Tropicos.org. [[Missouri Botanical Garden]]}}</ref>
;[[Etimología]]:
'''''Abies''''': nombre genérico que viene del nombre [[latin]]o de ''[[Abies alba]]''.<ref>[http://www.calflora.net/botanicalnames/pageAB-AM.html En Nombres Botánicos]</ref>

'''''durangensis''''': [[epíteto]] geográfico que alude a su localización en [[Durango]].
;Variedades:
* ''Abies durangensis var. coahuilensis'' (I. M. Johnst.) Martínez 
;[[sinonimia (biología)|Sinonimia]]:
* ''Abies durangensis subsp. neodurangensis'' (Debreczy, I.Rácz & R.M.Salazar) Silba'
* ''Abies neodurangensis'' Debreczy, I.Rácz & R.M.Salazar<ref>[http://www.theplantlist.org/tpl/record/kew-2609816 ''{{PAGENAME}}'' en PlantList]</ref><ref name = Kew>{{cita web|url=http://apps.kew.org/wcsp/namedetail.do?name_id=2609816 |título=''{{PAGENAME}}'' |work= World Checklist of Selected Plant Families}}</ref>
;''var. coahuilensis'' (I.M.Johnst.) Martínez
* ''Abies coahuilensis'' I.M.Johnst.
* ''Abies durangensis subsp. coahuilensis'' (I.M.Johnst.) Silba
== Véase también ==
* [[Terminología descriptiva de las plantas]]
* [[Anexo:Cronología de la botánica]]
* [[Historia de la Botánica]]
* [[Pinaceae#Descripción|Características de las pináceas]]
== Referencias ==
{{listaref}}
== Bibliografía ==
# CONABIO. 2009. Catálogo taxonómico de especies de México. 1. In Capital Nat. México. CONABIO, Mexico City.
== Enlaces externos ==
{{commonscat}}
{{wikispecies|Abies}}
* http://web.archive.org/web/http://ww.conifers.org/pi/ab/durangensis.htm
* http://www.catalogueoflife.org/search.php

[[Categoría:Abies|durangensis]]
[[Categoría:Plantas descritas en 1942]]
[[Categoría:Plantas descritas por Martínez]]

我对信息框后面的(无标记)文字感兴趣,光泽:

  

Abies durangensis es una especiedeconíferapertenecientea la familia Pinaceae。 SonendémicasdeMéxicodondese encuentran en Durango,Chihuahua,Coahuila,Jalisco y Sinaloa。 Tambiénesconocidocomo'ÁrboldeCoahuila'y'pino mexicano'。

直到现在我咨询了https://www.mediawiki.org/wiki/Alternative_parsers所以我发现mwparserfromhell是python中不那么复杂的解析器。但是,我没有看清楚如何做我假装的事情。当我使用文档中提出的示例时,我无法看到光泽度在哪里。

for t in templates:
    print(t.name).encode('utf-8')
    print(t.params)

Ficha de taxón

[u" name = ''Abies durangensis''\n", u' image = Abies tamazula dgo.jpg \n', u' status = LR/lc\n', u" status_ref =<ref>Conifer Specialist Group 1998.  [http://www.iucnredlist.org/search/details.php/42279/all ''Abies durangensis''].   [http://www.iucnredlist.org 2006 IUCN Red List of Threatened Species. ]  Downloaded on 10 July 2007.</ref>\n", u' regnum = [[Plantae]]\n', u' divisio = [[Pinophyta]]\n', u' classis = [[Pinopsida]]\n', u' ordo = [[Pinales]]\n', u' familia = [[Pinaceae]]\n', u" genus = ''[[Abies]]'' \n", u" binomial = '''''Abies durangensis'''''\n", u" binomial_authority = [[Maximino Mart\xednez|Mart\xednez]]<ref name=ipni>{{ cite web |url=http://www.ipni.org:80/ipni/idPlantNameSearch.do;jsessionid=0B15264060FDA0DCF216D997C89185EC?id=676563-1&back_page=%2Fipni%2FeditSimplePlantNameSearch.do%3Bjsessionid%3D0B15264060FDA0DCF216D997C89185EC%3Ffind_wholeName%3DAbies%2Bdurangensis%26output_format%3Dnormal |title=Plant Name Details for ''Abies durangensis'' |publisher=[[International Plant Names Index|IPNI]] |accessdate=6 de octubre de 2009}}</ref>\n", u' synonyms = \n']
 cite web 
[u'url=http://www.ipni.org:80/ipni/idPlantNameSearch.do;jsessionid=0B15264060FDA0DCF216D997C89185EC?id=676563-1&back_page=%2Fipni%2FeditSimplePlantNameSearch.do%3Bjsessionid%3D0B15264060FDA0DCF216D997C89185EC%3Ffind_wholeName%3DAbies%2Bdurangensis%26output_format%3Dnormal ', u"title=Plant Name Details for ''Abies durangensis'' ", u'publisher=[[International Plant Names Index|IPNI]] ', u'accessdate=6 de octubre de 2009']
 cite web 
[u'url=http://www.conifers.org/pi/ab/durangensis.htm ', u"title=''Abies durangaensis'' description ", u'author=Christopher J. Earle ', u'date=11 de junio de 2006 ', u'accessdate=6 de octubre de 2009']
cita web 
[u'url=http://www.tropicos.org/Name/24901700 ', u"t\xedtulo= ''{{PAGENAME}}''", u'fechaacceso=21 de enero de 2013 ', u'formato= ', u'obra=  Tropicos.org. [[Missouri Botanical Garden]]']
PAGENAME
[]
PAGENAME
[]
cita web
[u'url=http://apps.kew.org/wcsp/namedetail.do?name_id=2609816 ', u"t\xedtulo=''{{PAGENAME}}'' ", u'work= World Checklist of Selected Plant Families']
PAGENAME
[]
listaref
[]
commonscat
[]
wikispecies
[u'Abies']

2 个答案:

答案 0 :(得分:2)

使用TextExtracts API

而不是通过解析在形式语法中无法表达的东西来折磨自己。

https://es.wikipedia.org/w/api.php?action=query&prop=extracts&explaintext=1&titles=Abies%20durangensis&format=json

给出以下输出:

  

Abies durangensis es una especiedeconíferapertenecientea la   家庭松科。 SonendémicasdeMéxicodondese encuentran en   Durango,Chihuahua,Coahuila,Jalisco和Sinaloa。 Tambiénesconocido   como'ÁrboldeCoahuila'y'pino mexicano'。

     

==Descripción==

     

Esunárbolquealcanza los 40 metros de altura con un tronco recto que tiene 150 cmdediámetro。拉斯拉马斯的儿子   horizo​​ntales y la corteza de color gris。 Las hojas儿子verde brillante   de 20-35 mm de longitudinal por 1-1.5 mm de ancho。 Tiene los conos de   semillas erectos en ramas laterales sobre uncootapedúnculo。拉斯维加斯   semillas son resinosas conunanúculamamarillacon alas。

     

[...]

如果您只需要潜在客户,请将&exintro=1附加到网址。

答案 1 :(得分:0)

您可以使用wikitextparser

如果 wikitext 有您的文本字符串,您只需要:

import wikitextparser
parsed = wikitextparser.parse(wikitext)

然后您可以获得整个页面或特定部分的纯文本部分,例如:parsed.sections[1].plain_text() 将为您提供页面第二部分的纯文本,这似乎是您要查找的内容.