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.
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.
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.
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.
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("(£)",'')
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.
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