[PYTHON] Extrahieren Sie Weiterleitungen aus Wikipedia-Dumps

Ich werde es als persönliches Memorandum belassen. Ich möchte es so kurz wie möglich schreiben, damit ich die Datei schnell erhalten kann.

Erwarteten Abschluss

Sammeln Sie Wikipedia-Weiterleitungen und erstellen Sie eine Datei wie die folgende.

 {"src": "COVID-19", "dst": "New Corona Virus Infection_ (2019)"}
 {"src": "COVID-2019", "dst": "New Corona Virus Infection_ (2019)"}
 {"src": "Covid-19", "dst": "New Coronavirus Infection_ (2019)"}
 {"src": "Covid-2019", "dst": "New Corona Virus Infection_ (2019)"}
 {"src": "Neue Corona-Virus-Infektion", "dst": "Neue Corona-Virus-Infektion_ (2019)"}
 {"src": "Covid 19", "dst": "New Corona Virus Infection_ (2019)"}
 {"src": "COVID19", "dst": "New Coronavirus Infection_ (2019)"}
 {"src": "2019 New Corona Virus Infection", "dst": "New Corona Virus Infection_ (2019)"}

Was ist eine Weiterleitung?

Siehe unten [Wikipedia: Redirect](https://ja.wikipedia.org/wiki/Wikipedia: Redirect)

Beispiel umleiten

Wenn ich versuche, auf https://ja.wikipedia.org/wiki/COVID-19 zuzugreifen, Sie werden automatisch zu https://ja.wikipedia.org/wiki/New Corona Virus Infection_ (2019) übersprungen.

Implementierung etc.

0. Verschiedene Dinge, die Sie brauchen

1. Stellen Sie Wikidump wieder her

Laden Sie die erforderlichen Daten herunter

Bitte laden Sie die erforderlichen Daten von folgenden herunter.

https://dumps.wikimedia.org/jawiki/

--jawiki- [Datum des Dump-Erwerbs] -redirect.sql.gz --jawiki- [Datum des Dump-Erwerbs] -page.sql.gz

Auftauen

 $ gunzip jawiki- [Datum des Dump-Erwerbs] -redirect.sql.gz
 $ gunzip jawiki- [Datum des Dump-Erwerbs] -page.sql.gz

In MySQL-Datenbank wiederherstellen

 $ mysql -u [Benutzername] -p [DB-Name] <jawiki- [Dump-Erfassungsdatum] -page.sql
 $ mysql -u [Benutzername] -p [DB-Name] <jawiki- [Dump-Erfassungsdatum] -redirect.sql

2. Extraktion umleiten

Python-Code

Code, der auf die Datenbank trifft, um Weiterleitungen zu extrahieren und in JSON zu speichern.

import json
import MySQLdb

 USERNAME = "[MySQL-Benutzername]"
 PASSWORD = "[Passwort]"
 DB_NAME = "[DB-Name]"
OUTPUT = "./redirects.json"

def save_jsonl(file_path, data):
    json_dumps = lambda d:json.dumps(d, ensure_ascii=False)
    dumps = map(json_dumps, data)
    with open(file_path, "w") as f:
        f.write("\n".join(dumps))

if __name__ == '__main__':
 # Mit Datenbank verbinden
    conn = MySQLdb.connect(
        user=USERNAME,
        passwd=PASSWORD,
        host='localhost',
        db=DB_NAME
    )

 #Cursor erstellen und Abfrage ausführen
    cur = conn.cursor(MySQLdb.cursors.DictCursor)
    sql = "select page.page_title, redirect.rd_title from page, redirect where redirect.rd_from=page.page_id"
    cur.execute(sql)
    rows = cur.fetchall()

 # Ausführungsergebnisse organisieren
    redirects = []
    for row in rows:
        row = {key:cell.decode() if type(cell) is bytes else cell for key, cell in row.items()}
        redirects.append({
            "src":row["page_title"],
            "dst":row["rd_title"]
        })

 #Sparen
    save_jsonl(OUTPUT, redirects)

    cur.close()
    conn.close()

Lauf

python extract_redirects.py

das ist alles!

α. Lichtkommentar usw.

In jawiki- [Dump-Erfassungsdatum] -redirect.sql.gz sind die Weiterleitungsquelle page_id und das Weiterleitungsziel title durch einen Datensatz verknüpft. In jawiki- [Dump-Erfassungsdatum] -page.sql.gz sind page_id und title durch einen Datensatz verknüpft.

Durch Kombinieren dieser beiden Speicherauszüge werden der Umleitungsquellentitel und der Weiterleitungszieltitel verknüpft.

Recommended Posts

Extrahieren Sie Weiterleitungen aus Wikipedia-Dumps
Tabelle aus Wikipedia extrahieren
Extrahieren Sie Seiten aus Wikipedia-Dumps
Daten aus S3 extrahieren
Extrahieren Sie die Merkmalsmenge (Identität) aus dem Text.
Extrahieren Sie eine bestimmte Sprache aus Wiktionary
Extrahieren Sie bestimmte Daten aus komplexem JSON
Extrahieren Sie mit Python Text aus Bildern
So greifen Sie über Python auf Wikipedia zu
Extrahieren Sie mit Python Zeichenfolgen aus Dateien