Sprachverarbeitung 100 Schläge 2015 ["Kapitel 3: Reguläre Ausdrücke"](http: //www.cl.ecei.tohoku) Es ist eine Aufzeichnung von 26. "Entfernen von hervorgehobenem Markup" von .ac.jp / nlp100 / # ch3).
Von dieser Zeit bis zum 28. werden wir das Markup mit einem regulären Ausdruck entfernen. Dieses Mal lernen wir das Entfernen (Ersetzen) ** mit der Funktion ** sub
.
Verknüpfung | Bemerkungen |
---|---|
026.Entfernen des markierten Markups.ipynb | Antwortprogramm GitHub Link |
100 Klicks Amateur-Sprachverarbeitung:26 | 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 zum Zeitpunkt der Verarbeitung> 25 das MediaWiki-Hervorhebungsmarkup (alle schwachen Hervorhebungen, Hervorhebungen und starken Hervorhebungen) aus dem Vorlagenwert und konvertieren Sie es in Text (Referenz: [Markup-Kurzreferenz](http: // ja). wikipedia.org/wiki/Help:% E6% 97% A9% E8% A6% 8B% E8% A1% A8)).
Laut Hilfe: Kurzreferenz lautet das "hervorgehobene Markup" wie folgt: Es gibt drei Arten.
Art | Format | Beispiel |
---|---|---|
Von anderen unterscheiden (schräg) | Umgeben Sie mit zwei einfachen Anführungszeichen | ''Unterscheide dich von anderen'' |
Betonung (fett) | Mit 3 einfachen Anführungszeichen umgeben | '''Betonung''' |
Schräg und betont | Mit 5 einfachen Anführungszeichen umgeben | '''''Schräg und betont''''' |
Extrahieren Sie den folgenden Teil der Datei mit einem regulären Ausdruck. Es scheint, dass es in diesem Thema nur "Betonung (fett)" gibt.
Auszug aus dem Teil "Hervorgehobenes Markup" in der Datei
"|Etablierte Form 4=Aktueller Ländername "'''Vereinigtes Königreich Großbritannien und Nordirland'''"ändern\n
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
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)
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)
Der Hauptteil dieser Zeit ist der folgende Teil. Die sub
-Funktion wird verwendet, um das" hervorgehobene Markup "zu entfernen (zu ersetzen). Da das vierte Argument eine "Anzahl" enthält, müssen Sie den Namen angeben, wenn Sie die "Flags" (Kompilierungsflags) übergeben. Ich habe verzweifelt das Kompilierungsflag übergeben, ohne die Anzahl zu bemerken, und es hat nicht funktioniert und ich habe ungefähr 30 Minuten verschwendet ...
python
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)
Die Funktion "sub" ersetzt Zeichen. Die Reihenfolge der Argumente ist 1. Muster für reguläre Ausdrücke, 2. Ersatzzeichenfolge und 3. Ersatzzielzeichenfolge.
>>> re.sub(r'Ersatzziel', 'Ersetzt', 'Ersatzziel 対象外 Ersatzziel')
'Ersetzt Nicht zutreffend Ersetzt'
Der Wert von "Niederlassungsform 4" ist übrigens vor und nach der Änderung wie folgt.
41 Festgelegtes Formular 4
Vor Änderung Aktueller Ländername "'''Vereinigtes Königreich Großbritannien und Nordirland'''"ändern
Nach der Änderung wird der aktuelle Ländername in "Großbritannien und das Vereinigte Königreich Nordirland" geändert.
----
Wenn das Programm ausgeführt wird, werden die folgenden Ergebnisse ausgegeben. Die verbleibenden Markups werden beim 27. und 28. Lauf entfernt.
Ausgabeergebnis
OrderedDict([('Kurzbezeichnung', 'England'),
('Japanischer Ländername', 'Vereinigtes Königreich Großbritannien und Nordirland'),
('Offizieller Ländername',
'{{lang|en|United Kingdom of Great Britain and Northern '
'Ireland}}<ref>Offizieller Ländername außer Englisch:<br/>\n'
'*{{lang|gd|An Rìoghachd Aonaichte na Breatainn Mhòr agus Eirinn '
'mu Thuath}}([[schottisch Gälisch]])<br/>\n'
'*{{lang|cy|Teyrnas Gyfunol Prydain Fawr a Gogledd '
'Iwerddon}}([[Wales]])<br/>\n'
'*{{lang|ga|Ríocht Aontaithe na Breataine Móire agus Tuaisceart '
'na hÉireann}}([[irisch]])<br/>\n'
'*{{lang|kw|An Rywvaneth Unys a Vreten Veur hag Iwerdhon '
'Glédh}}([[Cornwall]])<br/>\n'
'*{{lang|sco|Unitit Kinrick o Great Breetain an Northren '
'Ireland}}([[schottisch]])<br/>\n'
'**{{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>'),
('Flaggenbild', 'Flag of the United Kingdom.svg'),
('Nationales Emblembild',
'[[Datei:Royal Coat of Arms of the United '
'Kingdom.svg|85px|Britisches nationales Emblem]]'),
('Nationaler Emblem-Link', '([[Britisches nationales Emblem|Staatswappen]])'),
('Slogan', '{{lang|fr|Dieu et mon droit}}<br/>([[Französisch]]:Gott und meine Rechte)'),
('Nationalhymne', '[[Ihre Majestät die Königin|Beschütze deine Majestät die Königin, Gott]]'),
('Positionieren Sie das Bild', 'Location_UK_EU_Europe_001.svg'),
('Offizielle Terminologie', '[[Englisch]](eigentlich)'),
('Hauptstadt', '[[London]]'),
('Größte Stadt', 'London'),
('Ehemaliger Haupttitel', '[[Britischer Prinz|Königin]]'),
('Vorname', '[[Elizabeth II]]'),
('Titel des Premierministers', '[[britischer Premierminister|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,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>'),
('Bevölkerungsdichtewert', '246'),
('BIP-Statistik Jahr Yuan', '2012'),
('BIP-Wertquelle',
'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>'),
('BIP-Statistik Jahr MER', '2012'),
('BIP-Ranking MER', '5'),
('BIP-Wert MER', '2.433,7 Milliarden<ref name="imf-statistics-gdp" />'),
('Statistisches BIP-Jahr', '2012'),
('BIP-Ranking', '6'),
('BIP-Wert', '2.316,2 Milliarden<ref name="imf-statistics-gdp" />'),
('GDP/Mann', '36,727<ref name="imf-statistics-gdp" />'),
('Gründungsform', 'Gründung des Landes'),
('Etablierte Form 1',
'[[Königreich England]]/[[Königreich Schottland]]<br />(Beide Länder[[Unionsrecht'
'(1707)|1707連合法]]Bis)'),
('Gründungsdatum 1', '[[927]]/[[843]]'),
('Etablierte Form 2', '[[Großbritannien Königreich]]Gründung des Landes<br />([[Unionsrecht(1707)|1707連合法]])'),
('Gründungsdatum 2', '[[1707]]'),
('Etablierte Form 3',
'[[Vereinigtes Königreich Großbritannien und Irland]]Gründung des Landes<br />([[Unionsrecht(1800)|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', '[[Sterling Teich|UK Pfund]](£)'),
('Währungscode', 'GBP'),
('Zeitzone', '±0'),
('Sommerzeit', '+1'),
('ISO 3166-1', 'GB / GBR'),
('ccTLD', '[[.uk]] / [[.gb]]<ref>Verwendung ist.Überwiegend kleine Zahl im Vergleich zu Großbritannien.</ref>'),
('Internationale Telefonnummer', '44'),
('Hinweis', '<references />')])