"""
23.Abschnittsstruktur
Abschnittsnamen und ihre im Artikel enthaltenen Ebenen (z. B. ""==Abteilungsname==Wenn ", 1) anzeigen.
"""
import json
import re
def get_uk_text(path):
with open(path) as f:
for line in f:
line_data = json.loads(line)
if line_data["title"] == "England":
data = line_data
break
return data["text"]
uk_text = get_uk_text("jawiki-country.json")
# See uk_text.txt
# ans23
def get_section(string: str) -> list:
"""
https://docs.python.org/3/library/re.html#regular-expression-syntax
- re.VERBOSE allow us add command to explain the regular expression
- re.S allow to recognize '\n'
- (...) matches whatever regular expression is inside the parentheses,
- (?:...) a non-capturing version of regular parentheses.
- ? causes the resulting RE to match 0 or 1 repetitions
- *? the '*' qualifier is greedy.
Adding ? after the qualifier makes it perform the match in non-greedy or minimal fashion; as few characters as possible will be matched.
e.g. <.*> is matched against '<a> b <c>'
e.g. <.*?> will match only '<a>'
Input:
- ===Großstädte===
Return:
- [('==', 'Fußnote'), ...]
"""
pattern = re.compile(
r"""
^ #Zeilenanfang
(={2,}) #Ziel 2 oder mehr erfassen'='
\s* #Zusätzliche 0 oder mehr Leerzeichen ('Philosophie'Oder'Ehe'Entfernt, da vorher und nachher ein zusätzlicher Platz vorhanden ist
(.+?) #Ziel erfassen, ein oder mehrere beliebige Zeichen, nicht gierig (Verhinderung der Mitnahme nachfolgender Bedingungen)
\s* #0 oder mehr zusätzliche Leerzeichen
\1 #Rückverweis, gleicher Inhalt wie das erste Erfassungsziel
.* #Jedes Zeichen ist 0 oder mehr
$ #Ende der Linie
""",
re.MULTILINE | re.VERBOSE,
)
result = re.findall(pattern, string)
return result
def get_level(sections: list):
result = []
for level, value in sections:
level = len(level) - 1
result.append((level, value))
return result
sections = get_section(uk_text) # [('==', 'Fußnote'), ...]
result = get_level(sections) # [(1, 'Fußnote'), ...]
for level, value in result:
print(" " * 2 * (level - 1) + value)
#Ländername
#Geschichte
#Erdkunde
#Großstädte
#Klima
#Politik
#Ehemaliger Leiter
#Recht
#Innere Angelegenheiten
#Abteilung für lokale Verwaltung
#Diplomatie / Militär
Recommended Posts