Analizar un volcado Wikipedia
-
27-09-2019 - |
Pregunta
Por ejemplo, usando este basurero Wikipedia:
¿Hay una biblioteca existente para Python que puedo usar para crear una matriz con la asignación de los sujetos y valores?
Por ejemplo:
{height_ft,6},{nationality, American}
Solución
Parece que realmente quiere ser capaz de analizar MediaWiki marcado. Hay una biblioteca de Python diseñado para este propósito llamado mwlib . Puede utilizar paquetes XML incorporadas de pitón para extraer el contenido de la página de la respuesta de la API, a continuación, pasar a ese contenido en el analizador de mwlib para producir una representación de objetos que se pueden ver y analizar en el código para extraer la información que desea. mwlib es BSD licencia.
Otros consejos
Sólo tropezó con una biblioteca en PyPi, wikidump , que pretende ofrecer
Herramientas para manipular y extraer datos de Wikipedia vertederos
Yo no lo utilizó, sin embargo, por lo que está en su propia para probarlo ...
I describe cómo hacer esto utilizando una combinación de pywikibot y mwparserfromhell en this posterior (no tienen la reputación suficiente todavía para marcar como un duplicado).
In [1]: import mwparserfromhell
In [2]: import pywikibot
In [3]: enwp = pywikibot.Site('en','wikipedia')
In [4]: page = pywikibot.Page(enwp, 'Waking Life')
In [5]: wikitext = page.get()
In [6]: wikicode = mwparserfromhell.parse(wikitext)
In [7]: templates = wikicode.filter_templates()
In [8]: templates?
Type: list
String Form:[u'{{Use mdy dates|date=September 2012}}', u"{{Infobox film\n| name = Waking Life\n| im <...> critic film|waking-life|Waking Life}}', u'{{Richard Linklater}}', u'{{DEFAULTSORT:Waking Life}}']
Length: 31
Docstring:
list() -> new empty list
list(iterable) -> new list initialized from iterable's items
In [10]: templates[:2]
Out[10]:
[u'{{Use mdy dates|date=September 2012}}',
u"{{Infobox film\n| name = Waking Life\n| image = Waking-Life-Poster.jpg\n| image_size = 220px\n| alt =\n| caption = Theatrical release poster\n| director = [[Richard Linklater]]\n| producer = [[Tommy Pallotta]]<br />[[Jonah Smith]]<br />Anne Walker-McBay<br />Palmer West\n| writer = Richard Linklater\n| starring = [[Wiley Wiggins]]\n| music = Glover Gill\n| cinematography = Richard Linklater<br />[[Tommy Pallotta]]\n| editing = Sandra Adair\n| studio = [[Thousand Words]]\n| distributor = [[Fox Searchlight Pictures]]\n| released = {{Film date|2001|01|23|[[Sundance Film Festival|Sundance]]|2001|10|19|United States}}\n| runtime = 101 minutes<!--Theatrical runtime: 100:40--><ref>{{cite web |title=''WAKING LIFE'' (15) |url=http://www.bbfc.co.uk/releases/waking-life-2002-3|work=[[British Board of Film Classification]]|date=September 19, 2001|accessdate=May 6, 2013}}</ref>\n| country = United States\n| language = English\n| budget =\n| gross = $3,176,880<ref>{{cite web|title=''Waking Life'' (2001)|work=[[Box Office Mojo]] |url=http://www.boxofficemojo.com/movies/?id=wakinglife.htm|accessdate=March 20, 2010}}</ref>\n}}"]
In [11]: infobox_film = templates[1]
In [12]: for param in infobox_film.params:
print param.name, param.value
name Waking Life
image Waking-Life-Poster.jpg
image_size 220px
alt
caption Theatrical release poster
director [[Richard Linklater]]
producer [[Tommy Pallotta]]<br />[[Jonah Smith]]<br />Anne Walker-McBay<br />Palmer West
writer Richard Linklater
starring [[Wiley Wiggins]]
music Glover Gill
cinematography Richard Linklater<br />[[Tommy Pallotta]]
editing Sandra Adair
studio [[Thousand Words]]
distributor [[Fox Searchlight Pictures]]
released {{Film date|2001|01|23|[[Sundance Film Festival|Sundance]]|2001|10|19|United States}}
runtime 101 minutes<!--Theatrical runtime: 100:40--><ref>{{cite web |title=''WAKING LIFE'' (15) |url=http://www.bbfc.co.uk/releases/waking-life-2002-3|work=[[British Board of Film Classification]]|date=September 19, 2001|accessdate=May 6, 2013}}</ref>
country United States
language English
budget
gross $3,176,880<ref>{{cite web|title=''Waking Life'' (2001)|work=[[Box Office Mojo]] |url=http://www.boxofficemojo.com/movies/?id=wakinglife.htm|accessdate=March 20, 2010}}</ref>
No se olvide que son params mwparserfromhell objetos también!
Sé que la pregunta es viejo, pero yo estaba buscando una biblioteca que analiza Wikipedia volcado XML. Sin embargo, las bibliotecas sugeridas, wikidump y mwlib, no ofrecen muchas documentación de código. Entonces, encontré Mediwiki-utilities , que tiene algunas documentación de código en: http://pythonhosted.org/mediawiki-utilities/ .
WikiExtractor parece ser un lugar limpio, simple, y forma eficaz de hacer esto en Python hoy: https: // github .com / Attardi / wikiextractor
Se proporciona una manera fácil de analizar un vertedero de Wikipedia en una estructura simple de archivos, así:
<doc>...</doc>
<doc>...</doc>
...
<doc>...</doc>
... donde cada documento será similar a:
<doc id="2" url="http://it.wikipedia.org/wiki/Harmonium">
Harmonium.
L'harmonium è uno strumento musicale azionato con una tastiera, detta manuale.
Sono stati costruiti anche alcuni harmonium con due manuali.
...
</doc>
Hay alguna información sobre Python y XML bibliotecas aquí .
Si estás preguntando ¿hay una biblioteca existente que está diseñado para analizar Wiki XML (pedia) específica y satisfacer sus necesidades, esto es dudoso. Sin embargo, usted puede utilizar una de las bibliotecas existentes para recorrer el DOM y extraiga los datos que necesita.
Otra opción es escribir una hoja de estilo XSLT que lo hace similar y llamarlo usando lxml. Esto también le permite hacer llamadas a las funciones de Python desde el interior del XSLT para que pueda obtener lo mejor de ambos mundos.
Probablemente se esté buscando la Pywikipediabot para la manipulación de la API de Wikipedia.
Yo diría vistazo a usar sopa Hermosa y acaba de obtener la página de Wikipedia en HTML en lugar de utilizar la API.
Voy a tratar de publicar un ejemplo.