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.
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.
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
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]]
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
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.
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
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/>'}
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/>'}
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/>'}
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': ''}
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">
Sprachverarbeitung 100 Schläge 2020 Kapitel 4: Morphologische Analyse
Recommended Posts