Benutzer Diskussion:UT-Bot/Duden-Link-Check

Letzter Kommentar: vor 2 Monaten von Peter Gröbner in Abschnitt Meyers

Ab sofort eine etwas andere Vorgehensweise

Habe nun mein eigenes Python-Script fertiggestellt: Nebenan landen in Zukunft nur noch die Einträge mit nicht funktionierenden Links zu duden.de.

Diese Disk.-Seite wird in Zukunft für die Prüfung also nicht mehr benötigt.

Es wird nun ca. 1 - 2 Tage dauern, bis ich aus den noch verbleibenden ca. 35.743 Verlinkungen zu duden.de die derzeit nicht funktionierenden Links mit meinem eigenen Python-Script ermittelt habe. Diese trage ich dann direkt umseitig ein.

Gruß --Udo T. (Diskussion) 18:47, 7. Sep. 2021 (MESZ)Beantworten

HTTP-Status-Code am Anfang einer Zeile

Eigentlich nicht so wichtig. Am häufigsten kommt natürlich 404 (NOT FOUND) vor und gelegentlich auch 403 (FORBIDDEN). Der 403 kommt meist dann vor, wenn auf eine Nebenform verlinkt wurde. Beispiel: https://www.duden.de/rechtschreibung/Scifi. Richtig ist hier dann https://www.duden.de/suchen/dudenonline/Sci-Fi.

Bei 301 (MOVED PERMANENTLY) wurden offensichtlich permanente Weiterleitungen eingerichtet, was Duden vielleicht bei allen verschobenen Einträgen hätte machen sollen (dann hätten wir diese ganze Arbeit hier nicht). Ich habe sie trotzdem gelistet, da es ja sein kann, dass diese permanenten Weiterleitungen irgendwann einmal wegfallen.

Beispiel: https://www.duden.de/rechtschreibung/Russe funktioniert zwar, aber man landet in Wirklichkeit bei https://www.duden.de/rechtschreibung/Russe_Einwohner_Russland. Daneben gibt es dann übrigens auch noch https://www.duden.de/rechtschreibung/Russe_Tier. Es ist also ratsam, auch in den Einträge der 301-er-Zeilen Ref-Duden an den tatsächlichen Link anzupassen.

Gruß --Udo T. (Diskussion) 11:37, 9. Sep. 2021 (MESZ)Beantworten

Dokumentation

SQL

Mit folgendem SQL können alle Einträge mit Links zu duden.de ermittelt werden:

select /* SLOW_OK */
    distinct concat("[[", convert(p.page_title, char(255)), "]] —> ",
           concat(replace(el.el_to_domain_index, '//de.duden.www.', '//www.duden.de')),el.el_to_path)
from externallinks el,
     page p
where el.el_from = p.page_id
  and el.el_to_domain_index like 'https://de.duden.www.%'
  and el.el_to_path like '/rechtschreibung/%'
  and p.page_namespace = 0
    /*and p.page_title > 'Ra'*/ /* falls mal ab einer bestimmten Stelle gesucht werden soll*/
order by p.page_title;

Das sind derzeit (03.09.2023) über 78.300 Verlinkungen!!

Wenn man einen Toolforge-Shell-Zugang hat, kann man das SQL über einen SSH-Tunnel absetzen, was relativ flott vonstatten geht, z. B. so:

ssh ?????@login.toolforge.org "mysql -s -h dewiktionary.analytics.db.svc.eqiad.wmflabs -D dewiktionary_p" < ./sqls/duden_links.sql > ./duden_links.txt

????? ist dabei der "Kontenname der Instanz-Shell" aus den Benutzer-Einstellungen von https://wikitech.wikimedia.org.


Alternativ kann man das SQL über Quarry (siehe https://quarry.wmcloud.org/query/58779) ausführen (hier dauert es aber "etwas" länger: zuletzt ca.100 Sekunden). Das Ergebnis dann bitte als CSV herunterladen und z. B. als Datei duden_links.txt abspeichern. Anschließend bitte die 1. Zeile mit "" löschen). Diese Datei wird dann vom u. a. python-Script zeilenweise verarbeitet (siehe unten).


Aussehen sollte die Datei duden_links.txt dann so:

[[-abel]] —> https://www.duden.de/rechtschreibung/_abel
[[-ade]] —> https://www.duden.de/rechtschreibung/_ade
[[-affin]] —> https://www.duden.de/rechtschreibung/_affin
[[-al]] —> https://www.duden.de/rechtschreibung/_al__ell
[[-algie]] —> https://www.duden.de/rechtschreibung/_algie
[[-and]] —> https://www.duden.de/rechtschreibung/_and
[[-ant]] —> https://www.duden.de/rechtschreibung/_ant
[[-arm]] —> https://www.duden.de/rechtschreibung/_arm
[[-ase]] —> https://www.duden.de/rechtschreibung/_ase
[[-ation]] —> https://www.duden.de/rechtschreibung/_ation
[[-bar]] —> https://www.duden.de/rechtschreibung/_bar
[[-basiert]] —> https://www.duden.de/rechtschreibung/_basiert
[…]

python

Das nachfolgende python-Script liest die oben erzeugte Datei duden_links.txt zeilenweise ein und überprüft dann jeden einzelnen Link zu duden.de.

Wenn ein Link nicht funktioniert, wird die Zeile in eine Datei duden.log protokolliert (bis jetzt hat es in solchen Fällen immer nur die Status-Codes 404 und 403 gegeben).

Es wird aber auch der Status-Code 301 (permanente Weiterleitung) protokolliert, damit diese Links (die an für sich funktionieren) zu duden.de ebenfalls an den richtigen Link angepasst werden können.

Das Script habe ich unter Ubuntu 20.04.3 LTS (python 3.8.10), Debian 11.0 (python 3.9.2) sowie Windows 10 (python 3.9.7) getestet!!

import time
from http import HTTPStatus
import requests

# bitte bei Bedarf in den 2 folgenden Parametern den kompletten Pfad ergänzen!!
linkfilename = "duden_links.txt"
logfilename = "duden.log"
HTTPnottowrite = [HTTPStatus.OK, HTTPStatus.MOVED_PERMANENTLY]
HTTPtowrite    = [HTTPStatus.FORBIDDEN, HTTPStatus.NOT_FOUND, HTTPStatus.TEMPORARY_REDIRECT, HTTPStatus.PERMANENT_REDIRECT]
HTTPtowait     = [HTTPStatus.INTERNAL_SERVER_ERROR, HTTPStatus.NOT_IMPLEMENTED, HTTPStatus.BAD_GATEWAY,
              HTTPStatus.SERVICE_UNAVAILABLE, HTTPStatus.GATEWAY_TIMEOUT]


def write_log(text):
    log = open(logfilename, "a")
    log.write(text)
    log.close()


def main(*args):
    datei = open(linkfilename, "r")
    for zeile in datei:
        worte = zeile.split(" ")
        x = 0

        r = requests.head(worte[2].strip("\n"))
        # hier wird, insbesonderer bei HTTPStatus.BAD_GATEWAY (502), zunächst alle 60 Sekunden versucht,
        # den HTTP-Request erneut abzusetzen. Bei duden.de gibt es nämlich mitunter nur kurze Aussetzer
        while r.status_code in HTTPtowait:
            x = x + 1
            time.sleep(60)
            r = requests.head(worte[2].strip("\n"))
            if x > 30:
                # Wenn es aber länger wie 30 Minuten dauert, dann macht duden.de meist eine größere Wartung
                # Deshalb abspeichern der Zeile mit dem 502, damit man dort dann später weitermachen kann
                # und Abbruch. In der Datei "duden_links.txt" sollten dann natürlich vor dem nächsten Lauf
                # alle bis dahin überprüften Zeile gelöscht werden
                zeile = "# " + str(r.status_code) + " — " + zeile
                write_log(zeile)
                write_log("BREAK!!!")
                datei.close()
                quit()

        # wenn OK (= 200) o. MOVED_PERMANENTLY (= 301) dann ist alles gut
        if r.status_code not in HTTPnottowrite:
            # ansonsten, wenn 404 o. 403, dann in "duden.log" speichern
            if r.status_code in HTTPtowrite:
                zeile = "# " + str(r.status_code) + " — " + zeile
                write_log(zeile)
            else:
                # bei einem (noch) unbekannten HTTP-Status wird erst mal abgebrochen, damit man das Script
                # entsprechend anpassen kann!!! Die Zeile mit dem noch unbekannten Code wird protokolliert
                zeile = "# " + str(r.status_code) + " — " + zeile
                write_log(zeile)
                write_log("QUIT !!!")
                datei.close()
                quit()
        time.sleep(3)

    datei.close()

    write_log("FERTIG !!!")


if __name__ == "__main__":
    main()

duden.log -> Benutzer:UT-Bot/Duden-Link-Check

Im Idealfall, wenn es also keinerlei Unterbrechungen gibt, hat das Script innerhalb von ca. 2,5 – 3 Tagen alle derzeit knapp über 72.500 Links zu duden.de geprüft!

Den Inhalt der Datei duden.log sollte man dann am Ende 1:1 in Benutzer:UT-Bot/Duden-Link-Check unterhalb von "noch zu erledigen" eintragen, sodass sich mehrere Benutzer am Korrigieren beteiligen können.

Sonstiges

Mit Hilfe dieser Doku kann jeder mit etwas Bot-Erfahrung die Links zu duden.de überprüfen (falls ich z. B. irgendwann mal nicht mehr hier sein sollte, was hoffentlich noch lange dauern wird ;o)

Bisher hat das Skript fehlerfrei funktioniert. Falls jemand doch einen Fehler entdeckt, dann bitte ich um entsprechende Mitteilung.

(wird dann zu gegebener Zeit evtl noch erweitert bzw. angepasst) --Udo T. (Diskussion) 21:24, 21. Sep. 2021 (MESZ)Beantworten

Vorlage:Ref-Duden-Suche

Ich habe sie heute im Rahmen der Bearbeitung von herzlichst bei sehnlichst kennengelernt und gleich auch bei heranwachsend angewendet. Meine Frage an Udo und alle Mitleser: Ist sie in diesen Fällen, wo der Online-Duden ein Wort verwendet, aber selbst nicht in einem eigenen Eintrag führt, sinnvoll? Gruß, Peter, 09:50, 22. Jan. 2022 (MEZ)Beantworten

Also wenn es nach mir geht, dann ist diese Vorlage eher nicht sinnvoll. Dafür haben wir ja dann die "Korpus-Referenzen" {{Wikipedia-Suche}}, {{Ref-DWDS-Korpus}} und {{Ref-UniLeipzig}}. Gruß --Udo T. (Diskussion) 13:33, 22. Jan. 2022 (MEZ)Beantworten
Jeuwre hat am 12. Juni 2015 bei heranwachsend die normale aktuell nicht (mehr?) zielführende Duden-Vorlage verwendet. Was denkt er in dieser Angelegenheit? Sollen wir den Online-Duden gar nicht bei den Referenzen anführen oder, wenn ja, mit welchem Lemma beziehungsweise welcher Vorlage? Gruß, Peter, 12:15, 23. Jan. 2022 (MEZ)Beantworten
Gelbrot hat bei der Erstellung von sehnlichst die Ref-Duden-Suche-Vorlage benutzt. Was denkt er in dieser Angelegenheit. Gruß, Peter, 12:17, 23. Jan. 2022 (MEZ)Beantworten
Ich hänge nicht an der Vorlage. Man sollte sie jetzt nicht massenweise einbauen, wo man sie nicht braucht, aber wenn sie die Beleglage unterstützt, warum nicht... gelbrot 13:53, 23. Jan. 2022 (MEZ)Beantworten
Ich werde es jetzt so handhaben, dass, wenn ich im Rahmen der umseitigen Aktion auf einen Eintrag stoße, dessen Lemma der Online-Duden verwendet, aber selbst nicht in einem eigenen Eintrag führt, ich die Referenz als toten Link entferne, den Mitarbeiter, der sie angegeben hat, aber anschreibe und auf die hier vorliegende Diskussion verweise. Danke für Deine Antwort, Peter, 15:42, 23. Jan. 2022 (MEZ)Beantworten
Ich muss gestehen, ich weiß schlicht nicht mehr, warum ich die Duden-Suche-Vorlage damals eingefügt habe. Ich habe sie schon lange nicht mehr benutzt. In meinen Augen sollten wir uns nicht-zielführende Links (also wo die Suche auf duden.de zu keinem Ergebnis führt) in den Referenzen sparen. Der hier bei heranwachsend gehört meines Erachtens dazu. Ich wüßte ehrlich gesagt nicht, wo ich diese Vorlage "online-duden-Suche" einsetzen sollte: entweder es gibt das Lemma dort oder nicht (anders als bei der DWDS-Korpus-Vorlage). Viele Grüße --Jeuwre (Diskussion) 01:54, 24. Jan. 2022 (MEZ)Beantworten

Neuer Suchlauf?

Hast Du einen neuen Suchlauf gestartet? Wenn ja, bin ich gespannt, wie oft ich einen weiteren toten Duden-Link bei den Korrekturen übersehen habe und wie viele neue Verschiebungen vorgenommen wurden. Gruß, Peter, 14:11, 19. Feb. 2022 (MEZ)Beantworten

Hallo Peter, ja habe ich. Aber da kommt bis jetzt so wenig dabei raus, dass ich es nebenbei gleich erledige. Gestern gestartet, war der Bot heute bereits beim ca. 21.000-ten Link von ca. 72.800 und hatte bisher nur ca. 10 Treffer (die meisten waren 301-er, also Weiterleitungen). Der Suchlauf wird dann wohl am Montag beendet sein, wenn nichts dazwischen kommt (z. B. wenn duden.de in Wartung geht). Gruß --Udo T. (Diskussion) 14:25, 19. Feb. 2022 (MEZ)Beantworten

Meyers

Bei manchen Substantiven funktioniert der Link zu Zeno mit der Vorlage:Ref-Meyers scheints wegen dort verwendeter Längen- oder Betonungszeichen nicht, obwohl das Lemma großgeschrieben wird. Dem kann durch Angabe des Parameters „nid“ abgeholfen werden (Spezial:Diff/9958995). Kann der Bot analog zum Duden feststellen, auf welche Einträge dies zutrifft? Gruß, Peter, 11:23, 10. Feb. 2024 (MEZ)Beantworten

Hallo Peter, ich habe das gerade an dem o. a. Beispiel geprüft und so wie es aussieht, müsste das machbar sein. Denn im bereits korrigierten Beispiel (http://www.zeno.org/Meyers-1905/A/Oxym%C5%8Dron) kommt im Header ein HTTP-Code 200 (für OK) zurück, aber was viel wichtiger ist: Mit dem alten Link (http://www.zeno.org/Meyers-1905/A/Oxymoron) wird im Header ein HTTPP-Code 404 (für NOT-FOUND) zurückgesendet.
Damit kann mein Bot natürlich arbeiten und alle Einträge suchen, in denen bei Zeno.org der HTTP-Code 404 zurückgegeben wird. Aktuell gibt es 1.861 Einträge mit einem Link zu 'http://www.zeno.org/Meyers-1905/%'
Die Links zu https://woerterbuchnetz.de/ scheinen ja zu funktionieren. Aber selbst wenn nicht, dann könnte mein Bot das dort nicht aufspüren. Denn dort wird bei einem falschen Link kein 404 zurückgesendet.
Ich werde dann mal das SQL und das python-Skript dazu schreiben und wenn es es fertig ist dann laufen lassen. Ich werde dazu eine eigene Unterseiten anlegen, wahrs. Benutzer:UT-Bot/Ref-Meyers-Zeno-org-Check. Eine tägliche Auswertung ist aber in Anbetracht der überschaubaren Anzahl an Verlinkungen (1.861) nicht notwendig.
Gruß --Udo T. (Diskussion) 12:29, 10. Feb. 2024 (MEZ)Beantworten
Danke für Deine rasche Antwort. Genau der 404er war es, der mich auf die Idee brachte, dass eine analoge Vorgangsweise wie beim Duden möglich ist. Ein täglicher Lauf ist auch m. E. nicht notwendig. Vielleicht wurden manche Referenzen auch eingetragen und überprüft, bevor eine Änderung der Vorlage oder bei Zeno das Problem erzeugte. Beim Wörterbuchnetz habe ich auch einige Fehler entdeckt, es sind aber viel weniger und wahrscheinlich nur solche, bei denen auch der Link zu Zeno nicht funktioniert. Gruß, Peter, 12:46, 10. Feb. 2024 (MEZ)Beantworten
Zurück zur Benutzerseite von „UT-Bot/Duden-Link-Check“.