Eine Aufzeichnung zur Lösung der Probleme in der ersten Hälfte von Kapitel 3. Wie Sie auf der Webseite sehen können, lautet die Zieldatei jawiki-country.json, eine Erweiterung von jawiki-country.json.gz.
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 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.
# -*- coding: utf-8 -*-
__author__ = 'todoroki'
import re
import json
inputfile = 'jawiki-country.json'
outputfile = 'jawiki-england.txt'
f = open(inputfile)
g = open(outputfile, 'w')
target = re.compile(u'England')
for line in f:
res = json.loads(line)
if target.search(res[u'text']):
g.write(res['text'].encode('utf8') + '\n')
f.close()
g.close()
#=> (Datei jawiki-england.Ausgabe an txt)
Verwenden Sie das Re-Modul. Da Japanisch als Unicode-Zeichenfolge behandelt wird, wird es in Form von "u'UK" geschrieben. Kompilieren Sie mit der Kompilierungsmethode des re-Moduls zu einem regulären Ausdruck und bestimmen Sie mit der Suchmethode, ob jede Zeile target (UK) enthält.
Extrahieren Sie die Zeile, in der der Kategoriename im Artikel angegeben ist.
# -*- coding: utf-8 -*-
__author__ = 'todoroki'
import re
inputfile = 'jawiki-england.txt'
outputfile = 'jawiki-england_category.txt'
f = open(inputfile)
g = open(outputfile, "w")
category = re.compile('\[\[Category:.+\]\]')
for line in f:
if category.match(line):
g.write(line.strip() + "\n")
f.close()
g.close()
#=> (Datei jawiki-england_category.Ausgabe an txt)
Gleich wie das vorherige Problem.
Beurteilung, ob "[[Kategorie: ~]]" aufgenommen werden soll.
Escape [
und ]
, weil es sich um einen regulären Ausdruck handelt.
Extrahieren Sie die Namen der Artikelkategorien (nach Namen, nicht zeilenweise).
# -*- coding: utf-8 -*-
__author__ = 'todoroki'
import re
inputfile = 'jawiki-england.txt'
outputfile = 'jawiki-england_category-name.txt'
f = open(inputfile)
g = open(outputfile, "w")
category = re.compile('\[\[Category:(.+)\]\]')
for line in f:
l = category.match(line)
if l:
g.write(l.group(1) + "\n")
f.close()
g.close()
#=> (Datei jawiki-england_category-name.Ausgabe an txt)
Rufen Sie den Kategorienamen mit der Gruppenmethode des re-Moduls ab.
Sie können das Teil durch das Teil (. +)
Muster erhalten, das beim Kompilieren des regulären Ausdrucks in Klammern eingeschlossen ist.
Wenn das Argument "0" ist, wird die gesamte Übereinstimmung zurückgegeben, und wenn es sich um einen numerischen Wert handelt, wird der gemusterte Teil der Zahl zurückgegeben (wenn der numerische Wert größer als die Anzahl der Muster ist, wird IndexError zurückgegeben).
Zeigen Sie die im Artikel enthaltenen Abschnittsnamen und deren Ebenen an (z. B. 1, wenn "== Abschnittsname ==").
# -*- coding: utf-8 -*-
__author__ = 'todoroki'
import re
inputfile = 'jawiki-england.txt'
outputfile = 'jawiki-england_section.txt'
f = open(inputfile)
g = open(outputfile, "w")
section = re.compile(r'=(=+) (.+) =')
for line in f:
l = section.match(line)
if l:
g.write("sec%s : " % len(l.group(1)))
g.write(l.group(2) + "\n")
f.close()
g.close()
#=> (Datei jawiki-england_section.Ausgabe an txt)
Verwenden Sie wie im vorherigen Problem die Gruppenmethode.
Die Schnittebene wird durch die Anzahl von =
bestimmt.
Extrahieren Sie alle Mediendateien, auf die aus dem Artikel verwiesen wird.
# -*- coding: utf-8 -*-
__author__ = 'todoroki'
import re
inputfile = 'jawiki-england.txt'
outputfile = 'jawiki-england_media.txt'
f = open(inputfile)
g = open(outputfile, "w")
mediafile = re.compile(r".*(Datei|File|file):(.*\.[a-zA-Z0-9]+)\|.*")
for line in f:
l = mediafile.match(line)
if l:
g.write(l.group(2) + "\n")
f.close()
g.close()
#=> (Datei jawiki-england_media.Ausgabe an txt)
Gleich wie das Problem bisher.
Ich fand es kompliziert, Gruppen zu verwenden, aber nachdem ich ein paar Fragen gelöst hatte, verstand ich es irgendwie.
Recommended Posts