Hallo,
ich hab mir gerade die 470 MB Datei von http://download.wikimedia.org/wikipedia/de/ heruntergeladen und entpackt. Man erhält eine mit den Artikelinhalten (Stand 17.7.2005) im XML-Formt und mit einer Größe von 1,4 GB.
Ich würde jetzt gerne wie bei dem SQL-Dump etwas herausfiltern (Personendaten, Koordinaten etc.). Leider kann keins meiner Programme mit so riesigen Dateien etwas anfangen.
Ein kleines selbstgeschriebenes Skript was einzelne Zeilen auslesen sollte scheint auch an der Größe zu scheitern. IE6 liest ja zumindest mal die ersten paar Zeilen aus und zeigt sie an. Das heißt die XML-Datei scheint in Ordnung zu sein.
Kennt jemand eine Programm mit dem man bestimmte Datensätze aus der riesigen XML-Datei rausfiltern kann oder einen Editor, der diese Riesendatei verarbeitet?
Stefan
Ich würde jetzt gerne wie bei dem SQL-Dump etwas herausfiltern (Personendaten, Koordinaten etc.). Leider kann keins meiner Programme mit so riesigen Dateien etwas anfangen.
In diesem Zusammenhang würd ich es nett finden, wenn jem. auf die Frage
http://de.wikipedia.org/wiki/WP:FZW#WP-Dump_in_SQL.3F
beantworten könnte ([[WP:FZW]], Abschnitt "WP-Dump in SQL?")...
Filzstift
Stefan Kühn schrieb:
Hallo,
ich hab mir gerade die 470 MB Datei von http://download.wikimedia.org/wikipedia/de/ heruntergeladen und entpackt. Man erhält eine mit den Artikelinhalten (Stand 17.7.2005) im XML-Formt und mit einer Größe von 1,4 GB.
Ich würde jetzt gerne wie bei dem SQL-Dump etwas herausfiltern (Personendaten, Koordinaten etc.). Leider kann keins meiner Programme mit so riesigen Dateien etwas anfangen.
Ein kleines selbstgeschriebenes Skript was einzelne Zeilen auslesen sollte scheint auch an der Größe zu scheitern. IE6 liest ja zumindest mal die ersten paar Zeilen aus und zeigt sie an. Das heißt die XML-Datei scheint in Ordnung zu sein.
Kennt jemand eine Programm mit dem man bestimmte Datensätze aus der riesigen XML-Datei rausfiltern kann oder einen Editor, der diese Riesendatei verarbeitet?
Mit dem Script /maintenance/importDump.php kann man die XML-Dateien in die lokale DB einspielen, sagt Brion. Wie das recht geht, weiß ich nicht.
Er sagte auch, dass es die großen Tabellen nur noch als XML gibt, die kleinen weiterhin als SQL.
Gruß, Leon
<dampfablass>Das wäre wirklich dumm für mich. Muss ich jetzt dafür extra noch Mediawiki installieren oder was? Und die GBs von Daten für wikisign sprachgetrennt noch zu parsen würde mich echt ank*****. Das Ganze würde mindestens ein paar Tage gehen.</dampfablass>
Filzstift
2005/8/4, Leon Weber leon.weber@leonweber.de:
Stefan Kühn schrieb:
Hallo,
ich hab mir gerade die 470 MB Datei von http://download.wikimedia.org/wikipedia/de/ heruntergeladen und entpackt. Man erhält eine mit den Artikelinhalten (Stand 17.7.2005) im XML-Formt und mit einer Größe von 1,4 GB.
Ich würde jetzt gerne wie bei dem SQL-Dump etwas herausfiltern (Personendaten, Koordinaten etc.). Leider kann keins meiner Programme mit so riesigen Dateien etwas anfangen.
Ein kleines selbstgeschriebenes Skript was einzelne Zeilen auslesen sollte scheint auch an der Größe zu scheitern. IE6 liest ja zumindest mal die ersten paar Zeilen aus und zeigt sie an. Das heißt die XML-Datei scheint in Ordnung zu sein.
Kennt jemand eine Programm mit dem man bestimmte Datensätze aus der riesigen XML-Datei rausfiltern kann oder einen Editor, der diese Riesendatei verarbeitet?
Mit dem Script /maintenance/importDump.php kann man die XML-Dateien in die lokale DB einspielen, sagt Brion. Wie das recht geht, weiß ich nicht.
Er sagte auch, dass es die großen Tabellen nur noch als XML gibt, die kleinen weiterhin als SQL.
Gruß, Leon
WikiDE-l mailing list WikiDE-l@Wikipedia.org http://mail.wikipedia.org/mailman/listinfo/wikide-l
Filzstift:
<dampfablass>Das wäre wirklich dumm für mich. Muss ich jetzt dafür extra noch Mediawiki installieren oder was? Und die GBs von Daten für wikisign sprachgetrennt noch zu parsen würde mich echt ank*****. Das Ganze würde mindestens ein paar Tage gehen.</dampfablass>
Ich weiß nicht, ob es jetzt noch interessiert, aber ich habe ein Perl-Script geschrieben, dass die "pages_current.xml.gz"-Dumps in cur-Dumps umwandeln kann:
http://de.wikipedia.org/wiki/Wikipedia:Xml2sql
Stefan Kühn wrote:
ich hab mir gerade die 470 MB Datei von http://download.wikimedia.org/wikipedia/de/ heruntergeladen und entpackt. Man erhält eine mit den Artikelinhalten (Stand 17.7.2005) im XML-Formt und mit einer Größe von 1,4 GB.
Ich würde jetzt gerne wie bei dem SQL-Dump etwas herausfiltern (Personendaten, Koordinaten etc.). Leider kann keins meiner Programme mit so riesigen Dateien etwas anfangen.
Ein kleines selbstgeschriebenes Skript was einzelne Zeilen auslesen sollte scheint auch an der Größe zu scheitern. IE6 liest ja zumindest mal die ersten paar Zeilen aus und zeigt sie an. Das heißt die XML-Datei scheint in Ordnung zu sein.
Kennt jemand eine Programm mit dem man bestimmte Datensätze aus der riesigen XML-Datei rausfiltern kann oder einen Editor, der diese Riesendatei verarbeitet?
Das richtige Werkzeug für solche großen XML-Daten ist ein SAX-Parser [1] - solche gibt es für alle üblichen Programmiersprachen. Die Datei muss übrigens gar nicht auf der Platte entpackt - dass kann auch on-the-fly geschehen:
gzip -dc | myscript
Gruß, Jakob
Jakob schrieb:
Das richtige Werkzeug für solche großen XML-Daten ist ein SAX-Parser [1]
- solche gibt es für alle üblichen Programmiersprachen. Die Datei muss
übrigens gar nicht auf der Platte entpackt - dass kann auch on-the-fly geschehen:
gzip -dc | myscript
Soweit bin ich bei meinen weiteren Recherchen auch gekommen. Wenn ich das alles richtig verstandne habe, dann müsste jetzt eigentlich nur jemand eine entsprechende XSL Datei schreiben, mit der ein Parser die riesige XML-Datei in z.B. eine SQL Datei umwandeln könnte, damit man sie wieder in MySQL einlesen kann.
Wer das nötige Know How hat, sollte das bitte mal tun und allen anderen Wikipedianern zur Verfügung stellen. Besten Dank im Voraus.
Stefan
Stefan Kühn wrote:
ich hab mir gerade die 470 MB Datei von http://download.wikimedia.org/wikipedia/de/ heruntergeladen und entpackt. Man erhält eine mit den Artikelinhalten (Stand 17.7.2005) im XML-Formt und mit einer Größe von 1,4 GB.
Kennt jemand eine Programm mit dem man bestimmte Datensätze aus der riesigen XML-Datei rausfiltern kann oder einen Editor, der diese Riesendatei verarbeitet?
Ich habe für den PyWikipediaBot einen SAX2-Parser in Python geschrieben, der das pages_current-Dump liest [1]. Der funktionierte zwar einwandfrei, aber leider war er zu langsam, er benötigte mehrere Stunden, um das Dump zu durchlaufen.
Darum habe ich mich für eine etwas unsaubere Lösung entschieden. In der aktuellen Version wird einfach ein regulärer Ausdruck verwendet, der einen Eintrag matcht [2, suche nach Rpage]. Das ganze läuft jetzt etwa 10 bis 20 Mal so schnell wie die Version mit dem SAX2-Parser.
Schön wäre natürlich ein sauberer XML-Parser, der so schnell läuft wie die Version mit dem regulären Ausdruck, aber damit kann ich leider nicht dienen.
Daniel
[1] http://cvs.sourceforge.net/viewcvs.py/pywikipediabot/pywikipedia/xmlreader.p... [2] http://cvs.sourceforge.net/viewcvs.py/pywikipediabot/pywikipedia/xmlreader.p...
Daniel Herding:
Ich habe für den PyWikipediaBot einen SAX2-Parser in Python geschrieben, der das pages_current-Dump liest [1]. Der funktionierte zwar einwandfrei, aber leider war er zu langsam, er benötigte mehrere Stunden, um das Dump zu durchlaufen.
Darum habe ich mich für eine etwas unsaubere Lösung entschieden. In der aktuellen Version wird einfach ein regulärer Ausdruck verwendet, der einen Eintrag matcht [2, suche nach Rpage]. Das ganze läuft jetzt etwa 10 bis 20 Mal so schnell wie die Version mit dem SAX2-Parser.
Werden denn da auch & , < und > in den Textblöcken ersetzt? Ich kann zwar kein Python, aber das hätte ich eigentlich finden müssen. Genau diesen Entwicklungsweg habe ich nämlich auch mit Perl hinter mir: Erst habe ich XML::Twig verwendet, was viel zu langsam war. Dann habe ich es selbst geschrieben mit einem regulären Ausdruck zur Ersetzung von & usw.. Das war aber immer noch zu langsam. Dann habe ich die Ersetzung mit einer C-Funktion neu geschrieben, was das Ganze noch mal um den Faktor 2.5 beschleunigt hat. Beim Dump der aktuellen Versionen ist das vielleicht noch egal (ca. 10min/4min), aber beim vollen Dump (der momentan unvollständig ist und vollständig ca. 12GB lang sein müsste) macht das schon einen Unterschied.
Daniel Herding:
elwp@gmx.de wrote:
Werden denn da auch & , < und > in den Textblöcken ersetzt?
Das fehlte noch, habe ich aber vor ein paar Stunden nachgetragen. " hast du noch vergessen, dann ist es hoffentlich vollständig.
Aha, " habe ich vergessen, & hast du vergessen und ' ist im Prinzip auch möglich [1], allerdings kommt das im Dump z.Z. nicht vor.
Was ich zur angeblich schnelleren C-Funktion für die Ersetzungen geschrieben habe, bitte wieder vergessen. Ich hatte mit Perl eine suboptimale Alles-in-einem-Rutsch-Ersetzung verwendet. Wenn man es nacheinander macht, ist es mit Perl genauso schnell wie mit C:
$text =~ s/</</sg; $text =~ s/>/>/sg; $text =~ s/'/'/sg; $text =~ s/"/"/sg; $text =~ s/&/&/sg;
So kann Perl offenbar besser optimieren.
[1] http://www.w3schools.com/xml/xml_cdata.asp