Traitement du langage 100 coups 2015 ["Chapitre 3: Expressions régulières"](http: //www.cl.ecei.tohoku) .ac.jp / nlp100 / # ch3) 28ème enregistrement "Suppression du balisage MediaWiki". C'est la fin du système de suppression de balisage. Il n'y a rien de nouveau à retenir, et c'est un coup qui met en pratique ce que vous avez appris.
Lien | Remarques |
---|---|
028.Suppression du balisage MediaWiki.ipynb | Lien GitHub du programme de réponse |
100 coups de traitement du langage amateur:28 | Copiez et collez la source de nombreuses pièces source |
Apprenez les bases et les astuces des expressions canoniques Python à partir de zéro | J'ai organisé ce que j'ai appris dans ce coup |
Expression régulière HOWTO | Expression régulière officielle Python Comment faire |
re ---Opération d'expression régulière | Description officielle du paquet Python re |
Help:Graphique simplifié | Wikipediaの代表的なマークアップのGraphique simplifié |
type | version | Contenu |
---|---|---|
OS | Ubuntu18.04.01 LTS | Il fonctionne virtuellement |
pyenv | 1.2.15 | J'utilise pyenv car j'utilise parfois plusieurs environnements Python |
Python | 3.6.9 | python3 sur pyenv.6.J'utilise 9 3.7 ou 3.Il n'y a aucune raison profonde de ne pas utiliser la série 8 Les packages sont gérés à l'aide de venv |
Dans l'environnement ci-dessus, j'utilise les packages Python supplémentaires suivants. Installez simplement avec pip ordinaire.
type | version |
---|---|
pandas | 0.25.3 |
En appliquant des expressions régulières à la description du balisage sur la page Wikipédia, diverses informations et connaissances peuvent être extraites.
Expressions régulières, JSON, Wikipedia, InfoBox, services web
Un fichier jawiki-country.json.gz qui exporte les articles Wikipédia au format suivant Il y a.
- Une information d'article par ligne est stockée au format JSON --Dans chaque ligne, le nom de l'article est stocké dans la clé "title" et le corps de l'article est stocké dans l'objet dictionnaire avec la clé "text", et cet objet est écrit au format JSON. --Le fichier est entièrement compressé
Créez un programme qui effectue le traitement suivant.
En plus du processus> 27, supprimez autant que possible les balises MediaWiki des valeurs de modèle et formatez les informations de base sur le pays.
Est-ce que "le balisage MediaWiki autant que possible" ... Les parties suivantes du fichier sont extraites avec des expressions régulières.
type | Format | Source de référence |
---|---|---|
Fichier | [[Fichier:Wikipedia-logo-v2-ja.png|thumb|Texte explicatif]] | Help:Graphique simplifié |
Lien externe | [http://www.example.org] [http://www.example.caractère d'affichage de l'organisation] |
Help:Graphique simplifié |
Template:Lang | {{lang|Balise de langue|Chaîne}} | Template:Lang |
Balise HTML | <tag> |
Aucun |
from collections import OrderedDict
from pprint import pprint
import re
import pandas as pd
def extract_by_title(title):
df_wiki = pd.read_json('jawiki-country.json', lines=True)
return df_wiki[(df_wiki['title'] == title)]['text'].values[0]
wiki_body = extract_by_title('Angleterre')
basic = re.search(r'''
^\{\{Informations de base.*?\n #Terme de recherche(\Est un traitement d'échappement), Non capturé, non gourmand
(.*?) #Chaîne de caractères arbitraire
\}\} #Terme de recherche(\Est un traitement d'échappement)
$ #Fin de chaîne
''', wiki_body, re.MULTILINE+re.VERBOSE+re.DOTALL)
templates = OrderedDict(re.findall(r'''
^\| # \Est-ce un traitement d'échappement, non-capture
(.+?) #Cible de capture(key), Non gourmand
\s* #0 ou plusieurs caractères vides
= #Termes de recherche, non-capture
\s* #0 ou plusieurs caractères vides
(.+?) #Cible de capture(Value), Non gourmand
(?: #Démarrer un groupe qui n'est pas capturé
(?=\n\|) #nouvelle ligne(\n)+'|'Devant de(Une vision positive affirmative)
| (?=\n$) #Ou un saut de ligne(\n)+Avant la fin(Une vision positive affirmative)
) #Fin du groupe non ciblé pour la capture
''', basic.group(1), re.MULTILINE+re.VERBOSE+re.DOTALL))
#Suppression du balisage
def remove_markup(string):
#Suppression du balisage en surbrillance
#Cible de suppression:''Distinguer des autres''、'''Accentuation'''、'''''斜体とAccentuation'''''
replaced = re.sub(r'''
(\'{2,5}) #2-5'(Début du balisage)
(.*?) #Un ou plusieurs caractères (chaîne de caractères cible)
(\1) #Identique à la première capture (fin du balisage)
''', r'\2', string, flags=re.MULTILINE+re.VERBOSE)
#Suppression des fichiers de liens internes
#Cible de suppression:[[Le titre de l'article]]、[[Le titre de l'article|Caractère d'affichage]]、[[Le titre de l'article#Nom de la section|Caractère d'affichage]]、[[Fichier:Wi.png|thumb|Texte explicatif]]
replaced = re.sub(r'''
\[\[ # '[['(Commencer le balisage)
(?: #Démarrer un groupe qui n'est pas capturé
[^|]*? # '|'Caractères autres que 0 caractère ou plus, non gourmands
\| # '|'
)*? #Fin du groupe, ce groupe apparaît 0 ou plus, non gourmand(Changements par rapport au n ° 27)
( #Début de groupe, cible de capture
(?!Category:) #Perspectives négatives(S'il est inclus, il est exclu.)
([^|]*?) # '|'Autre que 0 caractère, non gourmand(Chaîne de caractères à afficher)
)
\]\] # ']]'(Fin du balisage)
''', r'\1', replaced, flags=re.MULTILINE+re.VERBOSE)
# Template:Suppression de Lang
#Cible de suppression:{{lang|Balise de langue|Chaîne}}
replaced = re.sub(r'''
\{\{lang # '{{lang'(Commencer le balisage)
(?: #Démarrer un groupe qui n'est pas capturé
[^|]*? # '|'0 ou plus de caractères autres que, non gourmand
\| # '|'
)*? #Fin du groupe, ce groupe apparaît 0 ou plus, non gourmand
([^|]*?) #Capturer la cible,'|'Autre que 0 caractère, non gourmand(Chaîne de caractères à afficher)
\}\} # '}}'(Fin du balisage)
''', r'\1', replaced, flags=re.MULTILINE+re.VERBOSE)
#Suppression des liens externes
#Cible à supprimer[http(s)://xxxx] 、[http(s)://xxx xxx]
replaced = re.sub(r'''
\[https?:// # '[http://'(Commencer le balisage)
(?: #Démarrer un groupe qui n'est pas capturé
[^\s]*? #0 ou plusieurs caractères non vides, non gourmands
\s #Vide
)? #Fin du groupe, ce groupe apparaît 0 ou 1
([^]]*?) #Capturer la cible,']'Autre que 0 caractère, non gourmand (chaîne de caractères à afficher)
\] # ']'(Fin du balisage)
''', r'\1', replaced, flags=re.MULTILINE+re.VERBOSE)
#Suppression des balises HTML
#Cible à supprimer<xx> </xx> <xx/>
replaced = re.sub(r'''
< # '<'(Début du balisage)
.+? #1 caractère ou plus, non gourmand
> # '>'(Fin du balisage)
''', '', replaced, flags=re.MULTILINE+re.VERBOSE)
return replaced
for i, (key, value) in enumerate(templates.items()):
replaced = remove_markup(value)
templates[key] = replaced
#Montrez des choses étranges
if value != replaced:
print(i, key)
print('Changer avant\t', value)
print('Après le changement\t', replaced)
print('----')
pprint(templates)
Comme c'est presque la même chose que la suppression du "lien interne" du coup précédent, l'expression régulière partielle correspondante est corrigée.
Plus précisément, la fin du premier groupe ci-dessous)??
De)*?
C'est en train de changer. Pour les fichiers[[Fichier:Wikipedia-logo-v2-ja.png|thumb|Texte explicatif]]
Quand|
Apparaît plus d'une fois, je l'ai donc réglé sur 0 ou plus
python
replaced = re.sub(r'''
\[\[ # '[['(Commencer le balisage)
(?: #Démarrer un groupe qui n'est pas capturé
[^|]*? # '|'Caractères autres que 0 caractère ou plus, non gourmands
\| # '|'
)*? #Fin du groupe, ce groupe apparaît 0 ou plus, non gourmand(Changements par rapport au n ° 27)
( #Début de groupe, cible de capture
(?!Category:) #Perspectives négatives(S'il est inclus, il est exclu.)
([^|]*?) # '|'Autre que 0 caractère, non gourmand(Chaîne de caractères à afficher)
)
\]\] # ']]'(Fin du balisage)
''', r'\1', replaced, flags=re.MULTILINE+re.VERBOSE)
Vous trouverez ci-dessous les fichiers avant et après le changement de suppression de fichier.
4 Image de l'emblème national
Changer avant[[Fichier:Royal Coat of Arms of the United Kingdom.svg|85px|Emblème national britannique]]
Après le changement de l'emblème national britannique
{{lang|Balise de langue|Chaîne}}
形式を「Chaîne」のみに置換しています。
python
#Cible de suppression:{{lang|Balise de langue|Chaîne}}
replaced = re.sub(r'''
\{\{lang # '{{lang'(Commencer le balisage)
(?: #Démarrer un groupe qui n'est pas capturé
[^|]*? # '|'0 ou plus de caractères autres que, non gourmand
\| # '|'
)*? #Fin du groupe, ce groupe apparaît 0 ou plus, non gourmand
([^|]*?) #Capturer la cible,'|'Autre que 0 caractère, non gourmand(Chaîne de caractères à afficher)
\}\} # '}}'(Fin du balisage)
''', r'\1', replaced, flags=re.MULTILINE+re.VERBOSE)
Voici le résultat de la suppression de "Template: Lang".
2 Nom officiel du pays
Changer avant{{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]])<br/>
*{{lang|cy|Teyrnas Gyfunol Prydain Fawr a Gogledd Iwerddon}}([[Pays de Galles]])<br/>
*{{lang|ga|Ríocht Aontaithe na Breataine Móire agus Tuaisceart na hÉireann}}([[irlandais]])<br/>
*{{lang|kw|An Rywvaneth Unys a Vreten Veur hag Iwerdhon Glédh}}([[Cornouailles]])<br/>
*{{lang|sco|Unitit Kinrick o Great Breetain an Northren Ireland}}([[Écossais]])<br/>
**{{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>
Après changement Royaume-Uni de Grande-Bretagne et d'Irlande du Nord Nom officiel du pays autre que l'anglais:
*An Rìoghachd Aonaichte na Breatainn Mhòr agus Eirinn mu Thuath (gaélique écossais)
*Teyrnas Gyfunol Prydain Fawr a Gogledd Iwerddon (Wale)
*Ríocht Aontai the na Breataine Móire agus Tuaisceart na hÉireann (irlandais)
*An Rywvaneth Unys a Vreten Veur hag Iwerdhon Glédh (Cornwall)
*Unitit Kinrick o Great Breetain an Northren Ireland (écossais)
**Claught Kängrick o Docht Brätain an Norlin Airlann, Unitet Kängdom o Great Brittain an Norlin Airlann (Alster Scottish)
----
6 slogan
Changer avant{{lang|fr|Dieu et mon droit}}<br/>([[français]]:Dieu et mes droits)
After change Dieu et mon droit (français):Dieu et mes droits)
Il est supprimé, y compris https.
python
#Cible à supprimer[http(s)://xxxx] 、[http(s)://xxx xxx]
replaced = re.sub(r'''
\[https?:// # '[http://'(Commencer le balisage)
(?: #Démarrer un groupe qui n'est pas capturé
[^\s]*? #0 ou plusieurs caractères non vides, non gourmands
\s #Vide
)? #Fin du groupe, ce groupe apparaît 0 ou 1
([^]]*?) #Capturer la cible,']'Autre que 0 caractère, non gourmand (chaîne de caractères à afficher)
\] # ']'(Fin du balisage)
''', r'\1', replaced, flags=re.MULTILINE+re.VERBOSE)
Ce qui suit est la partie de suppression de lien externe.
23 Valeur de la population
Avant le changement 63,181,775<ref>[http://esa.un.org/unpd/wpp/Excel-Data/population.htm United Nations Department of Economic and Social Affairs>Population Division>Data>Population>Total Population]</ref>
Après changement 63,181,775United Nations Department of Economic and Social Affairs>Population Division>Data>Population>Total Population
----
26 Source de valeur du PIB
Avant le changement 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>
Après changement 1,5478 billion FMI>Data and Statistics>World Economic Outlook Databases>By Countrise>United Kingdom
Les balises HTML sont également supprimées. Une expression régulière simple, "si vous êtes entouré de <ʻet
>` ".
python
#Cible à supprimer<xx> </xx> <xx/>
replaced = re.sub(r'''
< # '<'(Début du balisage)
.+? #1 caractère ou plus, non gourmand
> # '>'(Fin du balisage)
''', '', replaced, flags=re.MULTILINE+re.VERBOSE)
Voici les résultats. Il y en a beaucoup.
2 Nom officiel du pays
Changer avant{{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]])<br/>
*{{lang|cy|Teyrnas Gyfunol Prydain Fawr a Gogledd Iwerddon}}([[Pays de Galles]])<br/>
*{{lang|ga|Ríocht Aontaithe na Breataine Móire agus Tuaisceart na hÉireann}}([[irlandais]])<br/>
*{{lang|kw|An Rywvaneth Unys a Vreten Veur hag Iwerdhon Glédh}}([[Cornouailles]])<br/>
*{{lang|sco|Unitit Kinrick o Great Breetain an Northren Ireland}}([[Écossais]])<br/>
**{{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>
Après changement Royaume-Uni de Grande-Bretagne et d'Irlande du Nord Nom officiel du pays autre que l'anglais:
*An Rìoghachd Aonaichte na Breatainn Mhòr agus Eirinn mu Thuath (gaélique écossais)
*Teyrnas Gyfunol Prydain Fawr a Gogledd Iwerddon (Wale)
*Ríocht Aontai the na Breataine Móire agus Tuaisceart na hÉireann (irlandais)
*An Rywvaneth Unys a Vreten Veur hag Iwerdhon Glédh (Cornwall)
*Unitit Kinrick o Great Breetain an Northren Ireland (écossais)
**Claught Kängrick o Docht Brätain an Norlin Airlann, Unitet Kängdom o Great Brittain an Norlin Airlann (Alster Scottish)
----
6 slogan
Changer avant{{lang|fr|Dieu et mon droit}}<br/>([[français]]:Dieu et mes droits)
After change Dieu et mon droit (français):Dieu et mes droits)
----
23 Valeur de la population
Avant le changement 63,181,775<ref>[http://esa.un.org/unpd/wpp/Excel-Data/population.htm United Nations Department of Economic and Social Affairs>Population Division>Data>Population>Total Population]</ref>
Après changement 63,181,775United Nations Department of Economic and Social Affairs>Population Division>Data>Population>Total Population
----
26 Source de valeur du PIB
Avant le changement 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>
Après changement 1,5478 billion FMI>Data and Statistics>World Economic Outlook Databases>By Countrise>United Kingdom
----
29 Valeur du PIB RFG
Avant changement 2433,7 milliards<ref name="imf-statistics-gdp" />
Après changement 2433,7 milliards
----
32 Valeur du PIB
Avant changement 2316,2 milliards<ref name="imf-statistics-gdp" />
Après changement 2316,2 milliards
----
33 GDP/Homme
Avant le changement 36,727<ref name="imf-statistics-gdp" />
Après changement 36,727
----
37 Forme établie 2
Changer avant[[Royaume de Grande-Bretagne]]Fondation du pays<br />([[Droit de l'Union(1707)|1707連合法]])
Après le changement, le Royaume de Grande-Bretagne a été fondé (Union Act 1707)
----
39 Forme établie 3
Changer avant[[Royaume-Uni de Grande-Bretagne et d'Irlande]]Fondation du pays<br />([[Droit de l'Union(1800)|1800連合法]])
Après le changement, le Royaume-Uni de Grande-Bretagne et d'Irlande a été fondé (Union Act 1800)
----
48 ccTLD
Changer avant[[.uk]] / [[.gb]]<ref>L'utilisation est.Un nombre extrêmement faible par rapport au Royaume-Uni.</ref>
Après le changement.uk / .utilisation de gb.Un nombre extrêmement faible par rapport au Royaume-Uni.
----
50 Remarque
Changer avant<references />
Après le changement
Lorsque le programme est exécuté, le résultat suivant est sorti à la fin. Je me sens rafraîchi.
Résultat de sortie
OrderedDict([('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 '
'Irlande Nom officiel du pays non anglais:\n'
'*An Rìoghachd Aonaichte na Breatainn Mhòr agus Eirinn mu '
'Thuath (gaélique écossais)\n'
'*Teyrnas Gyfunol Prydain Fawr a Gogledd Iwerddon (Wale)\n'
'*Ríocht Aontaithe na Breataine Móire agus Tuaisceart na '
'hÉireann (irlandais)\n'
'*An Rywvaneth Unys a Vreten Veur hag Iwerdhon Glédh (Cornwall)\n'
'*Unitit Kinrick o Great Breetain an Northren Ireland (écossais)\n'
'**Claught Kängrick o Docht Brätain an Norlin Airlann、Unitet '
'Kängdom o Great Brittain an Norlin Airlann (Ulster Scottish)'),
('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', 'Protégez Sa Majesté la Reine, Dieu'),
('Image de position', 'Location_UK_EU_Europe_001.svg'),
('Terminologie officielle', 'Anglais (virtuellement)'),
('Capitale', 'Londres'),
('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', 'David Cameron'),
('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', '2011'),
('Classement de la population', '22'),
('Taille de la population', '1 E7'),
('Valeur de la population',
'63,181,775United Nations Department of Economic and Social '
'Affairs>Population Division>Data>Population>Total Population'),
('Valeur de densité de population', '246'),
('Statistiques du PIB année yuan', '2012'),
('Source de valeur du PIB',
'1547,8 milliards FMI>Data and Statistics>World Economic Outlook '
'Databases>By Countrise>United Kingdom'),
('Statistiques du PIB Année MER', '2012'),
('Classement du PIB MER', '5'),
('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 Union Act)'),
('Date de création 1', '927/843'),
('Forme établie 2', 'Fondation du Royaume de Grande-Bretagne (Union Act 1707)'),
('Date d'établissement 2', '1707'),
('Forme établie 3', 'Création du Royaume-Uni de Grande-Bretagne et d'Irlande (Union Act 1800)'),
('Date d'établissement 3', '1801'),
('Forme établie 4', 'Changement du nom de pays actuel "Grande-Bretagne et Royaume-Uni d'Irlande du Nord"'),
('Date de création 4', '1927'),
('devise', 'Livre britannique(£)'),
('Code de devise', 'GBP'),
('Fuseau horaire', '±0'),
('Heure d'été', '+1'),
('ISO 3166-1', 'GB / GBR'),
('ccTLD', '.uk / .utilisation gb.Un nombre extrêmement faible par rapport au Royaume-Uni.'),
('Numéro de téléphone international', '44'),
('Remarque', '')])
Recommended Posts