[Python] Fordere 100 Schläge heraus! (020-024)

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

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

json_read_020.py


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

import json
import gzip
import re

def uk_find():
    basepath = '/Users/masassy/PycharmProjects/Pywork/training/'
    filename = 'jawiki-country.json.gz'
    pattern = r"England"
    with gzip.open(basepath + filename, 'rt')as gf:
        for line in gf:
            # json.Lasten ist str → dict, json.Laden ist Datei → diktieren
            json_data = json.loads(line)
            if (re.match(json_data['title'], pattern)):
                return json_data['text']

if __name__ == "__main__":
    json_data = uk_find()
    print(json_data)

result


{{redirect|UK}}
{{Grundlegende Informationen Land
|Kurzbezeichnung=England

(Weggelassen, weil es lang ist)

[[Category:Inselstaat|Kureito Furiten]]
[[Category:Staat / Region gegründet 1801]]

Process finished with exit code 0

Impressionen: Ich habe einige Zeit gebraucht, um das Datenformat der von gzip.open gelesenen Datei und das Datenformat von json_data zu verstehen.

021. Extrahieren Sie Zeilen mit Kategorienamen

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

category_021.py


from training.json_read_020 import uk_find
import re

if __name__=="__main__":
    pattern = re.compile(r'.*Category.*')
    lines = uk_find()
    for line in lines.split('\n'):
        if pattern.match(line):
            print(line)

result


[[Category:England|*]]
[[Category:Königreich des Vereinigten Königreichs|*]]
[[Category:G8-Mitgliedsländer]]
[[Category:Mitgliedsländer der Europäischen Union]]
[[Category:Marine Nation]]
[[Category:Souveränes Land]]
[[Category:Inselstaat|Kureito Furiten]]
[[Category:Staat / Region gegründet 1801]]

Process finished with exit code 0

Impressionen: Es hat eine Weile gedauert, bis mir klar wurde, dass die Kombination des regulären Ausdrucks. \ * Suchzeichen. \ * Und lines.split ('\ n') Zeilen zurückgeben kann, die das Suchzeichen enthalten.

022. Extraktion des Kategorienamens

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

category_str_022.py


from training.json_read_020 import uk_find
import re

if __name__=="__main__":
    pattern = re.compile(r'.*Category:.*')
    pattern2 = re.compile(r'.*\|.*')
    lines = uk_find()
    for line in lines.split('\n'):
        if pattern.match(line):
            strip_line=line.lstrip("[[Category:").rstrip("]]")
            if pattern2.match(strip_line):
                N = strip_line.find('|')
                strip_line2 = strip_line[:N]
                print(strip_line2)
            else:
                print(strip_line)

result


England
Königreich des Vereinigten Königreichs
G8-Mitgliedsländer
Mitgliedsländer der Europäischen Union
Marine Nation
Souveränes Land
Inselstaat
Staat / Region gegründet 1801

Process finished with exit code 0

Impression: Nach dem Extrahieren der Kategorie befindet sie sich in der Zeile|Wenn da ist|Der Punkt des Einfallsreichtums ist der Teil, der den Ort angibt, an dem an der Position von geschnitten werden soll.

023. Abschnittsstruktur

Zeigen Sie die im Artikel enthaltenen Abschnittsnamen und deren Ebenen an (z. B. 1, wenn "== Abschnittsname ==").

section_023.py


import re
from training.json_read_020 import uk_find

if __name__=="__main__":
    pattern = re.compile(r'^=.*')
    pattern2 = re.compile(r'^={2}')
    pattern3 = re.compile(r'^={3}')
    pattern4 = re.compile(r'^={4}')

    lines=uk_find()
    for line in lines.split('\n'):
        if pattern.match(line):
            if pattern4.match(line):
                print(line.lstrip('====').rstrip('====')+':Level 4')
            elif pattern3.match(line):
                print(line.lstrip('===').rstrip('===')+':Stufe 3')
            elif pattern2.match(line):
                print(line.lstrip('==').rstrip('==')+':Level 2')
            else:
                print('no match')

result


Ländername:Level 2
Geschichte:Level 2
Erdkunde:Level 2
Klima:Stufe 3
(Weggelassen, weil es lang ist)

Process finished with exit code 0

Impressionen: Nachdem ich vier Kompilierungsmuster erstellt hatte, extrahierte ich zuerst die Zeilen beginnend mit = und verzweigte den Prozess dann entsprechend der Ebene, aber es war ziemlich gewaltsam. Es scheint einen anderen guten Weg zu geben.

024. Dateireferenzen extrahieren

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

media_024.py


from training.json_read_020 import uk_find
import re

if __name__=="__main__":
    pattern = re.compile(r".*(Datei|File).*")
    pattern2 = re.compile(r"^|.*")
    lines = uk_find()
    for line in lines.split('\n'):
        if pattern2.search(line):
            line = line.lstrip('|')
        if pattern.search(line):
            start = line.find(':')+1
            end = line.find('|')
            print(line[start:end])

result


Royal Coat of Arms of the United Kingdom.svg
Battle of Waterloo 1815.PNG
The British Empire.png
Uk topo en.jpg
BenNevis2005.jpg
(Weggelassen, weil es lang ist)

Impressionen: Markup-Diagramm zur Bestimmung der Position von Slices Der Punkt des Einfallsreichtums besteht darin, eine Verarbeitung durchzuführen, die dem Format des Dateiteils von entspricht

Recommended Posts

[Python] Fordere 100 Schläge heraus! (015 ~ 019)
[Python] Fordere 100 Schläge heraus! (030-034)
[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 ①
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
Python-Einschlussnotation
Python-Technik
Python studieren
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 sys.intern ()
Python-Tutorial
Python-Fraktion
Python Underbar Das ist was
Python-Zusammenfassung
Starten Sie Python
Hinweis: Python
Python-Grundlagen ③
Python-Protokoll ausgeben
Python-Grundlagen
[Scraping] Python-Scraping