Florian Janßen writes:
> Der Text liegt dann im Wikisyntax vor. Weiß jemand ob es schon Tools
> gibt um aus dem Wikitext normalen Text zu erzeugen?

>Karl schrieb am 16.04.2011 um 18:17 Uhr:
>> In letzter Zeit habe ich mir den Wikipedia-XML-Dump öfter und
>> genauer angesehen.
>> Den so sauber geputzt zu bekommen, wie ich es für notwendig erachte, halte
>> ich jetzt für noch schwieriger, als wonach es auf den ersten Blick
>> ausschaut. (@Florian: Kannst Du mal die Skripte vorstellen - egal auf
>> welchem Stand -, mit denen Du das Putzen angegangen bist. Das könnte
>> enorm weiter helfen (Brett_vorm_Kopf_hab).)
>> Manche Markups kommen verschachtelt vor, manche sogar fehlerhaft, was für
>> Reguläre Ausdrücke grundsätzlich schwierig ist.
>
> Ja, es gibt einige die kaputt, oder sehr verschachtelt sind. Teilweise
> wird auch noch HTML verwendet (was ich bisher nur teilweise erfassen kann).

> Meine zum Putzen verwendeten Ausdrücke sind habe ich am Ende angehängt.
> Es gibt noch einiges zu verbessern, aber im Bezug auf die relative
> Häufigkeit der Buchstaben-N-Gramme ist es eher zu vernachlässigen. Bei
> N-Grammen mit Sonderzeichen dürfte es allerdings noch etwas auffallen.

Florian Janßen schrieb am 17.04.2011 um 13:50 Uhr:
> Mit welchem Tool packst du die 8GB-Datei an?

Die teils aus anderen Themen stammenden Zitate seien in diesem Thema
zusammengefasst aufgegriffen.

Die 8-GB-Datei habe ich ebenfalls gesplittet, weil mein Rechner damit so sehr an
seine technischen Grenzen stößt, dass die Bearbeitung als Einzeldatei leider zu
zeitaufwendig wurde.

Unter Ubuntu-Linux wurde die Datei mit dem Befehl namens "split" in 12 gleich
große Dateien gesplittet.
Danach wurde in jeder Datei nach dem letzten <\page> gesucht und der daran
anschließende restliche Text bis zum Dateiende ausgeschnitten und an den anfang
der nächsten Datei eingefügt. Dadurch enthalten alle Dateien vollständige
Artikel, wodurch auf alle Dateien dieselben Funktionen zum Putzen anwendbar 
sind.
Als Editor erwies sich die Windowsversion von UltraEdit als der einzige
gefundene Editor, der in der Lage ist, enorm große Dateien in vertretbar kurzer
Zeit in der von uns gewünschten Weise zu bearbeiten. UltraEdit kann auch die
8-GB-Datei verkraften, wozu aber der Rechner bestenfalls mit z. B. 16 GB RAM und
einer SSD ausgestattet sein sollte - was bei dem mir zur Verfügung stehenden
Rechner nicht gegeben ist.

Auf dem zur Verfügung stehenden Rechner sind zwei Windowsprogramme, mit denen
sich Regulären Ausdrücke allerbestens testen und anwenden lassen:
RegexBuddy zum Testen von Regulären Ausdrücken und
PowerGREP zum Anwenden von Regulären Ausdrücken.

Bislang habe ich also noch keine Skripte geschrieben, sondern erst einmal nur
reguläre Ausdrücke ausprobiert. Dabei wurden Schwachpunkte in der 8-GB-Datei
aufgedeckt - und: Meine MediaWiki-Markup-Kenntnisse sind zu gering, so dass es
mir schwer fällt, zu entscheiden, was in welcher Reihenfolge wie geputzt werden
sollte.

Worin ich mir inzwischen ziemlich sicher bin:
Alle Überschriften innerhalb eines Artikels sollten entfernt werden, da sie
aufgrund des lexikalischen Charakters viel zu häufig vorkommen. Aufgrund der
Größe des Korups können wir uns das erlauben.

Die XML-Struktur des Textes packe ich zunächst mal nur teilweise an, da manche
Befehle für das weitere Putzen notwendig sein könnten.

Bei den Regulären Ausdrücken bin ich mir recht sicher, dass sie zu einem
vertretbar guten Ergebnis führen sollen:
Sprachkürzelhaltige interWikis löschen (Nebenwirkung: Einträge, die [ oder ]
darin verschachtelt haben, bleiben stehen)(Beim Kopieren aus der Mailingliste
die Zeilenumbrüche entfernen, d. h. die Regex steht in einer langen Zeile)
\n??\[(?:\[(ab|abq|ace|ady|af|ain|ak|aln|als|alt|am|amr|an|ang|anp|ar|arc|arn|
aro|arq|ary|arz|as|ast|atv|av|ay|az|azb|ba|ban|bar|bat-smg|bcc|bcl|be|be-x-old|
bfq|bg|bh|bi|bjn|bm|bn|bo|bpy|bqi|br|brx|bs|bto|bug|bxr|ca|cbk-zam|cdo|ce|ceb|
ch|chi|chn|cho|chr|chy|ckb|ckt|co|cr|crh|cs|csb|cu|cv|cy|da|de|diq|dng|dsb|dv|
dz|ee|el|eml|en|enm|eo|es|ese|et|eu|ext|fa|ff|fi|fil|fiu-vro|fj|fo|fr|frp|frr|
fur|fy|ga|gag|gan|gd|gl|glk|gn|gom|got|grc|gu|gv|ha|hak|haw|haz|he|hi|hif|hil|
ho|hr|hsb|hsn|ht|hu|hy|hz|ia|ibb|id|ie|ig|ii|ik|ilo|inh|io|is|it|iu|ja|jam|jbo|
jct|jv|ka|kaa|kab|kac|kbd|kg|ki|kiu|kj|kjh|kk|kl|km|kn|ko|koi|krc|krj|krl|ks|
ksh|ku|kum|kv|kw|ky|la|lad|lb|lbe|lez|lg|lhu|li|lij|liv|lld|lmo|ln|lo|loz|lrc|
lt|ltg|lus|lv|lzz|mad|mai|map-bms|maz|mdf|mfe|mg|mh|mhr|mi|min|mk|ml|mn|mnc|mr|
mrj|ms|mt|mwl|mww|my|myv|mzn|na|nah|nap|nds|nds-nl|ne|new|ng|niu|njo|nl|nn|no|
non|nov|nrm|nso|nv|ny|oc|om|or|os|ota|ote|otk|pa|pag|pam|pap|pcd|pdc|pdt|pes|
pfl|pi|pih|pko|pl|pms|pnb|pnt|pny
\[4\]|ppl|prs|ps|pt|qu|rar|rif|rm|rmy|rn|ro|roa-rup|roa-tara|rtm|ru|rue|ruq|rw|
ryu|sa|sah|sc|scn|sco|sd|sdc|se|sei|sg|sgc|sh|shi|si|simple|sk|skr|sl|sli|slr|
sm|sma|sn|so|sq|sr|srn|ss|st|stq|su|sv|sw|swg|szl|ta|tcy|te|tet|tg|th|ti|tk|tl|
tn|to|tpi|tr|trp|ts|tsd|tt|tum|tvl|tw|ty|tyv|tzm|udm|ug|uk|ur|uun|uz|ve|vec|
vep|vi|vls|vmf|vo|wa|war|wls|wo|wuu|wym|xal|xh|xmf|yi|yo|yrl|yua|za|zea|zh|
zh-classical|zh-min-nan|zh-yue|zu|aa|ho|kj|kr|mh|mo|mus|qya|ru-sib|tlh|
tokipona):[^][]*\])\]


Interne Verweise kürzen, die kein : enthalten:
\[(?:\[[^][|:]*\|(.*?)\])\]
\1

Interne Verweise kürzen, die kein : und kein | enthalten:
\[(?:\[([^][|:]*)\])\]
\1

(Zweimal hintereinander ausführen) Einzelzeilen mit <id>...</id>, <ip>...</ip>,
<username>...</username>, <timestamp>...</timestamp> ersetzen:
\n.*?<(username|timestamp|i[d|p])[^>]*>.*?</\1>\n
\n

weitere Einträge mit <id>...</id> bzw. <ip>...</ip> ersetzen:
\n.*?<(username|timestamp|i[d|p])[^>]*>(.*?)</\1>


Einträge mit <ref>...</ref> ersetzen:
<(ref).*?([^&][^g][^t][^;])*?>(.*?)</\1>


<text ...> ändern zu <text>:
[\s]*?(<text)[^>]*?(>)



Bei den RegExes bin ich mir nicht so sicher:
(mehrmals wiederholen) <references>-Zeilen mitsamt zwei Überschriften ersetzen:
\n==.*?==\n+===.*?===\n+<references.*?>


(mehrmals wiederholen) <references>-Zeilen mitsamt einer Überschrift ersetzen:
\n==.*?==\n+<references.*?>


<references>-Zeilen ohne Überschrift ersetzen:
\n+<references.*?>


Einzelzeilen mit <revision> und </revision> ersetzen:
\n.*?[<|<\/]revision>


<contributor>-Zeilen ersetzen:
^.*?<contributor>.*?\n.*?<\/contributor>.*?\n

Einzelzeilen mit <comment>...</comment> ersetzen:
\n.*?<(comment)[^>]*>(.*?)</\1>\n


Wiederholen, bis keine Ersetzung mehr erfolgt:
\n\[\[Kategorie:.*?\]\]\n
\n

Wiederholen, bis keine Ersetzung mehr erfolgt:
\n\[\[Kategorie:.*?\]\]


Wiederholen, bis keine Ersetzung erfolgt:
(entfernt ganze Tabellen)
^(\{\|){1}?(.*?\n)(^(?:!|\|){1}?(.*?\n){1}?)*?\|\}\n$

(\{\|){1}?(.*?\n)(^(?:!|\|){1}?(.*?\n){1}?)*?\|\}\n$


Mit netten Grüßen
Karl




¹ Skript von Florian:
      $reader.ReadToFollowing("title") > null
      $check=$reader.ReadString()
      if(!$check.Startswith("Kategorie:") -and !$check.Startswith("Liste
von ") -and !$check.Startswith("Liste der ") -and
!$check.EndsWith("Begriffsklärung)") -and !$check.Equals("Kategorien")){
        $reader.ReadToFollowing("text") > null
        $text = $reader.ReadString()
        if ($text.ToUpper().StartsWith("__NOTOC")){$text=""}
        if ($text.ToUpper().StartsWith("#REDIRECT")){$text=""}
        if ($text.ToUpper().StartsWith("#WEITERLEITUNG")){$text=""}
        if ($text.ToUpper().StartsWith("EINE LISTE VON ")){$text=""}
        $text = $text -replace " "," " #hier kein NBSP wg. TB-Bug
        $text = $text -replace "`'`'`'",""
        $text = $text -replace "`'`'",""
        $text = $text -replace "(?m)^== Weblink.*",""
        $text = $text -replace "(?m)^== Einzelnachweise.*",""
        $text = $text -replace "(?m)^== Literatur.*",""
        $text = $text -replace "(?m)^== Referenzen.*",""
        $text = $text -replace "(?m)^? Hauptartikel:.*",""
        $text = $text -replace "(?m)^? Kategorie:.*",""
        $text = $text -replace "(?m)^Hauptartikel: .*",""
        $text = $text -replace "(?m)^Datei:.*",""
        $text = $text -replace "==+",""
        $text = $text -replace "=\s(\S*)\s="," $1"
        $text = $text -replace "<sub>|<sup>|</sub>|</sup>",""
        $text = $text -replace "\s\[{{.*}}\]",""
        $text = $text -replace "{{[^}]*}}; ",""
        $text = $text -replace "{{[^}]*}}",""
        $text = $text -replace "(?m)^{{.*",""
        $text = $text -replace "(?m)^\|.*",""
        $text = $text -replace "(?m)^{\|.*",""
        $text = $text -replace "(?m)^`!.*",""
        $text = $text -replace "(?m)^\|.*",""
        $text = $text -replace "(?m)^:<.*>",""
        $text = $text -replace "(?m)^:+(.*)",'$1'
        $text = $text -replace "(?m)^;(.*)",'$1'
        $text = $text -replace "(?m)^__.*",""
        $text = $text -replace "(?m)^Siehe auch.*",""
        $text = $text -replace "(?m)^\[\[[^\s\]]*:.*",""
        $text = $text -replace "(?m)^\* \[\[[^\s\]]*:.*",""
        $text = $text -replace "<!--.*-->",""
        $text = $text -replace "(?m)^<!--.*",""
        $text = $text -replace "(?m).*-->$",""
        $text = $text -replace "(?m)^}}\n",""
        $text = $text -replace "<[^>]*>([^<]*)</[^>]*>",'$1'
        $text = $text -creplace "<[^/]*/>",""
        $text = $text -replace "(?m)^\*\**\s?","• "
        $text = $text -replace "(?m)^#\s",""
        $text = $text -replace "<[^>]*>([^<]*)</[^>]*>",'$1'
        $text = $text -replace "\[(http:[^\]]*)\]",'$1'
        $text = $text -replace "\[\[([^|\]]*)\]\]",'$1'
        $text = $text -replace "\[\[([^|\]]*).([^|\]]*)\]\]",'$2'
        $text = $text -replace "\[\[[^\]]*\]\]",""
        $text = $text -replace "\\and","?"
        $text = $text -replace "\\vee","?"
        $text = $text -replace "\\or","?"
        $text = $text -replace "\\neg","¬"
        $text = $text -replace "\\leftrightarrow","?"
        $text = $text -replace "\\rightarrow","?"
        $text = $text -replace "\\leftarrow","?"
        $text = $text -replace "•? ?https?://[^ ]* "," "
        $text = $text -replace "(?m)^\n$",""
        $text = $text -replace "(?m)^ ",""
        $text = $text -replace "(?m)^• $",""


Antwort per Email an