[PYTHON] 100 Sprachverarbeitung Knock-26: Entfernen von hervorgehobenem Markup

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.

Referenzlink

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

Umgebung

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

Kapitel 3: Reguläre Ausdrücke

Inhalt des Studiums

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

Inhalt anklopfen

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.

26. Entfernen des hervorgehobenen Markups

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

Problemergänzung (über "hervorgehobenes Markup")

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

Antworten

Antwortprogramm 026. Entfernen von hervorgehobenem markup.ipynb

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)

Kommentar beantworten

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

Ausgabeergebnis (Ausführungsergebnis)

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]](&pound;)'),
             ('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 />')])

Recommended Posts

100 Sprachverarbeitung Knock-26: Entfernen von hervorgehobenem Markup
100 Sprachverarbeitung Knock-28: Entfernen des MediaWiki-Markups
100 Sprachverarbeitung Knock-59: Analyse der S-Formel
100 Sprachverarbeitungsklopfen (2020): 28
100 Sprachverarbeitungsklopfen (2020): 38
100 Sprachverarbeitung klopfen 00 ~ 02
100 Sprachverarbeitung Knock-91: Vorbereitung von Analogiedaten
Sprachverarbeitung 100 Knocks-44: Visualisierung abhängiger Bäume
100 Sprachverarbeitung klopfen 2020 [00 ~ 39 Antwort]
100 Sprachverarbeitung klopfen 2020 [00-79 Antwort]
100 Sprachverarbeitung klopfen 2020 [00 ~ 69 Antwort]
100 Sprachverarbeitung Knock 2020 Kapitel 1
100 Amateur-Sprachverarbeitungsklopfen: 17
100 Sprachverarbeitung klopfen 2020 [00 ~ 49 Antwort]
100 Sprachverarbeitung Knock-52: Stemming
100 Amateur-Sprachverarbeitungsklopfen: 07
100 Sprachverarbeitung Knock 2020 Kapitel 3
100 Sprachverarbeitung Knock 2020 Kapitel 2
100 Amateur-Sprachverarbeitungsklopfen: 09
100 Amateur-Sprachverarbeitungsklopfen: 47
100 Sprachverarbeitung Knock-53: Tokenisierung
100 Amateur-Sprachverarbeitungsklopfen: 97
100 Sprachverarbeitung klopfen 2020 [00 ~ 59 Antwort]
100 Amateur-Sprachverarbeitungsklopfen: 67
100 Sprachverarbeitung Knock-32 (mit Pandas): Prototyp des Verbs
Sprachverarbeitung 100 Schläge-45: Extraktion von Verbfallmustern
100 Sprachverarbeitung Knock-75 (mit Scicit-Learn): Gewicht der Identität
100 Sprachverarbeitungsklopfen mit Python 2015
100 Sprachverarbeitung Knock-51: Wortausschnitt
100 Sprachverarbeitung Knock-58: Extraktion von Taple
100 Sprachverarbeitung Knock-57: Abhängigkeitsanalyse
100 Sprachverarbeitung Knock-50: Satzumbruch
100 Sprachverarbeitung Knock-36 (unter Verwendung von Pandas): Häufigkeit des Auftretens von Wörtern
100 Sprachverarbeitung Knock Kapitel 1 (Python)
100 Sprachverarbeitung Knock Kapitel 2 (Python)
100 Sprachverarbeitung Knock-25: Vorlagenextraktion
Sprachverarbeitung 100 Knock-87: Wortähnlichkeit
Sprachverarbeitung 100 Schläge-49: Extraktion von Abhängigkeitspfaden zwischen Nomenklatur
Ich habe versucht, 100 Sprachverarbeitung klopfen 2020
100 Sprachverarbeitung Knock-56: Co-Referenz-Analyse
Lösen von 100 Sprachverarbeitungsklopfen 2020 (01. "Patatokukashi")
Lernen Sie mit "Google Colaboratory" ganz einfach 100 Sprachverarbeitungsklopfen 2020.
100 Amateur-Sprachverarbeitungsklopfen: Zusammenfassung
100 Sprachverarbeitung Knock-77 (mit Scicit-Learn): Messung der korrekten Antwortrate
100 Sprachverarbeitung Knock-42: Anzeige der Phrase der betroffenen Person und der betroffenen Person
Sprachverarbeitung 100 Knocks-29: Holen Sie sich die URL des Flaggenbildes
100 Sprachverarbeitung Knock 2020 Kapitel 2: UNIX-Befehle
100 Sprachverarbeitung Knock 2015 Kapitel 5 Abhängigkeitsanalyse (40-49)
100 Sprachverarbeitung Knock Kapitel 1 in Python
100 Sprachverarbeitung Knock 2020 Kapitel 4: Morphologische Analyse
100 Sprachverarbeitung Knock 2020 Kapitel 9: RNN, CNN
100 Sprachverarbeitung Knock-76 (mit Scicit-Learn): Beschriftung
100 Sprachverarbeitung Knock-55: Extraktion eindeutiger Ausdrücke
Ich habe versucht, 100 Sprachverarbeitung klopfen 2020: Kapitel 3
100 Sprachverarbeitung Knock-82 (Kontextwort): Kontextextraktion
100 Sprachverarbeitungsklopfen mit Python (Kapitel 3)
100 Sprachverarbeitungsklopfen: Kapitel 1 Vorbereitungsbewegung
100 Sprachverarbeitung Knock 2020 Kapitel 6: Maschinelles Lernen
100 Sprachverarbeitung Knock Kapitel 4: Morphologische Analyse
Sprachverarbeitung 100 knock-86: Wortvektoranzeige
100 Sprachverarbeitung Knock 2020 Kapitel 10: Maschinelle Übersetzung (90-98)