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.
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)"}
Siehe unten [Wikipedia: Redirect](https://ja.wikipedia.org/wiki/Wikipedia: Redirect)
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.
pip install mysqlclient
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
$ gunzip jawiki- [Datum des Dump-Erwerbs] -redirect.sql.gz
$ gunzip jawiki- [Datum des Dump-Erwerbs] -page.sql.gz
$ mysql -u [Benutzername] -p [DB-Name] <jawiki- [Dump-Erfassungsdatum] -page.sql
$ mysql -u [Benutzername] -p [DB-Name] <jawiki- [Dump-Erfassungsdatum] -redirect.sql
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()
python extract_redirects.py
das ist alles!
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