[PYTHON] Sprachverarbeitung 100 Knocks-29: Holen Sie sich die URL des Flaggenbildes

Sprachverarbeitung 100 Schläge 2015 ["Kapitel 3: Reguläre Ausdrücke"](http: //www.cl.ecei.tohoku) Dies ist der Datensatz von 29. "Abrufen der URL des Flaggenbilds" von .ac.jp / nlp100 / # ch3). Dieses Mal extrahieren wir den Wert eines bestimmten Elements aus dem Wörterbuch, das mit regulären Ausdrücken erstellt wurde, und werfen es an den Webdienst.

Referenzlink

Verknüpfung Bemerkungen
029.Holen Sie sich die URL des Flaggenbildes.ipynb Antwortprogramm GitHub Link
100 Klicks Amateur-Sprachverarbeitung:29 Kopieren Sie die Quelle vieler Quellteile und fügen Sie sie ein
Lernen Sie von Grund auf Python Grundlagen und Tipps für reguläre Ausdrücke 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. Ich habe mich gefragt, ob ich das "Anfragen" -Paket verwenden soll, aber ich habe es nicht verwendet, weil es so einfach war, dass ich es nicht verwenden musste. Wenn Sie es verwenden, sollte der Code etwas kürzer sein.

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

Klopfe an den Inhalt

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.

29. URL des Flaggenbildes abrufen

Verwenden Sie den Inhalt der Vorlage, um die URL des Flaggenbilds abzurufen. (Hinweis: imageinfo in MediaWiki API Rufen Sie es auf und konvertieren Sie den Dateiverweis in eine URL.

Problemergänzung (Über "MediaWiki API")

Ich habe auf die folgenden zwei Links bezüglich der MediaWiki-API verwiesen. MediaWiki API: Hauptseite der API imageinfo: Erläuterung der Beispiele und Parameter

Antworten

Antwortprogramm [029. URL der Flagge image.ipynb abrufen](https://github.com/YoheiFukuhara/nlp100/blob/master/03.%E6%AD%A3%E8%A6%8F%E8%A1 % A8% E7% 8F% BE / 029.% E5% 9B% BD% E6% 97% 97% E7% 94% BB% E5% 83% 8F% E3% 81% AEURL% E3% 82% 92% E5% 8F% 96% E5% BE% 97% E3% 81% 99% E3% 82% 8B.ipynb)

from collections import OrderedDict
import json
import re
from urllib import request, parse

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 (Zeichenfolge, die angezeigt werden soll)
        \]          # ']'(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

#Anforderungsgenerierung
url = 'https://www.mediawiki.org/w/api.php?' \
    + 'action=query' \
    + '&titles=File:' + parse.quote(templates['Flaggenbild']) \
    + '&format=json' \
    + '&prop=imageinfo' \
    + '&iiprop=url'

#Senden Sie eine Anfrage an den MediaWiki-Dienst
connection = request.urlopen(request.Request(url))

#Als json erhalten
response = json.loads(connection.read().decode())

print(response['query']['pages']['-1']['imageinfo'][0]['url'])

Kommentar beantworten

Der Hauptteil dieser Zeit ist der folgende Teil. Für den URL-Parameter wird der Wert von "Flag Image" aus dem Wörterbuch abgerufen, das durch den regulären Ausdruck erstellt wurde (da das Leerzeichen usw. gemischt wird, wenn es einfach abgerufen wird, wird die Funktion [urllib.parse.quote]( Codiert mit https://docs.python.org/ja/3/library/urllib.parse.html#urllib.parse.quote). Ohne Zertifizierung ist es einfach zu gewinnen.

python


#Anforderungsgenerierung
url = 'https://www.mediawiki.org/w/api.php?' \
    + 'action=query' \
    + '&titles=File:' + parse.quote(templates['Flaggenbild']) \
    + '&format=json' \
    + '&prop=imageinfo' \
    + '&iiprop=url'

#Senden Sie eine Anfrage an den MediaWiki-Dienst
connection = request.urlopen(request.Request(url))

#Als json erhalten
response = json.loads(connection.read().decode())

print(response['query']['pages']['-1']['imageinfo'][0]['url'])

Ausgabeergebnis (Ausführungsergebnis)

Wenn das Programm ausgeführt wird, werden die folgenden Ergebnisse ausgegeben.

Ausgabeergebnis


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

Dieses Bild. alt

Recommended Posts

Sprachverarbeitung 100 Knocks-29: Holen Sie sich die URL des Flaggenbildes
100 Sprachverarbeitung Knock-42: Anzeige der Phrase der betroffenen Person und der betroffenen Person
100 Sprachverarbeitung Knock-59: Analyse der S-Formel
100 Sprachverarbeitung Knock-91: Vorbereitung von Analogiedaten
Sprachverarbeitung 100 Knocks-44: Visualisierung abhängiger Bäume
100 Sprachverarbeitung Knock-26: Entfernen von hervorgehobenem Markup
100 Sprachverarbeitungsklopfen (2020): 28
100 Sprachverarbeitungsklopfen (2020): 38
100 Sprachverarbeitung klopfen 00 ~ 02
100 Sprachverarbeitung Knock-93 (unter Verwendung von Pandas): Berechnung der Genauigkeitsrate der Analogie-Aufgabe
Ich habe versucht, die Trefferergebnisse von Hachinai mithilfe der Bildverarbeitung zu erhalten
100 Sprachverarbeitung Knock-32 (mit Pandas): Prototyp des Verbs
Bildverarbeitung? Die Geschichte, Python für zu starten
100 Sprachverarbeitung Knock-75 (mit Scicit-Learn): Gewicht der Identität
100 Sprachverarbeitung klopfen 2020 [00 ~ 39 Antwort]
100 Sprachverarbeitung klopfen 2020 [00-79 Antwort]
100 Sprachverarbeitung klopfen 2020 [00 ~ 69 Antwort]
100 Amateur-Sprachverarbeitungsklopfen: 17
100 Sprachverarbeitung klopfen 2020 [00 ~ 49 Antwort]
100 Sprachverarbeitung Knock-52: Stemming
100 Sprachverarbeitung Knock Kapitel 1
100 Amateur-Sprachverarbeitungsklopfen: 07
100 Sprachverarbeitung Knock 2020 Kapitel 3
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-36 (unter Verwendung von Pandas): Häufigkeit des Auftretens von Wörtern
[C-Sprache] [Linux] Ruft den Wert der Umgebungsvariablen ab
Sprachverarbeitung 100 Schläge-49: Extraktion von Abhängigkeitspfaden zwischen Nomenklatur
Rufen Sie die URL des HTTP-Umleitungsziels in Python ab
Lernen Sie mit "Google Colaboratory" ganz einfach 100 Sprachverarbeitungsklopfen 2020.
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-77 (mit Scicit-Learn): Messung der korrekten Antwortrate
Holen Sie sich die Anzahl der Ziffern
100 Sprachverarbeitung Knock Kapitel 1 (Python)
100 Sprachverarbeitung Knock Kapitel 2 (Python)
100 Sprachverarbeitung Knock-25: Vorlagenextraktion
Sprachverarbeitung 100 Knock-87: Wortähnlichkeit
Die Bildanzeigefunktion von iTerm ist praktisch bei der Verarbeitung von Bildern.
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
Verstehen Sie die Funktion der Faltung am Beispiel der Bildverarbeitung
Berücksichtigen Sie die Verarbeitungsgeschwindigkeit, um den Bildpuffer mit numpy.ndarray zu verschieben
100 Sprachverarbeitung Knock-96 (unter Verwendung von Gensim): Extraktion des Vektors in Bezug auf den Ländernamen
Rufen Sie die URL des von der Jira-Python-Bibliothek erstellten JIRA-Tickets ab
[Word2vec] Lassen Sie uns das Ergebnis der Verarbeitung von Unternehmensbewertungen in natürlicher Sprache visualisieren
100 Sprachverarbeitung Knock 2020 Kapitel 2: UNIX-Befehle
100 Sprachverarbeitung Knock 2015 Kapitel 5 Abhängigkeitsanalyse (40-49)
Holen Sie sich die Anzahl der Ansichten von Qiita
100 Sprachverarbeitungsklopfen mit Python (Kapitel 1)
100 Sprachverarbeitung Knock Kapitel 1 in Python
100 Sprachverarbeitung Knock 2020 Kapitel 9: RNN, CNN
100 Sprachverarbeitung Knock-76 (mit Scicit-Learn): Beschriftung