3.1 Übersicht - mkappus1/DatenmanagementMTHS24 GitHub Wiki

Woche 3: Erstellung von Parallelkorpora (II) – Herunterladen von Websites.

1. Einleitung

In dieser Woche werden wir lernen, wie man Webseiten für die Erstellung von parallelen und/oder vergleichbaren Korpora herunterlädt. Wir werden uns einfache Programme zum Herunterladen von Websites und zur Konvertierung der heruntergeladenen Dateien in Text ansehen. Wie wir sehen werden, können wir generische Programme verwenden oder spezielle Skripte für bestimmte Websites erstellen.

Der Prozess des Herunterladens einer grossen Website ist sehr langsam, da wir Seite für Seite herunterladen und nicht zu viele Anfragen hintereinander stellen können, da der Webserver unsere IP blockieren könnte und uns nicht erlauben könnte, mit dem Download fortzufahren.

Das Herunterladen von Websites zur Erstellung paralleler Korpora kann sehr nützlich sein, aber Sie müssen die Qualität der Originaltexte und der Übersetzungen auf den Websites, die Sie herunterladen möchten, berücksichtigen. Es wird immer üblicher, mehrsprachige Inhalte durch maschinelle Übersetzung ohne Korrekturlesen zu veröffentlichen. Wenn wir Korpora verwenden, die von Websites mit minderwertigen Übersetzungen stammen, wird unser trainiertes neuronales Übersetzungssystem keine gute Qualität liefern können.

2. Empfohlene Lektüre

Diese Woche empfehle ich Ihnen die Lektüre des folgenden Artikels:

Bañón, M., Chen, P., Haddow, B., Heafield, K., Hoang, H., Esplà-Gomis, M., ... & Zaragoza, J. (2020, Juli). ParaCrawl: Erfassung von parallelen Korpora im Web. Association for Computational Linguistics (ACL).

3. Herunterladen von Websites mit generischen Algorithmen

3.1. Einleitung

In diesem Abschnitt werden wir uns eine Reihe allgemeiner Algorithmen zum Herunterladen von Websites und deren Konvertierung in Text ansehen. Es gibt mehrere Programme im Internet, aber ich schlage eines aus der Reihe der Programme des MTUOC-Projekts vor: MTUOC-web-downloader. Die allgemeinen Schritte für das Herunterladen mit diesem Programm sind:

  • Erstellung der Sitemap, einer Datei, die viele Links einer bestimmtenWebsite enthält.
    • Herunterladen der Sitemap-Dateien und gleichzeitiges
    • Suchen nach neuen Links innerhalb derselben Website, um diese herunterzuladen.
    • Konvertierung der heruntergeladenen Dateien in Text.

Sobald dies geschehen ist, können die Dateien aligniert werden, um unseren parallelen Korpus zu erzeugen Wir werden diesen Teil für einen späteren Abschnitt aufheben, obwohl wir viele der Dinge, die wir tun müssen, bereits aus der vorherigen Woche kennen.

In diesem Abschnitt werden wir die Website https://medlineplus.gov herunterladen, die medizinische Informationen auf Englisch und Spanisch enthält. Diese Website enthält sowohl öffentlich zugängliche als auch urheberrechtlich geschützte Inhalte: https://medlineplus.gov/spanish/acercade/uso/usodecontenido/. Dies gibt uns die Möglichkeit, über die Verwendung von im Internet veröffentlichten Inhalten nachzudenken. Ich werde diese Debatte in der Google-Gruppe des Seminars ansprechen und bin an Ihrer Meinung interessiert, also beteiligen Sie sich bitte an der Debatte.

Denken Sie jedoch daran, dass Sie jede andere Website herunterladen können, die für die Übersetzungsmaschine, die Sie trainieren möchten, von Interesse sein könnte.

Laden Sie das Download-Programm herunter und installieren Sie die Voraussetzungen.

3.2. Die Sitemap erstellen

Die Sitemap ist, wie wir bereits erwähnt haben, eine Datei, die eine Reihe von internen Links einer Website enthält.


Im Kurs von Antoni Oliver wird ein Skript bereit gestellt, dass von allen möglichen Webseiten die Sitemaps erstellt,in dem es systematisch die Orte durchsucht, in denen eine Sitemap in der Regel auf einer Webseite zu finden sind. Leider funktioniert dieses Skript nicht für alle Webseiten. Daher habe ich eigene kleine Skripte für die Website des BAG auf Deutsch/Englisch/Französisch/Italienisch erstellt. Unten zunächst die ursprüngliche Erklärung/Anleitugn von Antoni Oliver.


Um die Sitemap zu erstellen, müssen wir nur Folgendes tun:

``python3 MTUOC-sitemap.py -u https://medlineplus.gov``

Dadurch wird die Datei sitemap-medlineplus_gov.txt erstellt.

Bei der Sitemap-Datei müssen wir Folgendes beachten:

  • Es ist nicht immer möglich, diese Datei zu erstellen. In diesen Fällen enthält die Datei die von uns angegebene URL und in einigen Fällen das Google-Suchergebnis der internen Links zu dieser Website. Denken Sie beim Herunterladen der Website mit dieser Datei daran, dass auch nach internen Links gesucht wird, so dass es möglich ist, dass der Download letztendlich dennoch erfolgreich ist.
  • Die von uns erstellte Sitemap-Datei ist eine Textdatei, die wir in einem beliebigen Texteditor öffnen und nach Belieben ändern können. Wenn Sie Links sehen, die Sie nicht herunterladen möchten, können Sie diese im Editor löschen.

Versuchen Sie, Sitemaps von anderen Websites zu erstellen, die Sie interessieren, und beobachten Sie die Ergebnisse.

3.3 Herunterladen der Website

Sobald wir die Sitemap-Datei haben, können wir die Website herunterladen. Dieser Download besteht darin, die Links Zeile für Zeile herunterzuladen und sie während des Downloads zu analysieren, um zu sehen, ob neue interne Links auf der Website gefunden werden. Diese Links werden überprüft, um sicherzustellen, dass sie nicht bereits heruntergeladen wurden und nicht in der Sitemap enthalten sind. Ist dies nicht der Fall, werden sie der Liste der herunterzuladenden Links hinzugefügt.

Das Herunterladen einer Website kann sehr langsam sein und Stunden oder sogar Tage dauern. Das Programm lässt zufällige Zeiten ohne Download verstreichen, um zu verhindern, dass der Server der Website dies als eine Art Angriff erkennt und die IP-Adresse sperrt.

Um die Website herunterzuladen, verwenden wir das Programm MTUOC-download-from-sitemap.py. Dieses Programm verfügt über die Option -h, die die Hilfe anzeigt:

python3 MTUOC-download-from-sitemap.py -h
Verwendung: MTUOC-download-from-sitemap.py [-h] -f SITEMAPFILE [-d OUTDIR] [-s STRATEGY] [-l LOGFILE] [-e EXCLUDE] [-s STRATEGY] [-l LOGFILE] [-e EXCLUDE] [-e EXCLUDE
                                      [-e EXCLUDE [EXCLUDE ...]] [--nofollow] [--minwait MINWAIT] [--maxwait MAXWAIT] [--maxwait MAXWAIT] [--maxdownload MAXDOWN
                                      [--maxdownload MAXDOWLOAD] [--timeout TIMEOUT] [--maxdownload MAXDOWLOAD] [--timeout TIMEOUT] [--timeout TIMEOUT] [--timeout TIMEOUT

MTUOC-Programm zum Abrufen der Links von einer Website.

Optionen:
  -h, --help diese Hilfemeldung anzeigen und beenden
  -f SITEMAPFILE, --Datei SITEMAPFILE
                        Die Datei, die die herunterzuladenden Links enthält (die Sitemap).
  -d OUTDIR, --Verzeichnis OUTDIR
                        Das Verzeichnis, in dem die heruntergeladenen Dateien gespeichert werden sollen. Wenn nicht angegeben, wird das Unterverzeichnis "download"
                        Unterverzeichnis verwendet.
  -s STRATEGY, --strategy STRATEGY
                        Selenium (Standard) / Anfragen.
  -l LOGFILE, --log LOGFILE
                        Die zu schreibende und zu ladende Protokolldatei.
  -e EXCLUDE [EXCLUDE ...], --exclude EXCLUDE [EXCLUDE ...], --exclude EXCLUDE [EXCLUDE ...].
                        Liste der zu ignorierenden Dateierweiterungen
  --nofollow Neuen Links nicht folgen.
  --minwait MINWAIT Die minimale Zeit, die zwischen den Downloads gewartet wird. Standardwert 0.
  --maxwait MAXWAIT Die maximale Wartezeit zwischen den Downloads. Vorgabe 2 Sekunden.
  --maxdownload MAXDOWLOAD
                        Die maximale Anzahl von Webseiten, die heruntergeladen werden sollen. Defautt 1.000.000.
  --timeout TIMEOUT Der Timeout für Selenium. Vorgabe 10

Mit der Option -f oder --file geben wir die Datei an, die die Sitemap enthält, und mit -d oder --directory das Ausgabeverzeichnis, in das die Website heruntergeladen werden soll. Wenn kein Verzeichnis angegeben wird, wird sie in das Download-Verzeichnis heruntergeladen.

Mit der Option -l oder -log können Sie einen Namen für die Download-Protokolldatei angeben. Wenn Sie nichts angeben, erhält die Datei den Standardnamen downloadlo-, gefolgt von dem Namen der herunterzuladenden Website. Diese Protokolldatei ist nützlich, wie wir später noch sehen werden.

Die Option -s oder --strategy verdient besondere Aufmerksamkeit und weitere Erklärungen. Vor Jahren bestanden Websites aus einer Reihe von statischen HTML-Dateien in einem Verzeichnis. Wenn Sie die Adresse der Datei kannten, konnten Sie die Html-Datei herunterladen und sie enthielt alle Informationen. Mit der Anfragestrategie konnten Sie also Html für Html herunterladen und den gesamten Inhalt abrufen. Es gibt immer noch solche Websites, aber in den meisten Fällen wird der Inhalt der Webseiten von Skripten generiert, die Datenbanken mit dem Inhalt, Content Management Systeme usw. abfragen. Wenn Sie also die Html-Datei mit einer Strategie wie requests herunterladen, erhalten Sie eine Html-Datei, die das Skript enthält, das den Inhalt abfragt, aber nicht den Inhalt selbst. Um den Inhalt zu erhalten, müssen Sie ihn mit einem Webbrowser öffnen und darauf warten, dass das Skript den Inhalt abfragt und anzeigt. Sobald der Inhalt im Browser abgerufen wurde, kann diese Webseite mit dem Inhalt auf dem Computer gespeichert werden. Genau das tut die Selenium-Strategie: Sie öffnet einen Firefox-Browser (ohne sichtbar zu sein, d.h. sie öffnet nicht die grafische Oberfläche), lädt die Webseite und wartet darauf, dass der Inhalt "angezeigt" wird und speichert dann die Webseite mit dem Inhalt als html-Datei.

Wenn Sie mit Windows und WSL arbeiten, führt das Fehlen einer grafischen Oberfläche zu einer Menge Probleme bei der Ausführung des Downloads mit der Selenium-Strategie. Wenn Sie unter Linux auf einem Computer mit einer grafischen Oberfläche, unter Mac oder unter Windows mit CMD arbeiten, können Sie den folgenden Befehl problemlos ausführen, sobald alle Voraussetzungen installiert sind.

Glücklicherweise kann die Website, die wir herunterladen möchten, mit der Anforderungsstrategie heruntergeladen werden, indem Sie Folgendes tun:

python3 MTUOC-download-from-sitemap.py -f sitemap-medlineplus_gov.txt -s requests

Probieren Sie diese Strategie jetzt aus, wenn Sie unter Windows mit WSL und Selenium arbeiten (dies ist die Standardstrategie, Sie müssen also keine Strategie angeben).

python3 MTUOC-download-from-sitemap.py -f sitemap-medlineplus_gov.txt

Nach mehreren Stunden haben Sie die "ganze" Website heruntergeladen. Da dies sehr lange dauern kann, können Sie den Download eine Weile ruhen lassen und dann das Ergebnis unter diesem Link abrufen: http://lpg.uoc.edu/seminarioTAN/semana_3/download.zip (Sollte der Download fehlschlagen, kopieren Sie den Link und fügen ihn in Ihren Browser ein)

Während das Programm herunterlädt, erstellt es eine Protokolldatei. Diese Datei ist sehr interessant, um aufgetretene Fehler zu analysieren, einen abgebrochenen Download wieder aufzunehmen usw. Sie können die Protokolldatei des medline-Downloads hier abrufen. Die Datei hat die folgende Struktur.

SUCCESS https://medlineplus.gov/organizations/all_organizations.html download/medlineplus.gov/organizations/all_organizations.html selenium

ERROR https://medlineplus.gov/ency/anatomyvideos/000050.htm download/medlineplus.gov/ency/anatomyvideos/000050.htm selenium <class 'selenium.common.exceptions.TimeoutException'>

Wir können zählen, wie viele Fehler aufgetreten sind, indem wir tun:

grep "^ERROR" logdescargamedline.txt | wc -l
26

Wenn wir beim Einrichten einer Website zum Herunterladen eine vorhandene Protokolldatei angeben, werden die im Protokoll enthaltenen Informationen auf folgende Weise verwendet:

Links, deren Protokollzeile mit SUCCESS beginnt, werden nicht erneut heruntergeladen.
Links, deren Protokollzeile mit ERROR beginnt, werden erneut zum Download angeboten.

3.4 Konvertierung in Text

Allgemeine Konvertierung

Im MTUOC-web-downloader Repository finden Sie das Programm MTUOC-downloadedweb2text.py, mit dem Sie eine heruntergeladene Website in Text umwandeln können. Es handelt sich um einen generischen Algorithmus, der für jede der im Web vorhandenen Sprachen eine segmentierte Textdatei ausgibt. Er konvertiert die Dateien nicht einzeln, sondern erstellt eine Datei pro Sprache. Mit anderen Worten, er führt die folgenden Aktionen durch:

  • Er geht die Verzeichnisstruktur der heruntergeladenen Website durch.
  • Konvertiert jede der Dateien in Text.
    • Ermittelt automatisch die Sprache der konvertierten Datei.
    • Es segmentiert die Datei und speichert die Segmente in der Ausgabedatei, die der jeweiligen Sprache entspricht.

Die auf diese Weise erhaltenen Dateien können nicht auf klassische Weise aligniert werden, sondern auf eine Weise, die wir nächste Woche sehen werden.

Das Programm MTUOC-downloadedweb2text.py verfügt über die Option -h, die die Hilfe anzeigt:

python3 MTUOC-heruntergeladenerweb2text.py -h Verwendung: MTUOC-downloadedweb2text.py [-h] -d DIRENTRADA [-p PREFFIX] [--ldm LANGDETMODEL] [-s SRXFILE] [-s SRXFILE] [--ldm LANGDETMODEL] [-s SRXFILE] [--ldm LANGDETMODEL

MTUOC-Programm zur Konvertierung eines heruntergeladenen Webs in Text.

Optionen:
  -h, --help diese Hilfemeldung anzeigen und beenden
  -d DIRENTRADA, --Verzeichnis DIRENTRADA
                        Das Verzeichnis, in dem die heruntergeladenen Dateien gespeichert werden.
  -p PREFFIX, --preffix PREFFIX
                        Das Präfix für die Textdateien.
  --ldm LANGDETMODEL Das Spracherkennungsmodell von fastText. Standardmässig lid.176.bin.
  -s SRXFILE, --srx SRXFILE
                        Die SRX-Datei, die die Segmentierungsregeln enthält. Standardmässig segment.srx.

Denken Sie daran, dass Sie zusätzlich zu den Voraussetzungen unbedingt eine Datei mit einem Fasttext-Spracherkennungsmodell erhalten müssen. Die Vorgabe ist lid.176.bin, die Sie von https://dl.fbaipublicfiles.com/fasttext/supervised-models/lid.176.bin herunterladen können.

Wenn Sie die Standardoptionen beibehalten möchten, um die heruntergeladene Webseite im Download-Verzeichnis zu konvertieren, geben Sie einfach ein

python3 MTUOC-downloadedweb2text.py -d download/

Und Sie erhalten für jede Sprache eine Textdatei: text-en.txt, text-en.txt, text-es.txt und vielleicht noch einige mehr. Es ist möglich, dass aufgrund von Fehlern bei der Spracherkennung fehlerhafte Dateien erzeugt werden. Konvertierung mit benutzerdefinierten Skripts

Bei der im vorigen Punkt erläuterten generischen Konvertierung geht die Beziehung zwischen Original- und übersetzten Seiten verloren. Bei einigen Websites existiert diese Beziehung nicht oder ist nur schwer zu erkennen. Bei anderen Websites hingegen ist die Beziehung leicht zu ermitteln. Es gibt mehrere Möglichkeiten, darunter die folgenden (in medline plus sind mehrere davon gleichzeitig angegeben):

  • Die Webseiten haben sehr ähnliche URLs, bei denen sich nur ein Element ändert: Englisch: https://medlineplus.gov/insectbitesandstings.html und Spanisch https://medlineplus.gov/spanish/insectbitesandstings.html. Beachten Sie, dass sich die URLs nur dadurch unterscheiden, dass die spanische unter /spanish/ steht, aber die Namen der html-Dateien gleich sind.

  • In der Html-Datei selbst wird diese Beziehung explizit gemacht. Wenn Sie sich den Code von https://medlineplus.gov/insectbitesandstings.html ansehen, können Sie sehen, dass die Sprache der Datei angegeben ist:

    <!DOCTYPE html>
    <html lang="en" id="health_topic" class="nojs esm" data-root="https://medlineplus.gov/">
    

    Und die URL der entsprechenden Seite auf Englisch ist ebenfalls angegeben

    <link rel="alternate" hreflang="es" href="https://medlineplus.gov/spanish/insectbitesandstings.html" />
    <link rel="alternate" hreflang="en" href="https://medlineplus.gov/insectbitesandstings.html" />
    

    Wenn wir nun beobachten, sehen wir:

    <!DOCTYPE html>
    <html lang="en" id="health_topic" class="nojs esm" data-root="https://medlineplus.gov/">
    

    und auch:

    <link rel="alternate" hreflang="en" href="https://medlineplus.gov/spanish/insectbitesandstings.html" />
    <link rel="alternate" hreflang="en" href="https://medlineplus.gov/insectbitesandstings.html" />
    

    Auf diese Weise können wir ein Skript erstellen, das die Html-Dateien in Text umwandelt, den Namen beibehält (oder einen Sprachcode hinzufügt) und diese Textdateien in getrennten Verzeichnissen nach Sprachen ablegt. Um diese Skripte zu erstellen, benötigen Sie ein Minimum an Kenntnissen in Pyhton. Ich stelle Ihnen die folgende medline2text.py zur Verfügung

Um es auszuführen, geben Sie einfach das Download-Verzeichnis an:

python3 medline2text.py herunterladen

Sie können das Ergebnis dieses Prozesses direkt herunterladen:

  • Englische Dateien: lpg.uoc.edu/seminarioTAN/semana_3/text-en.zip
  • Spanische Dateien: lpg.uoc.edu/seminarioTAN/semana_3/text-de.zip

Anhang zu Woche 3: Trafilatura - eine Python-Bibliothek für das Web-Crawling