Sprachverarbeitung 100 Schläge 2015 ["Kapitel 3: Reguläre Ausdrücke"](http: //www.cl.ecei.tohoku) Es ist eine Aufzeichnung von 28. "Entfernen des MediaWiki-Markups" von .ac.jp / nlp100 / # ch3). Dies ist das Ende des Markup-Entfernungssystems. Es gibt nichts Neues, an das man sich erinnern kann, und es ist ein Schlag, der das Gelernte in die Praxis umsetzt.
Verknüpfung | Bemerkungen |
---|---|
028.Entfernen des MediaWiki-Markups.ipynb | Antwortprogramm GitHub Link |
100 Klicks Amateur-Sprachverarbeitung:28 | Kopieren Sie die Quelle vieler Quellteile und fügen Sie sie ein |
Lernen Sie die Grundlagen und Tipps der kanonischen Python-Ausdrücke von Grund auf neu | Ich habe organisiert, was ich in diesem Klopfen gelernt habe |
Regulärer Ausdruck HOWTO | Python offizieller regulärer Ausdruck How To |
re ---Operation mit regulären Ausdrücken | Python offizielle Re-Paketbeschreibung |
Help:Vereinfachtes Diagramm | Wikipediaの代表的なマークアップのVereinfachtes Diagramm |
Art | Ausführung | Inhalt |
---|---|---|
OS | Ubuntu18.04.01 LTS | Es läuft virtuell |
pyenv | 1.2.15 | Ich benutze pyenv, weil ich manchmal mehrere Python-Umgebungen benutze |
Python | 3.6.9 | python3 auf pyenv.6.Ich benutze 9 3.7 oder 3.Es gibt keinen tiefen Grund, keine 8er-Serie zu verwenden Pakete werden mit venv verwaltet |
In der obigen Umgebung verwende ich die folgenden zusätzlichen Python-Pakete. Einfach mit normalem Pip installieren.
Art | Ausführung |
---|---|
pandas | 0.25.3 |
Verschiedene Informationen und Kenntnisse können extrahiert werden, indem reguläre Ausdrücke auf die Markup-Beschreibung auf der Wikipedia-Seite angewendet werden.
Reguläre Ausdrücke, JSON, Wikipedia, InfoBox, Webdienste
Eine Datei jawiki-country.json.gz, die Wikipedia-Artikel im folgenden Format exportiert Es gibt.
- Eine Artikelinformation pro Zeile wird im JSON-Format gespeichert
- In jeder Zeile wird der Artikelname im Schlüssel "title" und der Artikelkörper im Wörterbuchobjekt mit dem Schlüssel "text" gespeichert, und dieses Objekt wird im JSON-Format ausgeschrieben.
- Die gesamte Datei wird komprimiert
Erstellen Sie ein Programm, das die folgende Verarbeitung ausführt.
Entfernen Sie zusätzlich zum> 27-Prozess MediaWiki-Markups so weit wie möglich aus den Vorlagenwerten und formatieren Sie grundlegende Länderinformationen.
"MediaWiki-Markup so weit wie möglich" ... Die folgenden Teile in der Datei werden mit regulären Ausdrücken extrahiert.
Art | Format | Referenzquelle |
---|---|---|
Datei | [[Datei:Wikipedia-logo-v2-ja.png|thumb|Erläuterungstext]] | Help:Vereinfachtes Diagramm |
Externer Link | [http://www.example.org] [http://www.example.org Anzeigezeichen] |
Help:Vereinfachtes Diagramm |
Template:Lang | {{lang|Sprach-Tag|String}} | Template:Lang |
HTML-Tag | <tag> |
Keiner |
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('England')
basic = re.search(r'''
^\{\{Grundinformation.*?\n #Suchbegriff(\Ist Escape-Verarbeitung), Nicht gefangen genommen, nicht gierig
(.*?) #Beliebige Zeichenfolge
\}\} #Suchbegriff(\Ist Escape-Verarbeitung)
$ #Ende der Zeichenfolge
''', wiki_body, re.MULTILINE+re.VERBOSE+re.DOTALL)
templates = OrderedDict(re.findall(r'''
^\| # \Ist Escape-Verarbeitung, nicht erfasst
(.+?) #Ziel erfassen(key), Nicht geizig
\s* #0 oder mehr Leerzeichen
= #Suchbegriffe, nicht erfasst
\s* #0 oder mehr Leerzeichen
(.+?) #Ziel erfassen(Value), Nicht geizig
(?: #Starten Sie eine Gruppe, die nicht erfasst wird
(?=\n\|) #Neue Zeile(\n)+'|'Vor dem(Bejahender Ausblick)
| (?=\n$) #Oder ein Zeilenumbruch(\n)+Vor dem Ende(Bejahender Ausblick)
) #Ende der Gruppe, die nicht erfasst werden soll
''', basic.group(1), re.MULTILINE+re.VERBOSE+re.DOTALL))
#Markup-Entfernung
def remove_markup(string):
#Entfernen des markierten Markups
#Entfernungsziel:''Unterscheide dich von anderen''、'''Betonung'''、'''''斜体とBetonung'''''
replaced = re.sub(r'''
(\'{2,5}) #2-5'(Beginn des Markups)
(.*?) #Ein oder mehrere Zeichen (Zielzeichenfolge)
(\1) #Entspricht der ersten Aufnahme (Ende des Markups)
''', r'\2', string, flags=re.MULTILINE+re.VERBOSE)
#Entfernen von internen Linkdateien
#Entfernungsziel:[[Artikelüberschrift]]、[[Artikelüberschrift|Zeichen anzeigen]]、[[Artikelüberschrift#Abteilungsname|Zeichen anzeigen]]、[[Datei:Wi.png|thumb|Erläuterungstext]]
replaced = re.sub(r'''
\[\[ # '[['(Markup starten)
(?: #Starten Sie eine Gruppe, die nicht erfasst wird
[^|]*? # '|'Andere Zeichen als 0 Zeichen oder mehr, nicht gierig
\| # '|'
)*? #Gruppenende, diese Gruppe erscheint 0 oder mehr, nicht gierig(Änderungen von Nr. 27)
( #Gruppenstart, Ziel erfassen
(?!Category:) #Negativer Ausblick(Wenn es enthalten ist, ist es ausgeschlossen.)
([^|]*?) # '|'Andere als 0 Zeichen, nicht gierig(Zeichenfolge angezeigt werden)
)
\]\] # ']]'(Ende des Markups)
''', r'\1', replaced, flags=re.MULTILINE+re.VERBOSE)
# Template:Entfernung von Lang
#Entfernungsziel:{{lang|Sprach-Tag|String}}
replaced = re.sub(r'''
\{\{lang # '{{lang'(Markup starten)
(?: #Starten Sie eine Gruppe, die nicht erfasst wird
[^|]*? # '|'0 oder mehr Zeichen als nicht gierig
\| # '|'
)*? #Gruppenende, diese Gruppe erscheint 0 oder mehr, nicht gierig
([^|]*?) #Ziel erfassen,'|'Andere als 0 Zeichen, nicht gierig(Zeichenfolge angezeigt werden)
\}\} # '}}'(Ende des Markups)
''', r'\1', replaced, flags=re.MULTILINE+re.VERBOSE)
#Entfernen von externen Links
#Ziel entfernt werden[http(s)://xxxx] 、[http(s)://xxx xxx]
replaced = re.sub(r'''
\[https?:// # '[http://'(Markup starten)
(?: #Starten Sie eine Gruppe, die nicht erfasst wird
[^\s]*? #0 oder mehr nicht leere Zeichen, nicht gierig
\s #Leer
)? #Gruppenende, diese Gruppe erscheint 0 oder 1
([^]]*?) #Ziel erfassen,']'Andere als 0 Zeichen, nicht gierig (anzuzeigende Zeichenfolge)
\] # ']'(Ende des Markups)
''', r'\1', replaced, flags=re.MULTILINE+re.VERBOSE)
#Entfernen von HTML-Tags
#Ziel entfernt werden<xx> </xx> <xx/>
replaced = re.sub(r'''
< # '<'(Start des Markups)
.+? #1 oder mehr Zeichen, nicht gierig
> # '>'(Ende des Markups)
''', '', replaced, flags=re.MULTILINE+re.VERBOSE)
return replaced
for i, (key, value) in enumerate(templates.items()):
replaced = remove_markup(value)
templates[key] = replaced
#Zeige seltsame Dinge
if value != replaced:
print(i, key)
print('Vorher ändern\t', value)
print('Nach der veränderung\t', replaced)
print('----')
pprint(templates)
Da es fast das gleiche ist wie das Entfernen des "internen Links" des vorherigen Klopfens, wird der entsprechende teilweise reguläre Ausdruck korrigiert.
Insbesondere das Ende der ersten Gruppe unten)??
Von)*?
Es ändert sich zu. Für Dateien[[Datei:Wikipedia-logo-v2-ja.png|thumb|Erläuterungstext]]
Wann|
Erscheint mehr als einmal, also habe ich es auf 0 oder mehr gesetzt.
python
replaced = re.sub(r'''
\[\[ # '[['(Markup starten)
(?: #Starten Sie eine Gruppe, die nicht erfasst wird
[^|]*? # '|'Andere Zeichen als 0 Zeichen oder mehr, nicht gierig
\| # '|'
)*? #Gruppenende, diese Gruppe erscheint 0 oder mehr, nicht gierig(Änderungen von Nr. 27)
( #Gruppenstart, Ziel erfassen
(?!Category:) #Negativer Ausblick(Wenn es enthalten ist, ist es ausgeschlossen.)
([^|]*?) # '|'Andere als 0 Zeichen, nicht gierig(Zeichenfolge angezeigt werden)
)
\]\] # ']]'(Ende des Markups)
''', r'\1', replaced, flags=re.MULTILINE+re.VERBOSE)
Unten finden Sie die Dateien vor und nach der Änderung der Dateientfernung.
4 Nationales Emblem Bild
Vorher ändern[[Datei:Royal Coat of Arms of the United Kingdom.svg|85px|Britisches nationales Emblem]]
Nach Änderung des britischen Nationalemblems
{{lang|Sprach-Tag|String}}
形式を「String」のみに置換しています。
python
#Entfernungsziel:{{lang|Sprach-Tag|String}}
replaced = re.sub(r'''
\{\{lang # '{{lang'(Markup starten)
(?: #Starten Sie eine Gruppe, die nicht erfasst wird
[^|]*? # '|'0 oder mehr Zeichen als nicht gierig
\| # '|'
)*? #Gruppenende, diese Gruppe erscheint 0 oder mehr, nicht gierig
([^|]*?) #Ziel erfassen,'|'Andere als 0 Zeichen, nicht gierig(Zeichenfolge angezeigt werden)
\}\} # '}}'(Ende des Markups)
''', r'\1', replaced, flags=re.MULTILINE+re.VERBOSE)
Unten sehen Sie das Ergebnis des Entfernens von "Vorlage: Lang".
2 Offizieller Ländername
Vorher ändern{{lang|en|United Kingdom of Great Britain and Northern Ireland}}<ref>Offizieller Ländername außer Englisch:<br/>
*{{lang|gd|An Rìoghachd Aonaichte na Breatainn Mhòr agus Eirinn mu Thuath}}([[schottisch Gälisch]])<br/>
*{{lang|cy|Teyrnas Gyfunol Prydain Fawr a Gogledd Iwerddon}}([[Wales]])<br/>
*{{lang|ga|Ríocht Aontaithe na Breataine Móire agus Tuaisceart na hÉireann}}([[irisch]])<br/>
*{{lang|kw|An Rywvaneth Unys a Vreten Veur hag Iwerdhon Glédh}}([[Cornwall]])<br/>
*{{lang|sco|Unitit Kinrick o Great Breetain an Northren Ireland}}([[schottisch]])<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 Scottish)</ref>
Nach Änderung Vereinigtes Königreich Großbritannien und Nordirland Offizieller Ländername außer Englisch:
*Ein Rìoghachd Aonaichte na Breatainn Mhòr agus Eirinn mu Thuath (schottisch-gälisch)
*Teyrnas Gyfunol Prydain Fawr und Gogledd Iwerddon (Wale)
*Ríocht Aontai the na Breataine Móire agus Tuaisceart na hÉireann (irisch)
*Ein Rywvaneth Unys ein Vreten Veur hag Iwerdhon Glédh (Cornwall)
*Unitit Kinrick o Großer Breetain und Nordirland (schottisch)
**Claught Kängrick o Docht Brätain und Norlin Airlann, Unitet Kängdom o Great Brittain und Norlin Airlann (Alster Scottish)
----
6 Slogan
Vorher ändern{{lang|fr|Dieu et mon droit}}<br/>([[Französisch]]:Gott und meine Rechte)
Nach dem Wechsel Dieu et mon droit (Französisch):Gott und meine Rechte)
Es wird einschließlich https entfernt.
python
#Ziel entfernt werden[http(s)://xxxx] 、[http(s)://xxx xxx]
replaced = re.sub(r'''
\[https?:// # '[http://'(Markup starten)
(?: #Starten Sie eine Gruppe, die nicht erfasst wird
[^\s]*? #0 oder mehr nicht leere Zeichen, nicht gierig
\s #Leer
)? #Gruppenende, diese Gruppe erscheint 0 oder 1
([^]]*?) #Ziel erfassen,']'Andere als 0 Zeichen, nicht gierig (anzuzeigende Zeichenfolge)
\] # ']'(Ende des Markups)
''', r'\1', replaced, flags=re.MULTILINE+re.VERBOSE)
Das Folgende ist der Teil zum Entfernen externer Links.
23 Bevölkerungswert
Vor dem Wechsel 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>
Nach Änderung 63,181,775United Nations Department of Economic and Social Affairs>Population Division>Data>Population>Total Population
----
26 BIP-Wertquelle
Vor dem Wechsel 1,5478 Billionen<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>
Nach Änderung 1,5478 Billionen IWF>Data and Statistics>World Economic Outlook Databases>By Countrise>United Kingdom
HTML-Tags werden ebenfalls entfernt. Ein einfacher regulärer Ausdruck, "wenn Sie von" <"und"> "umgeben sind".
python
#Ziel entfernt werden<xx> </xx> <xx/>
replaced = re.sub(r'''
< # '<'(Start des Markups)
.+? #1 oder mehr Zeichen, nicht gierig
> # '>'(Ende des Markups)
''', '', replaced, flags=re.MULTILINE+re.VERBOSE)
Unten sind die Ergebnisse. Es gibt ziemlich viele.
2 Offizieller Ländername
Vorher ändern{{lang|en|United Kingdom of Great Britain and Northern Ireland}}<ref>Offizieller Ländername außer Englisch:<br/>
*{{lang|gd|An Rìoghachd Aonaichte na Breatainn Mhòr agus Eirinn mu Thuath}}([[schottisch Gälisch]])<br/>
*{{lang|cy|Teyrnas Gyfunol Prydain Fawr a Gogledd Iwerddon}}([[Wales]])<br/>
*{{lang|ga|Ríocht Aontaithe na Breataine Móire agus Tuaisceart na hÉireann}}([[irisch]])<br/>
*{{lang|kw|An Rywvaneth Unys a Vreten Veur hag Iwerdhon Glédh}}([[Cornwall]])<br/>
*{{lang|sco|Unitit Kinrick o Great Breetain an Northren Ireland}}([[schottisch]])<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 Scottish)</ref>
Nach Änderung Vereinigtes Königreich Großbritannien und Nordirland Offizieller Ländername außer Englisch:
*Ein Rìoghachd Aonaichte na Breatainn Mhòr agus Eirinn mu Thuath (schottisch-gälisch)
*Teyrnas Gyfunol Prydain Fawr und Gogledd Iwerddon (Wale)
*Ríocht Aontai the na Breataine Móire agus Tuaisceart na hÉireann (irisch)
*Ein Rywvaneth Unys ein Vreten Veur hag Iwerdhon Glédh (Cornwall)
*Unitit Kinrick o Great Breetain und Northren Ireland (schottisch)
**Claught Kängrick o Docht Brätain und Norlin Airlann, Unitet Kängdom o Great Brittain und Norlin Airlann (Alster Scottish)
----
6 Slogan
Vorher ändern{{lang|fr|Dieu et mon droit}}<br/>([[Französisch]]:Gott und meine Rechte)
Nach dem Wechsel Dieu et mon droit (Französisch):Gott und meine Rechte)
----
23 Bevölkerungswert
Vor dem Wechsel 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>
Nach Änderung 63,181,775United Nations Department of Economic and Social Affairs>Population Division>Data>Population>Total Population
----
26 BIP-Wertquelle
Vor dem Wechsel 1,5478 Billionen<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>
Nach Änderung 1,5478 Billionen IWF>Data and Statistics>World Economic Outlook Databases>By Countrise>United Kingdom
----
29 BIP-Wert MER
Vor dem Wechsel 2.433,7 Milliarden<ref name="imf-statistics-gdp" />
Nach Veränderung 2.433,7 Milliarden
----
32 BIP-Wert
Vor dem Wechsel 2.316,2 Milliarden<ref name="imf-statistics-gdp" />
Nach Veränderung 2.316,2 Milliarden
----
33 GDP/Mann
Vor dem Wechsel 36,727<ref name="imf-statistics-gdp" />
Nach Änderung 36,727
----
37 Festgelegtes Formular 2
Vorher ändern[[Großbritannien Königreich]]Gründung des Landes<br />([[Unionsrecht(1707)|1707連合法]])
Nach dem Wechsel wurde das Königreich Großbritannien gegründet (Union Act 1707)
----
39 Festgelegtes Formular 3
Vorher ändern[[Vereinigtes Königreich Großbritannien und Irland]]Gründung des Landes<br />([[Unionsrecht(1800)|1800連合法]])
Nach dem Wechsel wurde das Vereinigte Königreich Großbritannien und Irland gegründet (Union Act 1800)
----
48 ccTLD
Vorher ändern[[.uk]] / [[.gb]]<ref>Verwendung ist.Überwiegend kleine Zahl im Vergleich zu Großbritannien.</ref>
Nach der veränderung.uk / .gb verwenden.Überwiegend kleine Zahl im Vergleich zu Großbritannien.
----
50 Hinweis
Vorher ändern<references />
Nach der veränderung
Wenn das Programm ausgeführt wird, wird am Ende das folgende Ergebnis ausgegeben. Ich fühle mich erfrischt.
Ausgabeergebnis
OrderedDict([('Kurzbezeichnung', 'England'),
('Japanischer Ländername', 'Vereinigtes Königreich Großbritannien und Nordirland'),
('Offizieller Ländername',
'United Kingdom of Great Britain and Northern '
'Irland Offizieller Ländername in nicht englischer Sprache:\n'
'*An Rìoghachd Aonaichte na Breatainn Mhòr agus Eirinn mu '
'Thuath (schottisch-gälisch)\n'
'*Teyrnas Gyfunol Prydain Fawr und Gogledd Iwerddon (Wale)\n'
'*Ríocht Aontaithe na Breataine Móire agus Tuaisceart na '
'hÉireann (irisch)\n'
'*Ein Rywvaneth Unys ein Vreten Veur hag Iwerdhon Glédh (Cornwall)\n'
'*Unitit Kinrick o Großer Breetain und Nordirland (schottisch)\n'
'**Claught Kängrick o Docht Brätain an Norlin Airlann、Unitet '
'Kängdom o Great Brittain und Norlin Airlann (Ulster Scottish)'),
('Flaggenbild', 'Flag of the United Kingdom.svg'),
('Nationales Emblembild', 'Britisches nationales Emblem'),
('Nationaler Emblem-Link', '(Staatswappen)'),
('Slogan', 'Dieu et mon droit (französisch):Gott und meine Rechte)'),
('Nationalhymne', 'Beschütze deine Majestät die Königin, Gott'),
('Positionieren Sie das Bild', 'Location_UK_EU_Europe_001.svg'),
('Offizielle Terminologie', 'Englisch (virtuell)'),
('Hauptstadt', 'London'),
('Größte Stadt', 'London'),
('Ehemaliger Haupttitel', 'Königin'),
('Vorname', 'Elizabeth II'),
('Titel des Premierministers', 'Premierminister'),
('Name des Premierministers', 'David Cameron'),
('Gebietsrangliste', '76'),
('Flächengröße', '1 E11'),
('Flächenwert', '244,820'),
('Wasserflächenverhältnis', '1.3%'),
('Jahr der Volkszählung', '2011'),
('Bevölkerungsranking', '22'),
('Einwohnerzahl', '1 E7'),
('Bevölkerungswert',
'63,181,775United Nations Department of Economic and Social '
'Affairs>Population Division>Data>Population>Total Population'),
('Bevölkerungsdichtewert', '246'),
('BIP-Statistik Jahr Yuan', '2012'),
('BIP-Wertquelle',
'1.547,8 Milliarden IWF>Data and Statistics>World Economic Outlook '
'Databases>By Countrise>United Kingdom'),
('BIP-Statistik Jahr MER', '2012'),
('BIP-Ranking MER', '5'),
('BIP-Wert MER', '2.433,7 Milliarden'),
('Statistisches BIP-Jahr', '2012'),
('BIP-Ranking', '6'),
('BIP-Wert', '2.316,2 Milliarden'),
('GDP/Mann', '36,727'),
('Gründungsform', 'Gründung des Landes'),
('Etablierte Form 1', 'Königreich England / Königreich Schottland (beide Länder bis zum Union Act von 1707)'),
('Gründungsdatum 1', '927/843'),
('Etablierte Form 2', 'Gründung des Königreichs Großbritannien (Union Act 1707)'),
('Gründungsdatum 2', '1707'),
('Etablierte Form 3', 'Gründung des Vereinigten Königreichs Großbritannien und Irland (Union Act 1800)'),
('Gründungsdatum 3', '1801'),
('Etablierte Form 4', 'Geändert in den aktuellen Ländernamen "Großbritannien und das Vereinigte Königreich Nordirland"'),
('Gründungsdatum 4', '1927'),
('Währung', 'UK Pfund(£)'),
('Währungscode', 'GBP'),
('Zeitzone', '±0'),
('Sommerzeit', '+1'),
('ISO 3166-1', 'GB / GBR'),
('ccTLD', '.uk / .gb verwenden.Überwiegend kleine Zahl im Vergleich zu Großbritannien.'),
('Internationale Telefonnummer', '44'),
('Hinweis', '')])
Recommended Posts