L'autre jour, 100 Language Processing Knock 2020 a été publié. Je ne travaille moi-même sur le langage naturel que depuis un an, et je ne connais pas les détails, mais je vais résoudre tous les problèmes et les publier afin d'améliorer mes compétences techniques.
Tout doit être exécuté sur le notebook jupyter, et les restrictions de l'énoncé du problème peuvent être brisées de manière pratique. Le code source est également sur github. Oui.
Le chapitre 2 est ici.
L'environnement est Python 3.8.2 et Ubuntu 18.04.
Il existe un fichier jawiki-country.json.gz qui exporte les articles Wikipedia dans le format suivant. ・ Une information d'article est stockée au format JSON par ligne -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. ・ L'ensemble du fichier est compressé avec gzip Créez un programme qui effectue le traitement suivant.
Veuillez télécharger l'ensemble de données requis depuis ici.
Le fichier téléchargé est placé sous «données».
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.
Chargez le module pour décompresser gzip et charger json.
code
import gzip
import json
Lisez le fichier gzip ligne par ligne et convertissez chaque ligne en type dictionnaire avec json.loads ()
.
code
data = []
with gzip.open('data/jawiki-country.json.gz', 'rt') as f:
for line in f:
line = line.strip()
data.append(json.loads(line))
Trouvez l'élément dont le titre est "UK" dans les données et stockez-le dans "text".
code
for df in data:
if df['title'] == 'Angleterre':
text = df['text']
break
Le contenu est comme ça
{{redirect|UK}}
{{redirect|Royaume-Uni|Pays honorables au printemps et à l'automne|Anglais(Printemps et automne)}}
{{Otheruses|pays européen|Cuisine locale des préfectures de Nagasaki et Kumamoto|Igirisu}}
{{Informations de base Pays
|Nom abrégé=Angleterre
|Nom du pays japonais=Royaume-Uni de Grande-Bretagne et d'Irlande du Nord
|Nom officiel du pays= {{lang|en|United Kingdom of Great Britain and Northern Ireland}}<ref>Nom officiel du pays autre que l'anglais:<br />
*{{lang|gd|An Rìoghachd Aonaichte na Breatainn Mhòr agus Eirinn mu Thuath}}([[Gaélique écossais]])
*{{lang|cy|Teyrnas Gyfunol Prydain Fawr a Gogledd Iwerddon}}([[Pays de Galles]])
*{{lang|ga|Ríocht Aontaithe na Breataine Móire agus Tuaisceart na hÉireann}}([[irlandais]])
*{{lang|kw|An Rywvaneth Unys a Vreten Veur hag Iwerdhon Glédh}}([[Cornouailles]])
*{{lang|sco|Unitit Kinrick o Great Breetain an Northren Ireland}}([[Écossais]])
**{{lang|sco|Claught Kängrick o Docht Brätain an Norlin Airlann}}、{{lang|sco|Unitet Kängdom o Great Brittain an Norlin Airlann}}(Ulster écossais)</ref>
|Image du drapeau= Flag of the United Kingdom.svg
|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]])
|Slogan= {{lang|fr|[[Dieu et mon droit]]}}<br />([[français]]:[[Die
Extrayez la ligne qui déclare le nom de la catégorie dans l'article.
code
import re
code
lines = text.splitlines()
for line in lines:
if re.search(r'\[\[Category:.*\]\]', line):
print(line)
Extrayez le nom de la catégorie à l'aide d'une expression régulière. Extrayez toutes les lignes qui correspondent à des modèles tels que [[Category: Hogehoge]]
.
production
[[Category:Angleterre|*]]
[[Category:Pays membres du Royaume-Uni]]
[[Category:Royaume du Royaume-Uni|*]]
[[Category:Pays membres du G8]]
[[Category:Pays membres de l'Union européenne|Ancien]]
[[Category:Nation marine]]
[[Category:Pays souverain existant]]
[[Category:Pays insulaire]]
[[Category:Une nation / territoire créé en 1801]]
Extraire les noms des catégories d'articles (par nom, pas ligne par ligne).
code
for line in lines:
lst = re.findall(r'\[\[Category:(.*)\]\]', line)
for category in lst:
print(category)
Je mets les sous-chaînes correspondantes dans lst
et les affiche toutes. Vous pouvez extraire le nom de la catégorie.
production
Angleterre|*
Pays membres du Royaume-Uni
Royaume du Royaume-Uni|*
Pays membres du G8
Pays membres de l'Union européenne|Ancien
Nation marine
Pays souverain existant
Pays insulaire
Une nation / territoire créé en 1801
Afficher le nom de la section et son niveau contenus dans l'article (par exemple, 1 si "== nom de la section ==").
code
for line in lines:
if re.search(r'^==.*==$', line):
level = len(re.match(r'^=*', line).group()) - 1
title = re.sub(r'[=\s]', '', line)
print(level, title)
Extraire des lignes avec des motifs tels que = section =
, == section ==
, === section ===
, ...... Le niveau de la section est déterminé par le nombre de «=».
production
1 Nom du pays
1 Histoire
1 Géographie
2 grandes villes
2 Climat
1 politique
2 yuans
2 loi
2 Affaires intérieures
2 Division de l'administration locale
2 Diplomatie / Militaire
1 économie
2 Exploitation minière
2 Agriculture
2 Commerce
2 biens immobiliers
2 Politique énergétique
2 devises
2 entreprises
3 Communication
1 Transport
2 route
2 Chemin de fer
2 expédition
2 aviation
1 Science et technologie
1 personne
2 langues
2 Religion
2 Mariage
2 Migration
2 Éducation
2 Médical
1 culture
2 Culture alimentaire
2 Littérature
2 Philosophie
2 musique
3 musiques populaires
2 films
2 comédie
2 fleur nationale
2 Patrimoine mondial
2 jours fériés
2 sports
3 football
3 cricket
3 courses de chevaux
3 sports mécaniques
3 baseball
3 curling
3 Compétition de vélo
1 Note de bas de page
1 Articles liés
1 Lien externe
Vous pouvez également utiliser la référence arrière comme suit. Je ne l'ai pas mesuré correctement, mais je pense que c'est plus rapide. Il semble que quel exemple soit le plus lisible dépend de la personne, et je pense que peu importe lequel est le plus facile à comprendre.
code
for line in lines:
if x := re.match(r'^(==+)(.*)\1$', line):
print(len(x[1])-1, x[2].strip())
J'ai essayé d'utiliser l'opérateur Seiuchi
Puisqu'il s'agit de la section "structure", nous allons implémenter quelque chose comme la commande tree
.
code
def get_sections():
return [
(
len(re.match(r'^=*', line).group()) - 1,
re.sub(r'[=\s]', '', line)
)
for line in lines
if re.search(r'^==.*==$', line)
]
Tout d'abord, prenez la section de lines
et faites-en une liste de niveaux et de noms de section.
code
class Section(list):
def __init__(self, title):
self.title = title
super().__init__()
def last(self):
return self[-1]
def add(self, level, title):
if level == 1:
self.append(Section(title))
else:
self[-1].add(level-1, title)
def tree_lines(self, head):
lines = []
last = len(self) - 1
for i, x in enumerate(self):
line = head
line += '└' if i == last else '├'
line += x.title
lines.append(line)
lines += (x.tree_lines(head + (' ' if i == last else '│')))
return lines
def __repr__(self):
return '\n'.join(self.tree_lines(''))
Créez une classe d'objets qui contiennent des sections de manière récursive. Les objets de la section de niveau 1 héritent du type de liste et vous pouvez conserver la section de niveau 2 en vous-même.
code
root = Section('root')
for level, title in get_sections():
root.add(level, title)
root
La liste des sections obtenues par get_sections ()
est insérée récursivement à partir de la section racine en utilisant la méthode ʻadd. J'essaie de convertir récursivement de la méthode
repr` en une chaîne de caractères.
production
├ Nom du pays
├ Histoire
├ Géographie
│ ├ Principales villes
│ └ Climat
├ Politique
│ ├ Ancien chef
│ ├ méthode
│ ├ Affaires internes
│ ├ Division de l'administration locale
│ └ Diplomatie / Militaire
├ Économie
│ ├ Exploitation minière
│ ├ Agriculture
│ ├ Commerce
│ ├ Immobilier
│ ├ Politique énergétique
│ ├ Monnaie
│ └ Entreprise
│ └ Communication
├ Transport
│ ├ Route
│ ├ Chemin de fer
│ ├ Expédition
│ └ Aviation
├ Science et technologie
├ Personnes
│ ├ Langue
│ ├ Religion
│ ├ Mariage
│ ├ Migration
│ ├ Éducation
│ └ Médical
├ Culture
│ ├ Culture alimentaire
│ ├ Littérature
│ ├ Philosophie
│ ├ Musique
│ │ └ Musique populaire
│ ├ Film
│ ├ Comédie
│ ├ Kokuhana
│ ├ Patrimoine mondial
│ ├ Vacances
│ └ Sports
│ ├ Football
│ ├ Cricket
│ ├ Courses hippiques
│ ├ Sports automobiles
│ ├ Baseball
│ ├ Curling
│ └ Concours de vélo
├ Note de bas de page
├ Articles liés
└ Lien externe
Sous Sports, il n'y a pas de sections de niveau 2 avec la même section parente, donc aucune bordure n'est affichée. Seule la dernière section des sections enfants implémente cela en modifiant la bordure affichée avant le titre.
Extrayez tous les fichiers multimédias référencés dans l'article.
code
for line in lines:
lst = re.findall(r'\[\[Fichier:([^|\]]*)', line)
for x in lst:
print(x)
La partie de "en quelque sorte" qui correspond à «[[fichier: en quelque sorte]]» est extraite.
production
Royal Coat of Arms of the United Kingdom.svg
United States Navy Band - God Save the Queen.ogg
Descriptio Prime Tabulae Europae.jpg
Lenepveu, Jeanne d'Arc au siège d'Orléans.jpg
London.bankofengland.arp.jpg
Battle of Waterloo 1815.PNG
Uk topo en.jpg
BenNevis2005.jpg
Population density UK 2011 census.png
2019 Greenwich Peninsula & Canary Wharf.jpg
Birmingham Skyline from Edgbaston Cricket Ground crop.jpg
Leeds CBD at night.jpg
Glasgow and the Clyde from the air (geograph 4665720).jpg
Palace of Westminster, London - Feb 2007.jpg
Scotland Parliament Holyrood.jpg
Donald Trump and Theresa May (33998675310) (cropped).jpg
Soldiers Trooping the Colour, 16th June 2007.jpg
City of London skyline from London City Hall - Oct 2008.jpg
Oil platform in the North SeaPros.jpg
Eurostar at St Pancras Jan 2008.jpg
Heathrow Terminal 5C Iwelumo-1.jpg
Airbus A380-841 G-XLEB British Airways (10424102995).jpg
UKpop.svg
Anglospeak.svg
Royal Aberdeen Children's Hospital.jpg
CHANDOS3.jpg
The Fabs.JPG
Wembley Stadium, illuminated.jpg
Extraire les noms de champs et les valeurs du modèle "informations de base" inclus dans l'article et les stocker sous forme d'objet dictionnaire.
code
for i, line in enumerate(lines):
if line.startswith('{{Informations de base'):
start = i
elif line.startswith('}}'):
end = i
break
C'est vraiment au-delà du cadre d'une langue ordinaire. Je pense qu'il est souhaitable d'utiliser un analyseur pour le démarquage ou quelque chose du genre, mais spécifiez la plage de la ligne d'information de base.
code
templete = [
re.findall(r'\|([^=]*)=(.*)', line)
for line in lines[start+1 : end]
]
templete = [x[0] for x in templete if x]
dct = {
key.strip() : value.strip()
for key, value in templete
}
dct
Stockez le contenu dans le dictionnaire.
production
{'Nom abrégé': 'Angleterre',
'Nom du pays japonais': 'Royaume-Uni de Grande-Bretagne et d'Irlande du Nord',
'Nom officiel du pays': '{{lang|en|United Kingdom of Great Britain and Northern Ireland}}<ref>Nom officiel du pays autre que l'anglais:<br />',
'Image du drapeau': 'Flag of the United Kingdom.svg',
'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]])',
'Slogan': '{{lang|fr|[[Dieu et mon droit]]}}<br />([[français]]:[[Dieu et mon droit|Dieu et mes droits]])',
'Hymne national': "[[Sa Majesté la Reine|{{lang|en|God Save the Queen}}]]{{en icon}}<br />''Dieu, protège la reine''<br />{{center|[[Fichier:United States Navy Band - God Save the Queen.ogg]]}}",
'Image de la carte': 'Europe-UK.svg',
'Image de position': 'United Kingdom (+overseas territories) in the World (+Antarctica claims).svg',
'Terminologie officielle': '[[Anglais]]',
'Capitale': '[[Londres]](Enréalité)',
'Ville la plus grande': 'Londres',
'Ancien titre de la tête': '[[Prince britannique|Reine]]',
'Prénom': '[[Elizabeth II]]',
'Titre de premier ministre': '[[Premier ministre britannique|premier ministre]]',
'Nom du premier ministre': '[[Boris Johnson]]',
'Autre ancien titre de la tête 1': '[[Maison aristocratique(Angleterre)|Président de la maison aristocratique]]',
'Noms d'autres anciens dirigeants 1': '[[:en:Norman Fowler, Baron Fowler|Norman Fowler]]',
'Autre ancien titre de la tête 2': '[[Maison du peuple commun(Angleterre)|Président de la Maison du Commonwealth]]',
'Noms d'autres anciens dirigeants 2': '{{Lien temporaire|Feuille de Lindsay|en|Lindsay Hoyle}}',
'Autre ancien titre de la tête 3': '[[Cour suprême du Royaume-Uni|Secrétaire de la Cour suprême]]',
'Noms d'autres anciens dirigeants 3': '[[:en:Brenda Hale, Baroness Hale of Richmond|Brenda Hale]]',
'Classement de la zone': '76',
'Taille de la zone': '1 E11',
'Valeur de la zone': '244,820',
'Rapport de surface d'eau': '1.3%',
'Année du recensement': '2018',
'Classement de la population': '22',
'Taille de la population': '1 E7',
'Valeur de la population': '66 435 600<ref>{{Cite web|url=https://www.ons.gov.uk/peoplepopulationandcommunity/populationandmigration/populationestimates|title=Population estimates - Office for National Statistics|accessdate=2019-06-26|date=2019-06-26}}</ref>',
'Valeur de densité de population': '271',
'Statistiques du PIB année yuan': '2012',
'Source de valeur du PIB': '1,5478 billion<ref name="imf-statistics-gdp">[http://www.imf.org/external/pubs/ft/weo/2012/02/weodata/weorept.aspx?pr.x=70&pr.y=13&sy=2010&ey=2012&scsm=1&ssd=1&sort=country&ds=.&br=1&c=112&s=NGDP%2CNGDPD%2CPPPGDP%2CPPPPC&grp=0&a=IMF>Data and Statistics>World Economic Outlook Databases>By Countrise>United Kingdom]</ref>',
'Statistiques du PIB Année MER': '2012',
'Classement du PIB MER': '6',
'Valeur du PIB RFG': '2433,7 milliards<ref name="imf-statistics-gdp" />',
'Année statistique du PIB': '2012',
'Classement du PIB': '6',
'Valeur du PIB': '2316,2 milliards<ref name="imf-statistics-gdp" />',
'GDP/Homme': '36,727<ref name="imf-statistics-gdp" />',
'Forme fondatrice': 'Fondation du pays',
'Forme établie 1': '[[Royaume d'Angleterre]]/[[Royaume d'Ecosse]]<br />(Les deux pays[[Droit commun(1707)|1707合同法]]Jusqu'à ce que)',
'Date de création 1': '927/843',
'Forme établie 2': '[[Royaume de Grande-Bretagne]]Établi<br />(1707 Loi commune)',
'Date d'établissement 2': '1707{{0}}Peut{{0}}Un jour',
'Forme établie 3': '[[Royaume-Uni de Grande-Bretagne et d'Irlande]]Établi<br />([[Droit commun(1800)|1800合同法]])',
'Date d'établissement 3': '1801{{0}}janvier{{0}}Un jour',
'Forme établie 4': "Nom du pays actuel "'''Royaume-Uni de Grande-Bretagne et d'Irlande du Nord'''"changer en",
'Date d'établissement 4': '1927{{0}}12 avril',
'devise': '[[Étang Sterling|Livre britannique]](£)',
'Code de devise': 'GBP',
'Fuseau horaire': '±0',
'Heure d'été': '+1',
'ISO 3166-1': 'GB / GBR',
'ccTLD': '[[.uk]] / [[.gb]]<ref>L'utilisation est.Un nombre extrêmement faible par rapport au Royaume-Uni.</ref>',
'Numéro de téléphone international': '44',
'Remarque': '<references/>'}
Lors du traitement> 25, supprimez le balisage d'accentuation MediaWiki (accentuation faible, accentuation, accentuation forte) de la valeur du modèle et convertissez-le en texte.
code
dct2 = {
key : re.sub(r"''+", '', value)
for key, value in dct.items()
}
dct2
résultat
{'Nom abrégé': 'Angleterre',
'Nom du pays japonais': 'Royaume-Uni de Grande-Bretagne et d'Irlande du Nord',
'Nom officiel du pays': '{{lang|en|United Kingdom of Great Britain and Northern Ireland}}<ref>Nom officiel du pays autre que l'anglais:<br />',
'Image du drapeau': 'Flag of the United Kingdom.svg',
'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]])',
'Slogan': '{{lang|fr|[[Dieu et mon droit]]}}<br />([[français]]:[[Dieu et mon droit|Dieu et mes droits]])',
'Hymne national': '[[Sa Majesté la Reine|{{lang|en|God Save the Queen}}]]{{en icon}}<br />Dieu, protège la reine<br />{{center|[[Fichier:United States Navy Band - God Save the Queen.ogg]]}}',
'Image de la carte': 'Europe-UK.svg',
'Image de position': 'United Kingdom (+overseas territories) in the World (+Antarctica claims).svg',
'Terminologie officielle': '[[Anglais]]',
'Capitale': '[[Londres]](Enréalité)',
'Ville la plus grande': 'Londres',
'Ancien titre de la tête': '[[Prince britannique|Reine]]',
'Prénom': '[[Elizabeth II]]',
'Titre de premier ministre': '[[Premier ministre britannique|premier ministre]]',
'Nom du premier ministre': '[[Boris Johnson]]',
'Autre ancien titre de la tête 1': '[[Maison aristocratique(Angleterre)|Président de la maison aristocratique]]',
'Noms d'autres anciens dirigeants 1': '[[:en:Norman Fowler, Baron Fowler|Norman Fowler]]',
'Autre ancien titre de la tête 2': '[[Maison du peuple commun(Angleterre)|Président de la Maison du Commonwealth]]',
'Noms d'autres anciens dirigeants 2': '{{Lien temporaire|Feuille de Lindsay|en|Lindsay Hoyle}}',
'Autre ancien titre de la tête 3': '[[Cour suprême du Royaume-Uni|Secrétaire de la Cour suprême]]',
'Noms d'autres anciens dirigeants 3': '[[:en:Brenda Hale, Baroness Hale of Richmond|Brenda Hale]]',
'Classement de la zone': '76',
'Taille de la zone': '1 E11',
'Valeur de la zone': '244,820',
'Rapport de surface d'eau': '1.3%',
'Année du recensement': '2018',
'Classement de la population': '22',
'Taille de la population': '1 E7',
'Valeur de la population': '66 435 600<ref>{{Cite web|url=https://www.ons.gov.uk/peoplepopulationandcommunity/populationandmigration/populationestimates|title=Population estimates - Office for National Statistics|accessdate=2019-06-26|date=2019-06-26}}</ref>',
'Valeur de densité de population': '271',
'Statistiques du PIB année yuan': '2012',
'Source de valeur du PIB': '1,5478 billion<ref name="imf-statistics-gdp">[http://www.imf.org/external/pubs/ft/weo/2012/02/weodata/weorept.aspx?pr.x=70&pr.y=13&sy=2010&ey=2012&scsm=1&ssd=1&sort=country&ds=.&br=1&c=112&s=NGDP%2CNGDPD%2CPPPGDP%2CPPPPC&grp=0&a=IMF>Data and Statistics>World Economic Outlook Databases>By Countrise>United Kingdom]</ref>',
'Statistiques du PIB Année MER': '2012',
'Classement du PIB MER': '6',
'Valeur du PIB RFG': '2433,7 milliards<ref name="imf-statistics-gdp" />',
'Année statistique du PIB': '2012',
'Classement du PIB': '6',
'Valeur du PIB': '2316,2 milliards<ref name="imf-statistics-gdp" />',
'GDP/Homme': '36,727<ref name="imf-statistics-gdp" />',
'Forme fondatrice': 'Fondation du pays',
'Forme établie 1': '[[Royaume d'Angleterre]]/[[Royaume d'Ecosse]]<br />(Les deux pays[[Droit commun(1707)|1707合同法]]Jusqu'à ce que)',
'Date de création 1': '927/843',
'Forme établie 2': '[[Royaume de Grande-Bretagne]]Établi<br />(1707 Loi commune)',
'Date d'établissement 2': '1707{{0}}Peut{{0}}Un jour',
'Forme établie 3': '[[Royaume-Uni de Grande-Bretagne et d'Irlande]]Établi<br />([[Droit commun(1800)|1800合同法]])',
'Date d'établissement 3': '1801{{0}}janvier{{0}}Un jour',
'Forme établie 4': 'Changement du nom de pays actuel "Grande-Bretagne et Royaume-Uni d'Irlande du Nord"',
'Date d'établissement 4': '1927{{0}}12 avril',
'devise': '[[Étang Sterling|Livre britannique]](£)',
'Code de devise': 'GBP',
'Fuseau horaire': '±0',
'Heure d'été': '+1',
'ISO 3166-1': 'GB / GBR',
'ccTLD': '[[.uk]] / [[.gb]]<ref>L'utilisation est.Un nombre extrêmement faible par rapport au Royaume-Uni.</ref>',
'Numéro de téléphone international': '44',
'Remarque': '<references/>'}
En plus du processus> 26, supprimez le balisage du lien interne MediaWiki de la valeur du modèle et convertissez-le en texte.
code
def remove_link(x):
x = re.sub(r'\[\[[^\|\]]+\|[^{}\|\]]+\|([^\]]+)\]\]', r'\1', x)
x = re.sub(r'\[\[[^\|\]]+\|([^\]]+)\]\]', r'\1', x)
x = re.sub(r'\[\[([^\]]+)\]\]', r'\1', x)
return x
dct3 = {
key : remove_link(value)
for key, value in dct2.items()
}
dct3
production
{'Nom abrégé': 'Angleterre',
'Nom du pays japonais': 'Royaume-Uni de Grande-Bretagne et d'Irlande du Nord',
'Nom officiel du pays': '{{lang|en|United Kingdom of Great Britain and Northern Ireland}}<ref>Nom officiel du pays autre que l'anglais:<br />',
'Image du drapeau': 'Flag of the United Kingdom.svg',
'Image de l'emblème national': 'Emblème national britannique',
'Lien de l'emblème national': '(Emblème national)',
'Slogan': '{{lang|fr|Dieu et mon droit}}<br />(Français:Dieu et mes droits)',
'Hymne national': '{{lang|en|God Save the Queen}}{{en icon}}<br />Dieu, protège la reine<br />{{center|Fichier:United States Navy Band - God Save the Queen.ogg}}',
'Image de la carte': 'Europe-UK.svg',
'Image de position': 'United Kingdom (+overseas territories) in the World (+Antarctica claims).svg',
'Terminologie officielle': 'Anglais',
'Capitale': 'Londres (virtuellement)',
'Ville la plus grande': 'Londres',
'Ancien titre de la tête': 'Reine',
'Prénom': 'Elizabeth II',
'Titre de premier ministre': 'premier ministre',
'Nom du premier ministre': 'Boris Johnson',
'Autre ancien titre de la tête 1': 'Président de la maison aristocratique',
'Noms d'autres anciens dirigeants 1': 'Norman Fowler',
'Autre ancien titre de la tête 2': 'Président de la Maison du Commonwealth',
'Noms d'autres anciens dirigeants 2': '{{Lien temporaire|Feuille de Lindsay|en|Lindsay Hoyle}}',
'Autre ancien titre de la tête 3': 'Secrétaire de la Cour suprême',
'Noms d'autres anciens dirigeants 3': 'Brenda Hale',
'Classement de la zone': '76',
'Taille de la zone': '1 E11',
'Valeur de la zone': '244,820',
'Rapport de surface d'eau': '1.3%',
'Année du recensement': '2018',
'Classement de la population': '22',
'Taille de la population': '1 E7',
'Valeur de la population': '66 435 600<ref>{{Cite web|url=https://www.ons.gov.uk/peoplepopulationandcommunity/populationandmigration/populationestimates|title=Population estimates - Office for National Statistics|accessdate=2019-06-26|date=2019-06-26}}</ref>',
'Valeur de densité de population': '271',
'Statistiques du PIB année yuan': '2012',
'Source de valeur du PIB': '1,5478 billion<ref name="imf-statistics-gdp">[http://www.imf.org/external/pubs/ft/weo/2012/02/weodata/weorept.aspx?pr.x=70&pr.y=13&sy=2010&ey=2012&scsm=1&ssd=1&sort=country&ds=.&br=1&c=112&s=NGDP%2CNGDPD%2CPPPGDP%2CPPPPC&grp=0&a=IMF>Data and Statistics>World Economic Outlook Databases>By Countrise>United Kingdom]</ref>',
'Statistiques du PIB Année MER': '2012',
'Classement du PIB MER': '6',
'Valeur du PIB RFG': '2433,7 milliards<ref name="imf-statistics-gdp" />',
'Année statistique du PIB': '2012',
'Classement du PIB': '6',
'Valeur du PIB': '2316,2 milliards<ref name="imf-statistics-gdp" />',
'GDP/Homme': '36,727<ref name="imf-statistics-gdp" />',
'Forme fondatrice': 'Fondation du pays',
'Forme établie 1': 'Royaume d'Angleterre / Royaume d'Écosse<br />(Les deux pays jusqu'à la loi commune de 1707)',
'Date de création 1': '927/843',
'Forme établie 2': 'Création du Royaume de Grande-Bretagne<br />(1707 Loi commune)',
'Date d'établissement 2': '1707{{0}}Peut{{0}}Un jour',
'Forme établie 3': 'Création du Royaume-Uni de Grande-Bretagne et d'Irlande<br />(Loi commune 1800)',
'Date d'établissement 3': '1801{{0}}janvier{{0}}Un jour',
'Forme établie 4': 'Changement du nom de pays actuel "Grande-Bretagne et Royaume-Uni d'Irlande du Nord"',
'Date d'établissement 4': '1927{{0}}12 avril',
'devise': 'Livre britannique(£)',
'Code de devise': 'GBP',
'Fuseau horaire': '±0',
'Heure d'été': '+1',
'ISO 3166-1': 'GB / GBR',
'ccTLD': '.uk / .gb<ref>L'utilisation est.Un nombre extrêmement faible par rapport au Royaume-Uni.</ref>',
'Numéro de téléphone international': '44',
'Remarque': '<references/>'}
En plus du traitement de> 27, supprimez autant que possible le balisage MediaWiki de la valeur du modèle et formatez les informations de base du pays.
J'ai également supprimé les parties inutiles autres que le balisage MediaWiki.
code
def remove_markups(x):
x = re.sub(r'{{.*\|.*\|([^}]*)}}', r'\1', x)
x = re.sub(r'<([^>]*)( .*|)>.*</\1>', '', x)
x = re.sub(r'<[^>]*?/>', '', x)
x = re.sub(r'\{\{0\}\}', '', x)
return x
dct4 = {
key : remove_markups(value)
for key, value in dct3.items()
}
dct4
production
{'Nom abrégé': 'Angleterre',
'Nom du pays japonais': 'Royaume-Uni de Grande-Bretagne et d'Irlande du Nord',
'Nom officiel du pays': 'United Kingdom of Great Britain and Northern Ireland<ref>Nom officiel du pays autre que l'anglais:',
'Image du drapeau': 'Flag of the United Kingdom.svg',
'Image de l'emblème national': 'Emblème national britannique',
'Lien de l'emblème national': '(Emblème national)',
'Slogan': 'Dieu et mon droit (français:Dieu et mes droits)',
'Hymne national': 'Fichier:United States Navy Band - God Save the Queen.ogg',
'Image de la carte': 'Europe-UK.svg',
'Image de position': 'United Kingdom (+overseas territories) in the World (+Antarctica claims).svg',
'Terminologie officielle': 'Anglais',
'Capitale': 'Londres (virtuellement)',
'Ville la plus grande': 'Londres',
'Ancien titre de la tête': 'Reine',
'Prénom': 'Elizabeth II',
'Titre de premier ministre': 'premier ministre',
'Nom du premier ministre': 'Boris Johnson',
'Autre ancien titre de la tête 1': 'Président de la maison aristocratique',
'Noms d'autres anciens dirigeants 1': 'Norman Fowler',
'Autre ancien titre de la tête 2': 'Président de la Maison du Commonwealth',
'Noms d'autres anciens dirigeants 2': 'Lindsay Hoyle',
'Autre ancien titre de la tête 3': 'Secrétaire de la Cour suprême',
'Noms d'autres anciens dirigeants 3': 'Brenda Hale',
'Classement de la zone': '76',
'Taille de la zone': '1 E11',
'Valeur de la zone': '244,820',
'Rapport de surface d'eau': '1.3%',
'Année du recensement': '2018',
'Classement de la population': '22',
'Taille de la population': '1 E7',
'Valeur de la population': '66 435 600',
'Valeur de densité de population': '271',
'Statistiques du PIB année yuan': '2012',
'Source de valeur du PIB': '1,5478 billion',
'Statistiques du PIB Année MER': '2012',
'Classement du PIB MER': '6',
'Valeur du PIB RFG': '2433,7 milliards',
'Année statistique du PIB': '2012',
'Classement du PIB': '6',
'Valeur du PIB': '2316,2 milliards',
'GDP/Homme': '36,727',
'Forme fondatrice': 'Fondation du pays',
'Forme établie 1': 'Royaume d'Angleterre / Royaume d'Écosse (les deux pays jusqu'en 1707 Joint Act)',
'Date de création 1': '927/843',
'Forme établie 2': 'Création du Royaume de Grande-Bretagne (Joint Act 1707)',
'Date d'établissement 2': '1 mai 1707',
'Forme établie 3': 'Création du Royaume-Uni de Grande-Bretagne et d'Irlande (Joint Act 1800)',
'Date d'établissement 3': '1 janvier 1801',
'Forme établie 4': 'Changement du nom de pays actuel "Grande-Bretagne et Royaume-Uni d'Irlande du Nord"',
'Date d'établissement 4': '12 avril 1927',
'devise': 'Livre britannique(£)',
'Code de devise': 'GBP',
'Fuseau horaire': '±0',
'Heure d'été': '+1',
'ISO 3166-1': 'GB / GBR',
'ccTLD': '.uk / .gb',
'Numéro de téléphone international': '44',
'Remarque': ''}
Utilisez le contenu du modèle pour obtenir l'URL de l'image du drapeau.
code
import requests
Frappez l'API en utilisant des requêtes. J'ai fait référence au code en bas de ici.
code
filename = dct4['Image du drapeau']
session = requests.Session()
url = 'https://en.wikipedia.org/w/api.php'
params = {
'action' : 'query',
'format' : 'json',
'prop' : 'imageinfo',
'titles' : 'File:' + filename,
'iiprop' : 'url',
}
r = session.get(url=url, params=params)
data = r.json()
pages = data['query']['pages']
flag_url = pages[list(pages)[0]]['imageinfo'][0]['url']
flag_url
production
'https://upload.wikimedia.org/wikipedia/en/a/ae/Flag_of_the_United_Kingdom.svg'
Le lien est l'image ci-dessous. <img src="https://upload.wikimedia.org/wikipedia/en/a/ae/Flag_of_the_United_Kingdom.svg", width="300">
Traitement du langage 100 coups 2020 Chapitre 4: Analyse morphologique
Recommended Posts