[PYTHON] 100 Sprachverarbeitung Knock 2020 Kapitel 3: Reguläre Ausdrücke

Neulich wurde 100 Language Processing Knock 2020 veröffentlicht. Ich selbst arbeite erst seit einem Jahr an natürlicher Sprache und kenne die Details nicht, aber ich werde alle Probleme lösen und veröffentlichen, um meine technischen Fähigkeiten zu verbessern.

Alle müssen auf dem Jupiter-Notizbuch ausgeführt werden, und die Einschränkungen der Problemstellung können bequem verletzt werden. Der Quellcode ist auch auf Github. Ja.

Kapitel 2 ist hier.

Die Umgebung ist Python 3.8.2 und Ubuntu 18.04.

Kapitel 3: Reguläre Ausdrücke

Es gibt eine Datei jawiki-country.json.gz, die Wikipedia-Artikel im folgenden Format exportiert. ・ Pro Zeile werden eine Artikelinformation 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 mit gzip komprimiert Erstellen Sie ein Programm, das die folgende Verarbeitung ausführt.

Bitte laden Sie den erforderlichen Datensatz von [hier] herunter (https://nlp100.github.io/ja/ch03.html).

Die heruntergeladene Datei wird unter "Daten" abgelegt.

20. JSON-Daten lesen

Lesen Sie die JSON-Datei des Wikipedia-Artikels und zeigen Sie den Artikeltext zu "UK" an. Führen Sie in den Problemen 21-29 den hier extrahierten Artikeltext aus.

Laden Sie das Modul zum Entpacken von gzip und zum Laden von json.

Code


import gzip
import json

Lesen Sie die gzip-Datei Zeile für Zeile und konvertieren Sie jede Zeile mit json.loads () in den Wörterbuchtyp.

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

Suchen Sie das Element mit dem Titel "UK" in den Daten und speichern Sie es in "Text".

Code


for df in data:
    if df['title'] == 'England':
        text = df['text']
        break

Der Inhalt ist so

{{redirect|UK}}
{{redirect|Vereinigtes Königreich|Ehrenländer im Frühjahr und Herbst|Englisch(Frühling und Herbst)}}
{{Otheruses|Europäisches Land|Lokale Küche der Präfekturen Nagasaki und Kumamoto|Igirisu}}
{{Grundlegende Informationen Land
|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 />
*{{lang|gd|An Rìoghachd Aonaichte na Breatainn Mhòr agus Eirinn mu Thuath}}([[schottisch Gälisch]])
*{{lang|cy|Teyrnas Gyfunol Prydain Fawr a Gogledd Iwerddon}}([[Wales]])
*{{lang|ga|Ríocht Aontaithe na Breataine Móire agus Tuaisceart na hÉireann}}([[irisch]])
*{{lang|kw|An Rywvaneth Unys a Vreten Veur hag Iwerdhon Glédh}}([[Cornwall]])
*{{lang|sco|Unitit Kinrick o Great Breetain an Northren Ireland}}([[schottisch]])
**{{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]]:[[Die

21. Extrahieren Sie Zeilen mit Kategorienamen

Extrahieren Sie die Zeile, in der der Kategoriename im Artikel angegeben ist.

Code


import re

Code


lines = text.splitlines()
for line in lines:
    if re.search(r'\[\[Category:.*\]\]', line):
        print(line)

Extrahieren Sie den Kategorienamen mit einem regulären Ausdruck. Extrahieren Sie alle Linien, die mit Mustern wie "Kategorie [Hogehoge]" übereinstimmen.

Ausgabe


[[Category:England|*]]
[[Category:Vereinigte Königreich Mitgliedsländer]]
[[Category:Königreich des Vereinigten Königreichs|*]]
[[Category:G8-Mitgliedsländer]]
[[Category:Mitgliedsländer der Europäischen Union|Ehemalige]]
[[Category:Marine Nation]]
[[Category:Bestehendes souveränes Land]]
[[Category:Inselstaat]]
[[Category:Eine Nation / ein Gebiet, das 1801 gegründet wurde]]

22. Extraktion des Kategorienamens

Extrahieren Sie die Namen der Artikelkategorien (nach Namen, nicht zeilenweise).

Code


for line in lines:
    lst = re.findall(r'\[\[Category:(.*)\]\]', line)
    for category in lst:
        print(category)

Ich habe die passenden Teilzeichenfolgen in lst eingefügt und alle ausgegeben. Sie können den Kategorienamen extrahieren.

Ausgabe


England|*
Vereinigte Königreich Mitgliedsländer
Königreich des Vereinigten Königreichs|*
G8-Mitgliedsländer
Mitgliedsländer der Europäischen Union|Ehemalige
Marine Nation
Bestehendes souveränes Land
Inselstaat
Eine Nation / ein Gebiet, das 1801 gegründet wurde

23. Abschnittsstruktur

Zeigen Sie den im Artikel enthaltenen Abschnittsnamen und seine Ebene an (z. B. 1, wenn "== Abschnittsname ==").

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)

Extrahieren Sie Linien mit Mustern wie = section =, == section ==, === section ===, ...... Die Höhe des Abschnitts wird durch die Anzahl von = bestimmt.

Ausgabe


1 Ländername
1 Geschichte
1 Geographie
2 große Städte
2 Klima
1 Politik
2 Yuan
2 Gesetz
2 Inneres
2 Lokale Verwaltungsabteilung
2 Diplomatie / Militär
1 Wirtschaft
2 Bergbau
2 Landwirtschaft
2 Handel
2 Immobilien
2 Energiepolitik
2 Währungen
2 Unternehmen
3 Kommunikation
1 Transport
2 Straße
2 Eisenbahn
2 Versand
2 Luftfahrt
1 Wissenschaft und Technologie
1 Personen
2 Sprachen
2 Religion
2 Ehe
2 Migration
2 Bildung
2 Medizin
1 Kultur
2 Esskultur
2 Literatur
2 Philosophie
2 Musik
3 populäre Musik
2 Filme
2 Komödie
2 Nationalblume
2 Welterbe
2 Feiertage
2 Sportarten
3 Fußball
3 Cricket
3 Pferderennen
3 Motorsportarten
3 Baseball
3 Eisstockschießen
3 Fahrradwettbewerb
1 Fußnote
1 Verwandte Artikel
1 Externer Link

Sie können die Rückreferenz auch wie folgt verwenden. Ich habe es nicht richtig gemessen, aber ich denke, es ist schneller. Es scheint, dass es von der Person abhängt, welches Beispiel besser lesbar ist, und ich denke, es spielt keine Rolle, welches leichter zu verstehen ist.

Code


for line in lines:
    if x := re.match(r'^(==+)(.*)\1$', line):
        print(len(x[1])-1, x[2].strip())

Ich habe versucht, den Seiuchi-Operator zu verwenden

Da es sich um den Abschnitt "Struktur" handelt, werden wir so etwas wie den Befehl "tree" implementieren.

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

Nehmen Sie zuerst den Abschnitt aus "Zeilen" und machen Sie daraus eine Liste von Ebenen und Abschnittsnamen.

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(''))

Erstellen Sie eine Objektklasse, die Abschnitte rekursiv enthält. Die Objekte im Abschnitt der Ebene 1 erben vom Listentyp, und Sie können den Abschnitt der Ebene 2 in sich behalten.

Code


root = Section('root')
for level, title in get_sections():
    root.add(level, title)
root

Die Liste der durch get_sections () erhaltenen Abschnitte wird mit der Methode add rekursiv aus dem Stammabschnitt eingefügt. Ich versuche, rekursiv von der Methode repr in eine Zeichenfolge zu konvertieren.

Ausgabe


├ Ländername
├ Geschichte
├ Geographie
│ ├ Großstädte
│ └ Klima
├ Politik
│ ├ Ehemaliger Kopf
│ ├ Methode
│ ├ Innere Angelegenheiten
│ ├ Abteilung für lokale Verwaltung
│ └ Diplomatie / Militär
├ Wirtschaft
│ ├ Bergbau
│ ├ Landwirtschaft
│ ├ Handel
│ ├ Immobilien
│ ├ Energiepolitik
│ ├ Währung
│ └ Firma
│ └ Kommunikation
├ Transport
│ ├ Straße
│ ├ Eisenbahn
│ ├ Versand
│ └ Luftfahrt
├ Wissenschaft und Technologie
├ Leute
│ ├ Sprache
│ ├ Religion
│ ├ Ehe
│ ├ Migration
│ ├ Bildung
│ └ Medizin
├ Kultur
│ ├ Esskultur
│ ├ Literatur
│ ├ Philosophie
│ ├ Musik
│ │ └ Popmusik
│ ├ Film
│ ├ Komödie
Uh ├ Kokuhana
│ ├ Welterbe
│ ├ Feiertage
│ └ Sport
│ ├ Fußball
│ ├ Cricket
│ ├ Pferderennen
│ ├ Motorsport
│ ├ Baseball
│ ├ Eisstockschießen
│ └ Fahrradwettbewerb
├ Fußnote
├ Verwandte Artikel
└ Externer Link

Unterhalb von Sport gibt es keine Abschnitte der Stufe 2 mit demselben übergeordneten Abschnitt, sodass keine Rahmen angezeigt werden. Nur der letzte Abschnitt der untergeordneten Abschnitte implementiert dies, indem der vor dem Titel angezeigte Rahmen geändert wird.

24. Dateireferenzen extrahieren

Extrahieren Sie alle Mediendateien, auf die aus dem Artikel verwiesen wird.

Code


for line in lines:
    lst = re.findall(r'\[\[Datei:([^|\]]*)', line)
    for x in lst:
        print(x)

Der Teil von "irgendwie", der mit "[[Datei: irgendwie]]" übereinstimmt, wird extrahiert.

Ausgabe


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

Extrahieren Sie die Feldnamen und Werte der im Artikel enthaltenen Vorlage "Basisinformationen" und speichern Sie sie als Wörterbuchobjekt.

Code


for i, line in enumerate(lines):
    if line.startswith('{{Grundinformation'):
        start = i
    elif line.startswith('}}'):
        end = i
        break

Es ist wirklich jenseits des Rahmens einer regulären Sprache. Ich denke, es ist wünschenswert, einen Parser für Abschriften oder ähnliches zu verwenden, aber geben Sie den Bereich der Basisinformationszeile an.

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

Speichern Sie den Inhalt im Wörterbuch.

Ausgabe


{'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 />',
 '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]]:[[Dieu et mon droit|Gott und meine Rechte]])',
 'Nationalhymne': "[[Ihre Majestät die Königin|{{lang|en|God Save the Queen}}]]{{en icon}}<br />''Gott, beschütze die Königin''<br />{{center|[[Datei:United States Navy Band - God Save the Queen.ogg]]}}",
 'Kartenbild': 'Europe-UK.svg',
 'Positionieren Sie das Bild': 'United Kingdom (+overseas territories) in the World (+Antarctica claims).svg',
 'Offizielle Terminologie': '[[Englisch]]',
 'Hauptstadt': '[[London]](eigentlich)',
 'Größte Stadt': 'London',
 'Ehemaliger Haupttitel': '[[Britischer Prinz|Königin]]',
 'Vorname': '[[Elizabeth II]]',
 'Titel des Premierministers': '[[britischer Premierminister|Premierminister]]',
 'Name des Premierministers': '[[Boris Johnson]]',
 'Anderer ehemaliger Haupttitel 1': '[[Aristokratisches Haus(England)|Vorsitzender des aristokratischen Hauses]]',
 'Namen anderer ehemaliger Führer 1': '[[:en:Norman Fowler, Baron Fowler|Norman Fowler]]',
 'Anderer ehemaliger Haupttitel 2': '[[Haus der einfachen Leute(England)|Vorsitzender des Commonwealth House]]',
 'Namen anderer ehemaliger Führer 2': '{{Temporäre Verbindung|Lindsay Foil|en|Lindsay Hoyle}}',
 'Anderer ehemaliger Haupttitel 3': '[[Oberster Gerichtshof des Vereinigten Königreichs|Sekretär des Obersten Gerichtshofs]]',
 'Namen anderer ehemaliger Führer 3': '[[:en:Brenda Hale, Baroness Hale of Richmond|Brenda Hale]]',
 'Gebietsrangliste': '76',
 'Flächengröße': '1 E11',
 'Flächenwert': '244,820',
 'Wasserflächenverhältnis': '1.3%',
 'Jahr der Volkszählung': '2018',
 'Bevölkerungsranking': '22',
 'Einwohnerzahl': '1 E7',
 'Bevölkerungswert': '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>',
 'Bevölkerungsdichtewert': '271',
 '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': '6',
 '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[[Gemeinsames Recht(1707)|1707合同法]]Bis)',
 'Gründungsdatum 1': '927/843',
 'Etablierte Form 2': '[[Großbritannien Königreich]]Etabliert<br />(Gemeinsames Gesetz von 1707)',
 'Gründungsdatum 2': '1707{{0}}Kann{{0}}1 Tag',
 'Etablierte Form 3': '[[Vereinigtes Königreich Großbritannien und Irland]]Etabliert<br />([[Gemeinsames Recht(1800)|1800合同法]])',
 'Gründungsdatum 3': '1801{{0}}Januar{{0}}1 Tag',
 'Etablierte Form 4': "Aktueller Ländername "'''Vereinigtes Königreich Großbritannien und Nordirland'''"ändern",
 'Gründungsdatum 4': '1927{{0}}12. April',
 '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/>'}

26. Entfernen des markierten Markups

Entfernen Sie bei der Verarbeitung> 25 das MediaWiki-Hervorhebungs-Markup (schwache Hervorhebung, Hervorhebung, starke Hervorhebung) aus dem Vorlagenwert und konvertieren Sie es in Text.

Code


dct2 = {
    key : re.sub(r"''+", '', value)
    for key, value in dct.items()
}
dct2

Ergebnis


{'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 />',
 '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]]:[[Dieu et mon droit|Gott und meine Rechte]])',
 'Nationalhymne': '[[Ihre Majestät die Königin|{{lang|en|God Save the Queen}}]]{{en icon}}<br />Gott, beschütze die Königin<br />{{center|[[Datei:United States Navy Band - God Save the Queen.ogg]]}}',
 'Kartenbild': 'Europe-UK.svg',
 'Positionieren Sie das Bild': 'United Kingdom (+overseas territories) in the World (+Antarctica claims).svg',
 'Offizielle Terminologie': '[[Englisch]]',
 'Hauptstadt': '[[London]](eigentlich)',
 'Größte Stadt': 'London',
 'Ehemaliger Haupttitel': '[[Britischer Prinz|Königin]]',
 'Vorname': '[[Elizabeth II]]',
 'Titel des Premierministers': '[[britischer Premierminister|Premierminister]]',
 'Name des Premierministers': '[[Boris Johnson]]',
 'Anderer ehemaliger Haupttitel 1': '[[Aristokratisches Haus(England)|Vorsitzender des aristokratischen Hauses]]',
 'Namen anderer ehemaliger Führer 1': '[[:en:Norman Fowler, Baron Fowler|Norman Fowler]]',
 'Anderer ehemaliger Haupttitel 2': '[[Haus der einfachen Leute(England)|Vorsitzender des Commonwealth House]]',
 'Namen anderer ehemaliger Führer 2': '{{Temporäre Verbindung|Lindsay Foil|en|Lindsay Hoyle}}',
 'Anderer ehemaliger Haupttitel 3': '[[Oberster Gerichtshof des Vereinigten Königreichs|Sekretär des Obersten Gerichtshofs]]',
 'Namen anderer ehemaliger Führer 3': '[[:en:Brenda Hale, Baroness Hale of Richmond|Brenda Hale]]',
 'Gebietsrangliste': '76',
 'Flächengröße': '1 E11',
 'Flächenwert': '244,820',
 'Wasserflächenverhältnis': '1.3%',
 'Jahr der Volkszählung': '2018',
 'Bevölkerungsranking': '22',
 'Einwohnerzahl': '1 E7',
 'Bevölkerungswert': '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>',
 'Bevölkerungsdichtewert': '271',
 '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': '6',
 '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[[Gemeinsames Recht(1707)|1707合同法]]Bis)',
 'Gründungsdatum 1': '927/843',
 'Etablierte Form 2': '[[Großbritannien Königreich]]Etabliert<br />(Gemeinsames Gesetz von 1707)',
 'Gründungsdatum 2': '1707{{0}}Kann{{0}}1 Tag',
 'Etablierte Form 3': '[[Vereinigtes Königreich Großbritannien und Irland]]Etabliert<br />([[Gemeinsames Recht(1800)|1800合同法]])',
 'Gründungsdatum 3': '1801{{0}}Januar{{0}}1 Tag',
 'Etablierte Form 4': 'Geändert in den aktuellen Ländernamen "Großbritannien und das Vereinigte Königreich Nordirland"',
 'Gründungsdatum 4': '1927{{0}}12. April',
 '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/>'}

27. Entfernung interner Links

Entfernen Sie zusätzlich zum> 26-Prozess das interne Link für MediaWiki-Links aus dem Vorlagenwert und konvertieren Sie es in Text.

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

Ausgabe


{'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 />',
 'Flaggenbild': 'Flag of the United Kingdom.svg',
 'Nationales Emblembild': 'Britisches nationales Emblem',
 'Nationaler Emblem-Link': '(Staatswappen)',
 'Slogan': '{{lang|fr|Dieu et mon droit}}<br />(Französisch:Gott und meine Rechte)',
 'Nationalhymne': '{{lang|en|God Save the Queen}}{{en icon}}<br />Gott, beschütze die Königin<br />{{center|Datei:United States Navy Band - God Save the Queen.ogg}}',
 'Kartenbild': 'Europe-UK.svg',
 'Positionieren Sie das Bild': 'United Kingdom (+overseas territories) in the World (+Antarctica claims).svg',
 'Offizielle Terminologie': 'Englisch',
 'Hauptstadt': 'London (virtuell)',
 'Größte Stadt': 'London',
 'Ehemaliger Haupttitel': 'Königin',
 'Vorname': 'Elizabeth II',
 'Titel des Premierministers': 'Premierminister',
 'Name des Premierministers': 'Boris Johnson',
 'Anderer ehemaliger Haupttitel 1': 'Vorsitzender des aristokratischen Hauses',
 'Namen anderer ehemaliger Führer 1': 'Norman Fowler',
 'Anderer ehemaliger Haupttitel 2': 'Vorsitzender des Commonwealth House',
 'Namen anderer ehemaliger Führer 2': '{{Temporäre Verbindung|Lindsay Foil|en|Lindsay Hoyle}}',
 'Anderer ehemaliger Haupttitel 3': 'Sekretär des Obersten Gerichtshofs',
 'Namen anderer ehemaliger Führer 3': 'Brenda Hale',
 'Gebietsrangliste': '76',
 'Flächengröße': '1 E11',
 'Flächenwert': '244,820',
 'Wasserflächenverhältnis': '1.3%',
 'Jahr der Volkszählung': '2018',
 'Bevölkerungsranking': '22',
 'Einwohnerzahl': '1 E7',
 'Bevölkerungswert': '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>',
 'Bevölkerungsdichtewert': '271',
 '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': '6',
 '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 bis zum Gemeinsamen Gesetz von 1707)',
 'Gründungsdatum 1': '927/843',
 'Etablierte Form 2': 'Großbritannien Königreich gegründet<br />(Gemeinsames Gesetz von 1707)',
 'Gründungsdatum 2': '1707{{0}}Kann{{0}}1 Tag',
 'Etablierte Form 3': 'Gründung des Vereinigten Königreichs Großbritannien und Irland<br />(1800 Gemeinsames Gesetz)',
 'Gründungsdatum 3': '1801{{0}}Januar{{0}}1 Tag',
 'Etablierte Form 4': 'Geändert in den aktuellen Ländernamen "Großbritannien und das Vereinigte Königreich Nordirland"',
 'Gründungsdatum 4': '1927{{0}}12. April',
 'Währung': '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/>'}

28. Entfernen des MediaWiki-Markups

Entfernen Sie zusätzlich zur Verarbeitung von> 27 das MediaWiki-Markup so weit wie möglich aus dem Vorlagenwert und formatieren Sie die Basisinformationen des Landes.

Ich habe auch andere unnötige Teile als das MediaWiki-Markup entfernt.

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

Ausgabe


{'Kurzbezeichnung': 'England',
 'Japanischer Ländername': 'Vereinigtes Königreich Großbritannien und Nordirland',
 'Offizieller Ländername': 'United Kingdom of Great Britain and Northern Ireland<ref>Offizieller Ländername außer Englisch:',
 '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': 'Datei:United States Navy Band - God Save the Queen.ogg',
 'Kartenbild': 'Europe-UK.svg',
 'Positionieren Sie das Bild': 'United Kingdom (+overseas territories) in the World (+Antarctica claims).svg',
 'Offizielle Terminologie': 'Englisch',
 'Hauptstadt': 'London (virtuell)',
 'Größte Stadt': 'London',
 'Ehemaliger Haupttitel': 'Königin',
 'Vorname': 'Elizabeth II',
 'Titel des Premierministers': 'Premierminister',
 'Name des Premierministers': 'Boris Johnson',
 'Anderer ehemaliger Haupttitel 1': 'Vorsitzender des aristokratischen Hauses',
 'Namen anderer ehemaliger Führer 1': 'Norman Fowler',
 'Anderer ehemaliger Haupttitel 2': 'Vorsitzender des Commonwealth House',
 'Namen anderer ehemaliger Führer 2': 'Lindsay Hoyle',
 'Anderer ehemaliger Haupttitel 3': 'Sekretär des Obersten Gerichtshofs',
 'Namen anderer ehemaliger Führer 3': 'Brenda Hale',
 'Gebietsrangliste': '76',
 'Flächengröße': '1 E11',
 '': '244,820',
 '': '1.3%',
 '': '2018',
 '': '22',
 '': '1 E7',
 '': 'Wasserflächenverhältnis Bevölkerungsstatistik Jahr Bevölkerungsrang Bevölkerungsgröße Bevölkerungswert 66.435.600',
 'Bevölkerungsdichtewert': '271',
 'BIP-Statistik Jahr Yuan': '2012',
 'BIP-Wertquelle': '1,5478 Billionen',
 'BIP-Statistik Jahr MER': '2012',
 'BIP-Ranking MER': '6',
 '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 1707 Joint Act)',
 'Gründungsdatum 1': '927/843',
 'Etablierte Form 2': 'Großbritannien Königreich gegründet (Joint Act 1707)',
 'Gründungsdatum 2': '1. Mai 1707',
 'Etablierte Form 3': 'Gründung des Vereinigten Königreichs Großbritannien und Irland (Joint Act 1800)',
 'Gründungsdatum 3': '1. Januar 1801',
 'Etablierte Form 4': 'Geändert in den aktuellen Ländernamen "Großbritannien und das Vereinigte Königreich Nordirland"',
 'Gründungsdatum 4': '12. April 1927',
 'Währung': 'UK Pfund(£)',
 'Währungscode': 'GBP',
 'Zeitzone': '±0',
 'Sommerzeit': '+1',
 'ISO 3166-1': 'GB / GBR',
 'ccTLD': '.uk / .gb',
 'Internationale Telefonnummer': '44',
 'Hinweis': ''}

29. Rufen Sie die URL des Flaggenbildes ab

Verwenden Sie den Inhalt der Vorlage, um die URL des Flaggenbilds abzurufen.

Code


import requests

Schlagen Sie die API mit Anfragen. Ich habe auf den Code unten in [hier] verwiesen (https://www.mediawiki.org/wiki/API:Imageinfo).

Code


filename = dct4['Flaggenbild']

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

Ausgabe


'https://upload.wikimedia.org/wikipedia/en/a/ae/Flag_of_the_United_Kingdom.svg'

Der Link ist das Bild unten. <img src="https://upload.wikimedia.org/wikipedia/en/a/ae/Flag_of_the_United_Kingdom.svg", width="300">

Weiter ist Kapitel 4

Sprachverarbeitung 100 Schläge 2020 Kapitel 4: Morphologische Analyse

Recommended Posts

100 Sprachverarbeitung Knock 2020 Kapitel 3: Reguläre Ausdrücke
100 Sprachverarbeitung Klopfen Sie auf reguläre Ausdrücke, die Sie in Kapitel 3 gelernt haben
[Sprachverarbeitung 100 Schläge 2020] Kapitel 3: Reguläre Ausdrücke
100 Sprachverarbeitung Knock 2020 Kapitel 1
100 Sprachverarbeitung Knock Kapitel 1
100 Sprachverarbeitung Knock 2020 Kapitel 3
100 Sprachverarbeitung Knock 2020 Kapitel 2
100 Sprachverarbeitung Knock Kapitel 1 (Python)
100 Sprachverarbeitung Knock 2020 Kapitel 2: UNIX-Befehle
100 Sprachverarbeitung Knock 2015 Kapitel 5 Abhängigkeitsanalyse (40-49)
100 natürliche Sprachverarbeitung klopft Kapitel 3 Reguläre Ausdrücke (erste Hälfte)
100 Sprachverarbeitungsklopfen mit Python (Kapitel 1)
100 Sprachverarbeitung Knock 2020 Kapitel 4: Morphologische Analyse
100 Sprachverarbeitung Knock 2020 Kapitel 9: RNN, CNN
100 Sprachverarbeitungsklopfen (2020): 28
Ich habe versucht, 100 Sprachverarbeitung klopfen 2020: Kapitel 3
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
100 natürliche Sprachverarbeitung klopft Kapitel 3 Reguläre Ausdrücke (zweite Hälfte)
100 Sprachverarbeitung Knock 2020 Kapitel 5: Abhängigkeitsanalyse
100 Sprachverarbeitung klopfen 2020: Kapitel 3 (regulärer Ausdruck)
100 Sprachverarbeitung Knock 2020 Kapitel 7: Word Vector
100 Sprachverarbeitung Knock 2020 Kapitel 8: Neuronales Netz
100 Sprachverarbeitungsklopfen (2020): 38
Ich habe versucht, 100 Sprachverarbeitung klopfen 2020: Kapitel 1
100 Sprachverarbeitung klopfen 00 ~ 02
100 Sprachverarbeitung Knock 2020 Kapitel 1: Vorbereitende Bewegung
100 Sprachverarbeitung Knock Kapitel 1 von Python
100 Language Processing Knock 2015 Kapitel 4 Morphologische Analyse (30-39)
Ich habe versucht, 100 Sprachverarbeitung zu klopfen 2020: Kapitel 2
Ich habe versucht, 100 Sprachverarbeitung zu klopfen 2020: Kapitel 4
Ich habe mit GiNZA v3.1 Kapitel 4 100 Sprachverarbeitungsklopfen 2020 durchgeführt
100 Sprachverarbeitungsklopfen mit Python (Kapitel 2, Teil 2)
100 Sprachverarbeitungsklopfen mit Python (Kapitel 2, Teil 1)
[Programmierer-Neuling "100 Sprachverarbeitung klopfen 2020"] Lösen Sie Kapitel 1
100 Sprachverarbeitung klopfen 2020 [00 ~ 69 Antwort]
100 Sprachverarbeitung klopfen 2020 [00 ~ 49 Antwort]
100 Sprachverarbeitung Knock-52: Stemming
100 Sprachverarbeitungsklopfen ~ Kapitel 1
100 Sprachverarbeitung klopft Kapitel 2 (10 ~ 19)
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 UNIX-Befehle in Kapitel 2
Ich habe versucht, die Version 2020 mit 100 Sprachverarbeitung zu lösen [Kapitel 3: Reguläre Ausdrücke 25-29]
100 Sprachverarbeitungsklopfen mit Python 2015
100 Sprachverarbeitung Knock-51: Wortausschnitt
100 Sprachverarbeitung Knock-58: Extraktion von Taple
100 Sprachverarbeitung Knock-50: Satzumbruch
Sprachverarbeitung 100 Knock-87: Wortähnlichkeit
Ich habe versucht, 100 Sprachverarbeitung klopfen 2020
100 Sprachverarbeitung Knock-56: Co-Referenz-Analyse
Lösen von 100 Sprachverarbeitungsklopfen 2020 (01. "Patatokukashi")
100 Amateur-Sprachverarbeitungsklopfen: Zusammenfassung
Sprachverarbeitung 100 Knock-80 (ersetzt durch regulären Ausdruck): Korpusformatierung
100 Sprachverarbeitung Knock: Kapitel 2 UNIX-Befehlsgrundlagen (mit Pandas)