12
votes

Comment analyser / extraire des données d'un article Med Mediawiki via Python

Source MediaWiki Markup < / p>

En ce moment, j'utilise une variété de regex pour "analyser" les données de la marque MediaWiki dans des listes / dictionnaires, de sorte que les éléments de l'article puissent être utilisés.

Ceci n'est guère la meilleure méthode, car le nombre de cas à apporter est important.

Comment analyserait un marquage MediaWiki d'un article dans une variété d'objets Python afin que les données à l'intérieur peuvent être utilisées?

Exemple d'être:

  • extraire tous les titres à un dictionnaire, hachage avec son section.
  • saisir tous les liens interwiki, et Collez-les dans une liste (je sais
    cela peut être fait de l'API mais je voudrais Plutôt seulement avoir un appel d'une API à
    Réduire l'utilisation de la bande passante).
  • extraire tous les noms d'image et hachage avec leurs sections

    Une variété de regex peut atteindre ce qui précède, mais je trouve le numéro que je dois faire assez grand.

    Voici le Spécification non officielle MediaWiki (je ne trouve pas leur officiel Spécification utile).


0 commentaires

3 Réponses :


9
votes

MWLIB - MEDIAWIKI PARSER ET BIBLIOTHÈQUE UTILITY

PEFPRESS / MWLIB : P>

MWLIB fournit une bibliothèque pour analyser les articles MediaWiki et les convertir en différents formats de sortie. MWLIB est utilisé par la fonction "Print / Export" de Wikipedia afin de générer des documents PDF à partir d'articles Wikipedia. P> BlockQuote>

Voici le Documentation Page. La page plus ancienne utilisée a un exemple de doublure: p> xxx pré>

Si vous souhaitez voir comment il est utilisé en action, voir les cas de test qui viennent avec le code. ( MWLIB / TESTS / TEST_PARSER.PY du référentiel git ) : P>

from mwlib import parser, expander, uparser
from mwlib.expander import DictDB
from mwlib.xfail import xfail
from mwlib.dummydb import DummyDB
from mwlib.refine import util, core

parse = uparser.simpleparse

def test_headings():
    r=parse(u"""
= 1 =
== 2 ==
= 3 =
""")

    sections = [x.children[0].asText().strip() for x in r.children if isinstance(x, parser.Section)]
    assert sections == [u"1", u"3"]


4 commentaires

J'ai déjà regardé Mwlib auparavant. Je ne peux pas sembler trouver des extraits de celui-ci en utilisant cependant, ce qui est le problème principal. J'apprécierais tous les liens avec des tutoriels / des exemples.


Ils semblent avoir déménagé à Github, pourriez-vous mettre à jour vos liens à: Github.com/pediapress/mwlib


Ces exemples analyse des liens d'article sur une chaîne de texte Wikipedia: Gist.github.com/akellehe/65A040B53456D7D23544


Wikipedia a une liste d'analyseurs à mediawiki.org/wiki/alternative_parsers comprenant plusieurs offres Python.




2
votes

Je cherchais une solution simillar pour analyser certains wiki et surnommé sur pandoc qui prend plusieurs formats d'entrée et génère multiple aussi.

du site:

Pandoc - Un convertisseur de document universel

Si vous devez convertir des fichiers d'un format de balisage en un autre, Pandoc est votre couteau suisse-Army. Pandoc peut convertir des documents dans Markown, restructurétext, Textile, HTML, DOCBOOK, Latex, MEDIAWIKI MARKUP, MODIUP TWIICI, OPML, EMACS ORG-MODE, TXT2TAGS, Microsoft Word DOCX, EPUB ou HADDOCK. Formats HTML: diapositives XHTML, HTML5 et HTML à l'aide de Slidy, de révéler.js, de Slideous, de S5 ou de DZSlides. Formats de traitement de texte: Microsoft Word DocX, OpenOffice / LibreOffice Odt, Opendocument XML Ebooks: epub version 2 ou 3, fictionbook2 Documentation Formats: Docbook, GNU Texinfo, Groff Man Pages, Haddock Markup Formats de la page de page: Indesign ICML Formats de contour: OPML Formats Tex: latex, contexte, diapositives de beamer latex Pdf via latex Formats de balisage léger: Markdown (y compris le courant indicatif), restructurétext, Asciidoc, MediaWiki Markup, Markup Dokuwiki, Emacs Org-Mode, Textile Formats personnalisés: Les écrivains personnalisés peuvent être écrits en Lua.


0 commentaires