Siehe Erster Beitrag
9/24 hinzugefügt
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.
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.
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.
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.
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.
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