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.
Lisez le fichier JSON de l'article Wikipedia et affichez le texte de l'article sur "UK". Dans les problèmes 21-29, exécutez sur le texte de l'article extrait ici.
json_read_020.py
#-*- coding:utf-8 -*-
import json
import gzip
import re
def uk_find():
basepath = '/Users/masassy/PycharmProjects/Pywork/training/'
filename = 'jawiki-country.json.gz'
pattern = r"Angleterre"
with gzip.open(basepath + filename, 'rt')as gf:
for line in gf:
# json.charges est str → dict, json.load is file → dict
json_data = json.loads(line)
if (re.match(json_data['title'], pattern)):
return json_data['text']
if __name__ == "__main__":
json_data = uk_find()
print(json_data)
result
{{redirect|UK}}
{{Informations de base Pays
|Nom abrégé=Angleterre
(Omis parce que c'est long)
[[Category:Pays insulaire|Kureito Furiten]]
[[Category:État / région créé en 1801]]
Process finished with exit code 0
Impressions: Il m'a fallu un certain temps pour comprendre le format de données du fichier lu par gzip.open et le format de données de json_data.
Extrayez la ligne qui déclare le nom de la catégorie dans l'article.
category_021.py
from training.json_read_020 import uk_find
import re
if __name__=="__main__":
pattern = re.compile(r'.*Category.*')
lines = uk_find()
for line in lines.split('\n'):
if pattern.match(line):
print(line)
result
[[Category:Angleterre|*]]
[[Category:Royaume du Royaume-Uni|*]]
[[Category:Pays membres du G8]]
[[Category:Pays membres de l'Union européenne]]
[[Category:Nation marine]]
[[Category:Pays souverain]]
[[Category:Pays insulaire|Kureito Furiten]]
[[Category:État / région créé en 1801]]
Process finished with exit code 0
Impressions: Il m'a fallu un certain temps pour réaliser que la combinaison de l'expression régulière. \ * Caractère de recherche. \ * Et lines.split ('\ n') peut renvoyer des lignes contenant le caractère de recherche.
Extrayez les noms des catégories d'articles (par nom et non par ligne).
category_str_022.py
from training.json_read_020 import uk_find
import re
if __name__=="__main__":
pattern = re.compile(r'.*Category:.*')
pattern2 = re.compile(r'.*\|.*')
lines = uk_find()
for line in lines.split('\n'):
if pattern.match(line):
strip_line=line.lstrip("[[Category:").rstrip("]]")
if pattern2.match(strip_line):
N = strip_line.find('|')
strip_line2 = strip_line[:N]
print(strip_line2)
else:
print(strip_line)
result
Angleterre
Royaume du Royaume-Uni
Pays membres du G8
Pays membres de l'Union européenne
Nation marine
Pays souverain
Pays insulaire
État / région créé en 1801
Process finished with exit code 0
Impression: après l'extraction de la catégorie, elle est dans la ligne|S'il y a|Le point d'ingéniosité est la partie qui spécifie l'endroit à découper à la position de.
Affichez le nom de la section et son niveau contenus dans l'article (par exemple, 1 si "== nom de la section ==").
section_023.py
import re
from training.json_read_020 import uk_find
if __name__=="__main__":
pattern = re.compile(r'^=.*')
pattern2 = re.compile(r'^={2}')
pattern3 = re.compile(r'^={3}')
pattern4 = re.compile(r'^={4}')
lines=uk_find()
for line in lines.split('\n'):
if pattern.match(line):
if pattern4.match(line):
print(line.lstrip('====').rstrip('====')+':Niveau 4')
elif pattern3.match(line):
print(line.lstrip('===').rstrip('===')+':Niveau 3')
elif pattern2.match(line):
print(line.lstrip('==').rstrip('==')+':Niveau 2')
else:
print('no match')
result
Nom du pays:Niveau 2
histoire:Niveau 2
La géographie:Niveau 2
climat:Niveau 3
(Omis parce que c'est long)
Process finished with exit code 0
Impressions: Après avoir créé quatre modèles de compilation, j'ai d'abord extrait les lignes commençant par = puis j'ai branché le processus en fonction du niveau, mais c'était assez forcé. Il semble y avoir un autre bon moyen.
Extrayez tous les fichiers multimédias référencés dans l'article.
media_024.py
from training.json_read_020 import uk_find
import re
if __name__=="__main__":
pattern = re.compile(r".*(Fichier|File).*")
pattern2 = re.compile(r"^|.*")
lines = uk_find()
for line in lines.split('\n'):
if pattern2.search(line):
line = line.lstrip('|')
if pattern.search(line):
start = line.find(':')+1
end = line.find('|')
print(line[start:end])
result
Royal Coat of Arms of the United Kingdom.svg
Battle of Waterloo 1815.PNG
The British Empire.png
Uk topo en.jpg
BenNevis2005.jpg
(Omis parce que c'est long)
Impressions: Tableau de balisage pour déterminer la position des tranches Le point d'ingéniosité est d'effectuer un traitement qui correspond au format de la partie fichier à partir de
Recommended Posts