[PYTHON] Extraire les redirections des vidages Wikipedia

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.

Achèvement prévu

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)"}

Qu'est-ce qu'une redirection?

Voir ci-dessous [Wikipédia: Redirection](https://ja.wikipedia.org/wiki/Wikipedia: Redirection)

Exemple de 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).

Mise en œuvre, etc.

0. Divers éléments dont vous avez besoin

1. Restaurer Wikidump

Téléchargez les données requises

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

Dégivrer

 $ gunzip jawiki- [date d'acquisition du vidage] -redirect.sql.gz
 $ gunzip jawiki- [date d'acquisition du vidage] -page.sql.gz

Restaurer la base de données MySQL

 $ 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

2. Rediriger l'extraction

Code Python

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()

Courir

python extract_redirects.py

c'est tout!

α. Commentaires légers, etc.

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

Extraire les redirections des vidages Wikipedia
Extraire le tableau de wikipedia
Extraire des pages des vidages Wikipedia
Extraction de données depuis S3
Extrayez la quantité de caractéristiques (identité) du texte.
Extraire une langue spécifique du Wiktionnaire
Extraire des données spécifiques d'un JSON complexe
Extraire du texte d'images avec Python
Comment accéder à wikipedia depuis python
Extraire des chaînes de fichiers avec Python