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 mysqlclientVeuillez 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