Une décharge Wikipedia Parsing
-
27-09-2019 - |
Question
Par exemple en utilisant cette décharge Wikipedia:
Y at-il une bibliothèque existante pour Python que je peux utiliser pour créer un tableau avec la cartographie des sujets et des valeurs?
Par exemple:
{height_ft,6},{nationality, American}
La solution
On dirait que vous voulez vraiment être en mesure d'analyser MediaWiki le balisage. Il y a une bibliothèque Python conçu à cet effet appelé MWLIB. Vous pouvez utiliser les packages XML intégrés de Python pour extraire le contenu de la page de la réponse de l'API, puis passez ce contenu dans l'analyseur de MWLIB pour produire une représentation d'objets que vous pouvez parcourir et analyser dans le code pour extraire les informations que vous voulez. MWLIB est sous licence BSD.
Autres conseils
Juste trébuché sur une bibliothèque PyPI, wikidump , qui prétend fournir
Outils pour manipuler et extraire des données de wikipedia dépotoirs
Je ne l'utilise pas encore, vous êtes sur votre propre pour essayer ...
Je décrit comment faire en utilisant une combinaison de pywikibot et mwparserfromhell this après (n'ont pas assez réputation encore marquer comme un double).
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>
Ne pas oublier que params sont des objets mwparserfromhell aussi!
Je sais que la question est vieux, mais je cherchais une bibliothèque qui parse wikipedia décharge xml. Cependant, les bibliothèques proposées, wikidump et ne MWLIB, offrent pas beaucoup de documentation de code. Puis, j'ai trouvé Mediwiki-utilities , qui a une documentation de code: http://pythonhosted.org/mediawiki-utilities/ .
WikiExtractor semble être une manière propre, simple et efficace de le faire en Python aujourd'hui: https: // github .com / Attardi / wikiextractor
Il fournit un moyen facile d'analyser une décharge Wikipedia en une simple structure de fichiers comme ceci:
<doc>...</doc>
<doc>...</doc>
...
<doc>...</doc>
... où chacun regarde doc comme:
<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>
Il y a des informations sur Python et les bibliothèques XML .
Si vous demandez est-il une bibliothèque existante qui a été conçu pour analyser Wiki (pedia) XML spécifique et répondre à vos besoins, cela est douteux. Cependant, vous pouvez utiliser l'une des bibliothèques existantes pour traverser les DOM et retirer les données dont vous avez besoin.
Une autre option est d'écrire une feuille de style XSLT qui fait similaire et appeler à l'aide lxml. Cela vous permet également de faire des appels à des fonctions Python à l'intérieur du XSLT afin que vous obtenez le meilleur des deux mondes.
Vous êtes probablement le Pywikipediabot pour manipuler l'API wikipedia.
Je dirais que regarder à l'aide Belle soupe et juste obtenir la page de Wikipédia en HTML au lieu d'utiliser l'API.
Je vais essayer de poster un exemple.