100 Language Processing Knock 2020 Chapitre 3: Expressions régulières

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.

Chapitre 3: Expressions régulières

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».

20. Lecture des données JSON

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

21. Extraire les lignes contenant les noms des catégories

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

22. Extraction du nom de la catégorie

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

23. Structure de la section

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.

24. Extraction des références de fichiers

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

25. Extraction de modèles

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/>'}

26. Suppression du balisage en surbrillance

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/>'}

27. Suppression des liens internes

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/>'}

28. Suppression du balisage MediaWiki

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': ''}

29. Obtenez l'URL de l'image du drapeau

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

Vient ensuite le chapitre 4

Traitement du langage 100 coups 2020 Chapitre 4: Analyse morphologique

Recommended Posts

100 Language Processing Knock 2020 Chapitre 3: Expressions régulières
100 Traitement du langage Knock Expressions régulières apprises au chapitre 3
[Traitement du langage 100 coups 2020] Chapitre 3: Expressions régulières
100 Language Processing Knock 2020 Chapitre 1
100 Traitement du langage Knock Chapitre 1
100 Language Processing Knock 2020 Chapitre 3
100 Language Processing Knock 2020 Chapitre 2
100 Language Processing Knock Chapitre 1 (Python)
100 Language Processing Knock 2020 Chapitre 2: Commandes UNIX
100 Language Processing Knock 2015 Chapitre 5 Analyse des dépendances (40-49)
100 traitements du langage naturel frappent Chapitre 3 Expressions régulières (première moitié)
100 traitements de langage avec Python
100 Language Processing Knock 2020 Chapitre 4: Analyse morphologique
100 Language Processing Knock 2020 Chapitre 9: RNN, CNN
100 coups de traitement linguistique (2020): 28
J'ai essayé 100 traitements linguistiques Knock 2020: Chapitre 3
100 traitements de langage avec Python (chapitre 3)
100 Language Processing Knock: Chapitre 1 Mouvement préparatoire
100 Language Processing Knock 2020 Chapitre 6: Apprentissage automatique
100 Traitement du langage Knock Chapitre 4: Analyse morphologique
100 traitements du langage naturel frappent Chapitre 3 Expressions régulières (seconde moitié)
100 Language Processing Knock 2020 Chapitre 5: Analyse des dépendances
100 Language Processing Knock 2020: Chapitre 3 (expression régulière)
100 Traitement du langage Knock 2020 Chapitre 7: Vecteur de mots
100 Language Processing Knock 2020 Chapitre 8: Neural Net
100 coups de traitement linguistique (2020): 38
J'ai essayé 100 traitements linguistiques Knock 2020: Chapitre 1
100 traitement de la langue frapper 00 ~ 02
100 Language Processing Knock 2020 Chapitre 1: Mouvement préparatoire
100 Language Processing Knock Chapitre 1 par Python
100 Language Processing Knock 2015 Chapitre 4 Analyse morphologique (30-39)
J'ai essayé 100 traitements linguistiques Knock 2020: Chapitre 2
J'ai essayé 100 traitements linguistiques Knock 2020: Chapitre 4
J'ai fait 100 traitements linguistiques Knock 2020 avec GiNZA v3.1 Chapitre 4
100 traitements de langage avec Python (chapitre 2, partie 2)
100 traitements de langage avec Python (chapitre 2, partie 1)
[Programmeur nouveau venu "100 language processing knock 2020"] Résoudre le chapitre 1
100 traitements linguistiques Knock 2020 [00 ~ 69 réponse]
100 traitements linguistiques Knock 2020 [00 ~ 49 réponse]
100 Traitement du langage Knock-52: Stemming
100 coups de traitement du langage ~ Chapitre 1
Le traitement de 100 langues frappe le chapitre 2 (10 ~ 19)
100 coups de traitement du langage amateur: 09
100 coups en traitement du langage amateur: 47
Traitement 100 langues knock-53: Tokenisation
100 coups de traitement du langage amateur: 97
100 traitements linguistiques Knock 2020 [00 ~ 59 réponse]
100 coups de traitement du langage amateur: 67
100 Commandes de traitement du langage Knock UNIX apprises au chapitre 2
J'ai essayé de résoudre 100 traitements linguistiques Knock version 2020 [Chapitre 3: Expressions régulières 25-29]
100 coups de traitement du langage avec Python 2015
100 traitement du langage Knock-51: découpage de mots
100 Language Processing Knock-58: Extraction de Taple
100 traitement linguistique knock-50: coupure de phrase
Traitement du langage 100 Knock-87: similitude des mots
J'ai essayé 100 traitements linguistiques Knock 2020
100 Language Processing Knock-56: analyse de co-référence
Résolution de 100 traitements linguistiques Knock 2020 (01. "Patatokukashi")
100 coups de traitement du langage amateur: Résumé
Traitement du langage 100 knock-80 (remplacé par une expression régulière): formatage du corpus
100 Language Processing Knock: Chapitre 2 Principes de base des commandes UNIX (à l'aide de pandas)