[Python] Fordere 100 Schläge heraus! (025-029)

Über die bisherige Geschichte

Siehe Erster Beitrag

Klopfstatus

9/24 hinzugefügt

Kapitel 3: Reguläre Ausdrücke

Es gibt eine Datei jawiki-country.json.gz, die Wikipedia-Artikel im folgenden Format exportiert. ・ Informationen zu einem Artikel pro Zeile werden 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.

025. Vorlagen extrahieren

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

basic_info_025.py


from training.json_read_020 import uk_find
import re

def basic_info_find(lines):
    pattern1 = re.compile(r'^\{\{[redirect|Grundinformation].*')
    pattern2 = re.compile(r'^\|.*')
    pattern3 = re.compile(r'^\}\}$')

    basic_dict = {}
    for line in lines.split('\n'):
        if pattern1.match(line):
            continue

        elif pattern2.match(line):
            point = line.find('=')
            MAX = len(line)
            title = line[0:point].lstrip('|').rstrip(' ')
            data = line[point:MAX].lstrip('= ')
            basic_dict.update({title: data})

        elif pattern3.match(line):
            break
    return basic_dict

if __name__=="__main__":
    lines = uk_find()
    basic_dict = basic_info_find(lines)
    for key,value in basic_dict.items():
        print(key+':'+value)

result


Etablierte Form 4:Aktueller Ländername "'''Vereinigtes Königreich Großbritannien und Nordirland'''"ändern
Nationales Emblembild:[[Datei:Royal Coat of Arms of the United Kingdom.svg|85px|Britisches nationales Emblem]]
Nationaler Emblem-Link:([[Britisches nationales Emblem|Staatswappen]])
(Weggelassen, weil es lang ist)
Process finished with exit code 0

Impression: Ich habe die mit | beginnende Zeile aus dem Ergebnis der Basisinformationen extrahiert und eine Schleife ausgeführt, um sie im Schlüssel und Wert des Wörterbuchs vor und nach = zu speichern. Das Druckergebnis wurde so verarbeitet, dass es leicht verständlich ist.

026. Entfernen des markierten Markups

Entfernen Sie zum Zeitpunkt der Verarbeitung 25 das MediaWiki-Hervorhebungsmarkup (schwache Hervorhebung, Hervorhebung, starke Hervorhebung) aus dem Vorlagenwert und konvertieren Sie es in Text (Referenz: Markup-Kurzreferenztabelle).

emphasize_remove_026.py


from training.json_read_020 import uk_find
from training.basic_info_025 import basic_info_find
import re

def emphasize_remove(basic_dict):
    pattern = re.compile(r".*'{2,4}.*")
    for key,value in basic_dict.items():
        if pattern.match(value):
            value = value.replace("\'",'')
            basic_dict.update({key:value})
    return basic_dict


if __name__ == "__main__":
    lines = uk_find()
    basic_dict = basic_info_find(lines)
    emphasize_remove_dict = emphasize_remove(basic_dict)
    for key,value in emphasize_remove_dict.items():
        print(key+':'+value)

result


BIP-Statistik Jahr Yuan:2012
Etablierte Form 4:Geändert in den aktuellen Ländernamen "Großbritannien und das Vereinigte Königreich Nordirland"
Flächengröße:1 E11
(Weggelassen, weil es lang ist)
Process finished with exit code 0

Impressionen: Es gab nur einen relevanten Teil, der jedoch auf '{2,4} gesetzt ist, damit alle hervorgehobenen Markups durchsucht werden können. Als ich es gefunden habe, habe ich es einfach durch Ersetzen ersetzt.

027. Entfernung interner Links

Entfernen Sie zusätzlich zu den 26 Prozessen das interne Link-Markup für MediaWiki aus dem Vorlagenwert und konvertieren Sie es in Text (Referenz: Markup-Kurzreferenztabelle).

link_remove_027.py


from training.json_read_020 import uk_find
from training.basic_info_025 import basic_info_find
from training.emphasize_remove_026 import emphasize_remove
import re

def link_remove(emphasize_remove_dict):
    pattern = re.compile(r".*\[{2}.*")
    for key,value in emphasize_remove_dict.items():
        if pattern.match(value):
            value = value.replace('[[','').replace(']]','')
            emphasize_remove_dict.update({key: value})
    return emphasize_remove_dict

if __name__=="__main__":
    lines = uk_find()
    basic_dict = basic_info_find(lines)
    emphasize_remove_dict=emphasize_remove(basic_dict)
    link_remove_dict = link_remove(emphasize_remove_dict)

    for key,value in link_remove_dict.items():
        print(key+':'+value)

result


Nationales Emblembild:Datei:Royal Coat of Arms of the United Kingdom.svg|85px|Britisches nationales Emblem
Offizieller Ländername:{{lang|en|United Kingdom of Great Britain and Northern Ireland}}<ref>Offizieller Ländername außer Englisch:<br/>
Gründungsform:Gründung des Landes
(Weggelassen, weil es lang ist)
Process finished with exit code 0

Impressionen: Ähnlich wie bei Problem 026 habe ich gerade [[und]] durch Ersetzen ersetzt, als ich den internen Link-Teil gefunden habe, der mit [[] beginnt.

028. Entfernen des MediaWiki-Markups

Entfernen Sie zusätzlich zu den 27 Prozessen MediaWiki-Markups so weit wie möglich aus den Vorlagenwerten und formatieren Sie die grundlegenden Länderinformationen.

markup_remove_028.py


from training.json_read_020 import uk_find
from training.basic_info_025 import basic_info_find
from training.emphasize_remove_026 import emphasize_remove
from training.link_remove_027 import link_remove
import re

#Eine Funktion, die Pfund entfernt.
def pound_check(value):
    pattern = re.compile(r".*pound.*")
    if pattern.match(value):
        value = value.replace("(&pound;)",'')
        return value
    else:
        return  value

#Eine Funktion, die das br-Tag entfernt.
def br_check(value):
    pattern1 = re.compile(r".*<br.*")
    if pattern1.match(value):
        value = value.replace("<br />", '').replace("<br/>", '')
        return value
    else:
        return value

#Eine Funktion, die das Ref-Tag und die Referenzbeschreibung entfernt.
def ref_check(value):
    pattern2 = re.compile(r".*<ref.*")
    if pattern2.match(value):
        start_point = value.find("<ref")
        value = value[0:start_point]
        return value
    else:
        return value

#{{Wann}}Funktion zum Entfernen.
def brackets_check(value):
    pattern3 = re.compile(r".*\{\{.*")
    if pattern3.match(value):
        value = value.replace("{{","").replace("}}","")
        #lang|en|Holen Sie sich 4 Zeichen oder mehr aus der ersten Pipe, wenn United ~#
        start_point = value.find("|")+4
        value = value[start_point:len(value)]
        return value
    else:
        return value

#Datei: Zu entfernende Funktion.
def file_check(value):
    pattern4 = re.compile(r".*Datei.*")
    if pattern4.match(value):
        value = value.replace('Datei:','')
        start_point = value.find("|")
        value = value[0:start_point]
        return value
    else:
        return value

#Halbe Breite|Funktion zum Entfernen.|Nur mit|+()Entfernen Sie das vorhandene Muster.
def pipe_check(value):
     pattern5 = re.compile(r".*\|.*")
     pattern6 = re.compile(r".*\(.*")
     if pattern5.match(value) and pattern6.match(value) :
         end_point = value.find("|")
         value = value[0:end_point] + ")"
         return value
     elif pattern5.match(value):
         end_point = value.find("|")
         value = value[0:end_point]
         return value
     else:
         return value

#Volle Breite (Entfernungsfunktion
def other_check(value):
    pattern7 = re.compile(r"^\(")
    if pattern7.match(value):
        value = value.replace("(","")
        return value
    else:
        return value

def markup_remove(link_remove_dict):
    for key,value in link_remove_dict.items():
        value = pound_check(value)
        value = br_check(value)
        value = ref_check(value)
        value = brackets_check(value)
        value = file_check(value)
        value = pipe_check(value)
        value = other_check(value)
        link_remove_dict.update({key:value})

    return link_remove_dict


if __name__=="__main__":
    lines = uk_find()
    basic_dict = basic_info_find(lines)
    emphasize_remove_dict=emphasize_remove(basic_dict)
    link_remove_dict = link_remove(emphasize_remove_dict)
    markup_remove_dict = markup_remove(link_remove_dict)

    for key,value in markup_remove_dict.items():
        print(key+':'+value)

    print(len(markup_remove_dict.items()))

result


Gründungsdatum 1:927/843
Offizieller Ländername:United Kingdom of Great Britain and Northern Ireland
Etablierte Form 1:Königreich England / Königreich Schottland (beide Länder sind Koalitionsgesetz(1707))
Positionieren Sie das Bild:Location_UK_EU_Europe_001.svg
Slogan:Dieu et mon droit (französisch):Gott und meine Rechte)
ccTLD:.uk / .gb
Flaggenbild:Flag of the United Kingdom.svg
Währung:Sterling Teich
(Weggelassen, weil es lang ist)
Process finished with exit code 0

Impressionen: Zuerst habe ich das Markup gefunden, ein Kompilierungsmuster erstellt und wiederholt, um zu sehen, welche Art von Markup abgefangen wurde. .. .. Und ich beschloss, alle Muster Zeile für Zeile auszuwerten. Die Notation in voller Breite ist jedoch Birne. .. .. Ich habe mich wirklich gefragt, warum es nicht erwischt wurde. .. .. Ich bin müde.

029. Holen Sie sich die URL des Flaggenbildes

Verwenden Sie den Inhalt der Vorlage, um die URL des Flaggenbilds abzurufen. (Hinweis: Rufen Sie imageinfo in der MediaWiki-API auf, um Dateiverweise in URLs zu konvertieren.)

get_url_029.py


# -*- coding:utf-8-*-

from training.json_read_020 import uk_find
from training.basic_info_025 import basic_info_find
import requests
import urllib.parse
import json
import re

def image_query(filename):
    url = "https://commons.wikimedia.org/w/api.php?"
    action = "action=query&"
    titles = "titles=File:"+urllib.parse.quote(filename)+"&"
    prop = "prop=imageinfo&"
    iiprop="iiprop=url&"
    format = "format=json"
    parameter = url +action+titles+prop+iiprop+format
    return parameter

def get_request(parameter):
    pattern = re.compile(r".*\"url\".*")
    r = requests.get(parameter)
    data = r.json()
    json_data =json.dumps(data["query"]["pages"]["347935"]["imageinfo"],indent=4)
    for temp in json_data.split('\n'):
        if(pattern.search(temp)):
            url_data = temp.replace(" ","")
        else:
            continue

    return url_data

if __name__=="__main__":
    lines = uk_find()
    basic_dict = basic_info_find(lines)
    parameter=image_query(basic_dict['Flaggenbild'])
    get_url = get_request(parameter)
    print(get_url)

result


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

Process finished with exit code 0

Impressionen: Anfangs war ich mir nicht sicher, was ich tun sollte. Nach dem verschiedenen Googeln ging es darum, eine Anfrage an Wikimedia zu senden, um nach Daten zu suchen, die sich auf den Dateinamen beziehen, und die URL zu finden, unter der die Bilddatei aus der Antwort hochgeladen wird. Ich habe lange gebraucht, um dieses Thema zu verstehen ... Es war ein Problem, das ich auf viele Arten gelernt habe.

Recommended Posts

[Python] Fordere 100 Schläge heraus! (015 ~ 019)
[Python] Fordere 100 Schläge heraus! (006-009)
[Python] Fordere 100 Schläge heraus! (000-005)
[Python] Fordere 100 Schläge heraus! (010-014)
[Python] Fordere 100 Schläge heraus! (025-029)
[Python] Fordere 100 Schläge heraus! (020-024)
Python-Challenge-Tagebuch ①
Fordern Sie 100 Data Science-Schläge heraus
Python
Spartacamp Python 2019 Day2 Challenge
100 Pandas klopfen für Python-Anfänger
Fordern Sie Python3 und Selenium Webdriver heraus
Fordern Sie LOTO 6 mit Python ohne Disziplin heraus
Die Bildverarbeitung mit Python 100 klopft an die Binärisierung Nr. 3
# 2 Python-Anfänger fordern AtCoder heraus! ABC085C --Otoshidama
100 Bildverarbeitung mit Python Knock # 2 Graustufen
Kafka Python
Python-Grundlagen ⑤
Python-Zusammenfassung
Eingebaute Python
Python-Einschlussnotation
Python-Technik
Python 2.7 Countdown
Python-Memorandum
Python FlowFishMaster
Python-Dienst
Python-Tipps
Python-Funktion ①
Python-Grundlagen
Python-Memo
Ufo-> Python (3)
Python-Einschlussnotation
Installieren Sie Python
Python Singleton
Python-Grundlagen ④
Python-Memorandum 2
Python-Memo
Python Jinja2
100 Bildverarbeitung mit Python Knock # 8 Max Pooling
Python-Inkrement
atCoder 173 Python
[Python] -Funktion
Python-Installation
Python installieren 3.4.3.
Versuchen Sie Python
Python-Memo
Python iterativ
Python-Algorithmus
Python2 + word2vec
[Python] -Variablen
Python-Funktionen
Python sys.intern ()
Python-Tutorial
Python-Fraktion
Python Underbar Das ist was
Python-Zusammenfassung
Starten Sie Python
[Python] Sortieren
Hinweis: Python
Python-Grundlagen ③