Voir First Post
9/24 ajouté
Il existe un fichier jawiki-country.json.gz qui exporte les articles Wikipédia au format suivant. ・ Les informations d'un article par ligne sont stockées au format JSON -Dans chaque ligne, le nom de l'article est stocké dans la clé "titre" et le corps de l'article est stocké dans l'objet dictionnaire avec la clé "texte", et cet objet est écrit au format JSON. -Le fichier entier est compressé avec gzip Créez un programme qui effectue le traitement suivant.
Extrayez les noms de champ et les valeurs du modèle «informations de base» inclus dans l'article et stockez-les sous forme d'objet dictionnaire.
basic_info_025.py
from training.json_read_020 import uk_find
import re
def basic_info_find(lines):
pattern1 = re.compile(r'^\{\{[redirect|Informations de base].*')
pattern2 = re.compile(r'^\|.*')
pattern3 = re.compile(r'^\}\}$')
basic_dict = {}
for line in lines.split('\n'):
if pattern1.match(line):
continue
elif pattern2.match(line):
point = line.find('=')
MAX = len(line)
title = line[0:point].lstrip('|').rstrip(' ')
data = line[point:MAX].lstrip('= ')
basic_dict.update({title: data})
elif pattern3.match(line):
break
return basic_dict
if __name__=="__main__":
lines = uk_find()
basic_dict = basic_info_find(lines)
for key,value in basic_dict.items():
print(key+':'+value)
result
Forme établie 4:Nom du pays actuel "'''Royaume-Uni de Grande-Bretagne et d'Irlande du Nord'''"changer en
Image de l'emblème national:[[Fichier:Royal Coat of Arms of the United Kingdom.svg|85px|Emblème national britannique]]
Lien de l'emblème national:([[Emblème national britannique|emblème national]])
(Omis parce que c'est long)
Process finished with exit code 0
Impression: j'ai extrait la ligne commençant par | du résultat des informations de base et j'ai exécuté une boucle pour la stocker dans la clé et la valeur du dictionnaire avant et après =. Le résultat d'impression a été traité de manière à être facile à comprendre.
Au moment du traitement 25, supprimez le balisage d'accentuation MediaWiki (tous d'accentuation faible, d'accentuation et d'accentuation forte) de la valeur du modèle et convertissez-le en texte (Référence: Tableau de référence rapide du balisage).
emphasize_remove_026.py
from training.json_read_020 import uk_find
from training.basic_info_025 import basic_info_find
import re
def emphasize_remove(basic_dict):
pattern = re.compile(r".*'{2,4}.*")
for key,value in basic_dict.items():
if pattern.match(value):
value = value.replace("\'",'')
basic_dict.update({key:value})
return basic_dict
if __name__ == "__main__":
lines = uk_find()
basic_dict = basic_info_find(lines)
emphasize_remove_dict = emphasize_remove(basic_dict)
for key,value in emphasize_remove_dict.items():
print(key+':'+value)
result
Statistiques du PIB année yuan:2012
Forme établie 4:Changement du nom de pays actuel "Grande-Bretagne et Royaume-Uni d'Irlande du Nord"
Taille de la zone:1 E11
(Omis parce que c'est long)
Process finished with exit code 0
Impressions: il n'y avait qu'une seule partie pertinente, mais elle est définie sur '{2,4} afin que toutes les balises accentuées puissent être recherchées. Quand je l'ai trouvé, je l'ai juste remplacé par un remplacement.
En plus des 26 processus, supprimez le balisage du lien interne MediaWiki de la valeur du modèle et convertissez-le en texte (Référence: Tableau de référence rapide du balisage).
link_remove_027.py
from training.json_read_020 import uk_find
from training.basic_info_025 import basic_info_find
from training.emphasize_remove_026 import emphasize_remove
import re
def link_remove(emphasize_remove_dict):
pattern = re.compile(r".*\[{2}.*")
for key,value in emphasize_remove_dict.items():
if pattern.match(value):
value = value.replace('[[','').replace(']]','')
emphasize_remove_dict.update({key: value})
return emphasize_remove_dict
if __name__=="__main__":
lines = uk_find()
basic_dict = basic_info_find(lines)
emphasize_remove_dict=emphasize_remove(basic_dict)
link_remove_dict = link_remove(emphasize_remove_dict)
for key,value in link_remove_dict.items():
print(key+':'+value)
result
Image de l'emblème national:Fichier:Royal Coat of Arms of the United Kingdom.svg|85px|Emblème national britannique
Nom officiel du pays:{{lang|en|United Kingdom of Great Britain and Northern Ireland}}<ref>Nom officiel du pays autre que l'anglais:<br/>
Forme fondatrice:Fondation du pays
(Omis parce que c'est long)
Process finished with exit code 0
Impressions: Similaire au problème 026, je viens de remplacer [[et]] par replace lorsque j'ai trouvé la partie de lien interne commençant par [[].
En plus des 27 processus, supprimez autant que possible les balises MediaWiki des valeurs de modèle et formatez les informations de base sur le pays.
markup_remove_028.py
from training.json_read_020 import uk_find
from training.basic_info_025 import basic_info_find
from training.emphasize_remove_026 import emphasize_remove
from training.link_remove_027 import link_remove
import re
#Une fonction qui supprime les kilos.
def pound_check(value):
pattern = re.compile(r".*pound.*")
if pattern.match(value):
value = value.replace("(£)",'')
return value
else:
return value
#Une fonction qui supprime la balise br.
def br_check(value):
pattern1 = re.compile(r".*<br.*")
if pattern1.match(value):
value = value.replace("<br />", '').replace("<br/>", '')
return value
else:
return value
#Une fonction qui supprime la balise ref et la description de référence.
def ref_check(value):
pattern2 = re.compile(r".*<ref.*")
if pattern2.match(value):
start_point = value.find("<ref")
value = value[0:start_point]
return value
else:
return value
#{{Quand}}Fonction à supprimer.
def brackets_check(value):
pattern3 = re.compile(r".*\{\{.*")
if pattern3.match(value):
value = value.replace("{{","").replace("}}","")
#lang|en|Obtenez 4 caractères ou plus du premier tube lorsque United ~#
start_point = value.find("|")+4
value = value[start_point:len(value)]
return value
else:
return value
#Fichier: fonction à supprimer.
def file_check(value):
pattern4 = re.compile(r".*Fichier.*")
if pattern4.match(value):
value = value.replace('Fichier:','')
start_point = value.find("|")
value = value[0:start_point]
return value
else:
return value
#Demi-largeur|Fonction à supprimer.|Seulement avec|+()Supprimez le motif existant.
def pipe_check(value):
pattern5 = re.compile(r".*\|.*")
pattern6 = re.compile(r".*\(.*")
if pattern5.match(value) and pattern6.match(value) :
end_point = value.find("|")
value = value[0:end_point] + ")"
return value
elif pattern5.match(value):
end_point = value.find("|")
value = value[0:end_point]
return value
else:
return value
#Pleine largeur (fonction de suppression
def other_check(value):
pattern7 = re.compile(r"^\(")
if pattern7.match(value):
value = value.replace("(","")
return value
else:
return value
def markup_remove(link_remove_dict):
for key,value in link_remove_dict.items():
value = pound_check(value)
value = br_check(value)
value = ref_check(value)
value = brackets_check(value)
value = file_check(value)
value = pipe_check(value)
value = other_check(value)
link_remove_dict.update({key:value})
return link_remove_dict
if __name__=="__main__":
lines = uk_find()
basic_dict = basic_info_find(lines)
emphasize_remove_dict=emphasize_remove(basic_dict)
link_remove_dict = link_remove(emphasize_remove_dict)
markup_remove_dict = markup_remove(link_remove_dict)
for key,value in markup_remove_dict.items():
print(key+':'+value)
print(len(markup_remove_dict.items()))
result
Date de création 1:927/843
Nom officiel du pays:United Kingdom of Great Britain and Northern Ireland
Forme établie 1:Royaume d'Angleterre / Royaume d'Écosse (les deux pays sont une loi de coalition(1707))
Image de position:Location_UK_EU_Europe_001.svg
Slogan:Dieu et mon droit (français:Dieu et mes droits)
ccTLD:.uk / .gb
Image du drapeau:Flag of the United Kingdom.svg
devise:Étang Sterling
(Omis parce que c'est long)
Process finished with exit code 0
Impressions: Tout d'abord, j'ai trouvé le balisage, créé un modèle de compilation et répété pour voir quel type de balisage a été capturé. .. .. Et j'ai décidé d'évaluer tous les modèles ligne par ligne. Cependant, la notation pleine largeur est poire. .. .. Je me demandais vraiment pourquoi il ne s'était pas fait prendre. .. .. Je suis fatigué.
Utilisez le contenu du modèle pour obtenir l'URL de l'image du drapeau. (Astuce: appelez imageinfo dans l'API MediaWiki pour convertir les références de fichiers en URL)
get_url_029.py
# -*- coding:utf-8-*-
from training.json_read_020 import uk_find
from training.basic_info_025 import basic_info_find
import requests
import urllib.parse
import json
import re
def image_query(filename):
url = "https://commons.wikimedia.org/w/api.php?"
action = "action=query&"
titles = "titles=File:"+urllib.parse.quote(filename)+"&"
prop = "prop=imageinfo&"
iiprop="iiprop=url&"
format = "format=json"
parameter = url +action+titles+prop+iiprop+format
return parameter
def get_request(parameter):
pattern = re.compile(r".*\"url\".*")
r = requests.get(parameter)
data = r.json()
json_data =json.dumps(data["query"]["pages"]["347935"]["imageinfo"],indent=4)
for temp in json_data.split('\n'):
if(pattern.search(temp)):
url_data = temp.replace(" ","")
else:
continue
return url_data
if __name__=="__main__":
lines = uk_find()
basic_dict = basic_info_find(lines)
parameter=image_query(basic_dict['Image du drapeau'])
get_url = get_request(parameter)
print(get_url)
result
"url":"https://upload.wikimedia.org/wikipedia/commons/a/ae/Flag_of_the_United_Kingdom.svg"
Process finished with exit code 0
Impressions: Au début, je ne savais pas quoi faire. Lorsque j'ai été recherché sur Google de différentes manières, le but était d'envoyer une demande à Wikimedia pour rechercher des données liées au nom du fichier et trouver l'URL où le fichier image est téléchargé à partir de la réponse. Il m'a fallu beaucoup de temps pour comprendre ce sujet ... C'était un problème que j'ai appris de plusieurs façons.
Recommended Posts