diedatenlaube.github.io

Blog of #DieDatenlaube

View My GitHub Profile

Neues aus der DatenBauLaube - ein Werkstatt-Zwischenbericht

Im Nachfolgenden möchte ich kurz skizzieren, was man mit den tollen “Die Gartenlaube”-Wikisource-Dumps in JSON so anfangen könnte, zunächst erstmal für eine schnöde Textanalyse, mit derer Hilfe aber neue Forschungsfragen und Tutorials entstehen (können), z.B. was cooles mit dem Natural Language Toolkit.

  1. Datei(en) downloaden:
    Mit einem wget-Befehl auf einer Console ein File von zenodo.org downloaden und mit der -O-Option einen lokalen Namen festlegen:
    wget -O gartenlaube_1891.json https://zenodo.org/record/5787665/files/GartenlaubeSeitenText_Kategorie:Die%20Gartenlaube%20%281891%29_1639446194.json?download=1
  2. mit PHP die Inhalte umkopieren:
    Die Idee ist, sämtliche Textinhalte in ihre einzelnen Wörter zerlegen (explode jeweils an einem Leerzeichen) und SQL-Statement in ein Textfile zu schreiben (fopen ... explode ... foreach ... "insert into"-fwrite)
    $filename="insert_words.sql";
        if (!$fp = fopen($filename, "a")) {
             print "Kann die Datei $filename nicht öffnen";
             exit;
        }
    
    if ($file = fopen("gartenlaube_1891.json", "r")) {
        while(!feof($file)) {
            $line = fgets($file);
            # do same stuff with the $line
            $linearray = explode(" ",  $line);
            foreach( $linearray as $word){
            fwrite($fp, "insert into words_bulk (word) values ('".addslashes(strip_tags($word))."');\n");
            }
        }
        fclose($file);
    }
    fclose($fp);
    
    Nachdem das Skript gegen die Datenbank gelaufen lassen worden ist, erfolgten erste Bereinigungen, die immer noch mit dem im Sourcefile enthaltenen HTML-Code zusammenhängen.
  3. Some SQL magic: bulk_words to words_table
    In der MySQL-Datenbank können wiederum mit dem tee-Befehl selbst neue SQL-Statements erzeugt werden, die vorher per SQL automatisch sortiert und gruppiert wurden (und mit count(*) auch noch zählbar sind): SELECT concat('insert into words (word) values (''',word,''');') FROM words_bulk GROUP BY word;
  4. analyzing SELECT UPDATE DELETE:
    Als erstes hatte mich interessiert, ob es noch besondere Substantive gibt, die als neue Main-Subjects herhalten könnten: UPDATE words SET typ='noun' WHERE word REGEXP BINARY '[A-Z]'; - Diese "noun" bin ich dann einfach durchgegangen:
  5. next steps:
    Kürzlich hatte ich ein kurzweiliges NLTK-Tutorial und dort kamen Stopwort-Dictionaries und Konkordanzlisten zur Sprache - da wird es bald eine "DieGartenlaube"-Edition dazu geben...
  6. </ol>

    Matthias Erfurth, 28. Dezember 2021

    Creative Commons Lizenzvertrag   Creative Commons Namensnennung 4.0 International Lizenz