Je vais le laisser comme un mémorandum personnel. Je voudrais l'écrire de manière aussi concise que possible afin que je puisse obtenir le fichier rapidement.
Collectez les redirections Wikipédia et créez un fichier comme celui ci-dessous.
{"src": "COVID-19", "dst": "New Coronavirus 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": "Nouvelle infection par le virus Corona", "dst": "Nouvelle infection par le virus Corona_ (2019)"}
{"src": "Covid 19", "dst": "New Coronavirus Infection_ (2019)"}
{"src": "COVID19", "dst": "New Coronavirus Infection_ (2019)"}
{"src": "Nouvelle infection à virus Corona 2019", "dst": "Nouvelle infection à virus Corona_ (2019)"}
Voir ci-dessous [Wikipédia: Redirection](https://ja.wikipedia.org/wiki/Wikipedia: Redirection)
Lorsque j'essaye d'accéder à https://ja.wikipedia.org/wiki/COVID-19, Vous serez automatiquement passé à https://ja.wikipedia.org/wiki/New Corona Virus Infection_ (2019).
pip install mysqlclient
Veuillez télécharger les données nécessaires à partir de ce qui suit.
https://dumps.wikimedia.org/jawiki/
--jawiki- [date d'acquisition du vidage] -redirect.sql.gz
--jawiki- [date d'acquisition du vidage] -page.sql.gz
$ gunzip jawiki- [date d'acquisition du vidage] -redirect.sql.gz
$ gunzip jawiki- [date d'acquisition du vidage] -page.sql.gz
$ mysql -u [nom d'utilisateur] -p [nom de la base de données] <jawiki- [date d'acquisition du vidage] -page.sql
$ mysql -u [nom d'utilisateur] -p [nom de la base de données] <jawiki- [date d'acquisition du vidage] -redirect.sql
Code qui atteint la base de données pour extraire les redirections et les enregistre dans JSON.
import json
import MySQLdb
USERNAME = "[nom d'utilisateur MySQL]"
PASSWORD = "[mot de passe]"
DB_NAME = "[nom DB]"
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__':
#Connecter à la base de données
conn = MySQLdb.connect(
user=USERNAME,
passwd=PASSWORD,
host='localhost',
db=DB_NAME
)
#Créer le curseur et exécuter la requête
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()
# Organiser les résultats d'exécution
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"]
})
#Sauvegarder
save_jsonl(OUTPUT, redirects)
cur.close()
conn.close()
python extract_redirects.py
c'est tout!
title
, page_id
est attribué individuellement aux pages Wikipedia.Dans jawiki- [date d'acquisition du vidage] -redirect.sql.gz
, la source de la redirection page_id
et la destination de la redirection titre
sont liées par un enregistrement.
Dans jawiki- [dump acquisition date] -page.sql.gz
, page_id
et title
sont liés par un enregistrement.
En combinant ces deux vidages, la source de la redirection title
et la destination de la redirection title
sont liées.
Recommended Posts