[PYTHON] 100 Sprachverarbeitungsklopfen (2020): 22

"""
22.Extraktion des Kategorienamens
Extrahieren Sie die Namen der Artikelkategorien (nach Namen, nicht nach Zeile).
"""

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")
uk_text_list = uk_text.split("\n")
ans = [x for x in uk_text_list if "Category:" in x[:11]]
# ans:
# [[Category:Vereinigte Königreich Mitgliedsländer]]
# [[Category:Königreich des Vereinigten Königreichs|*]]
# [[Category:G8-Mitgliedsländer]]
# [[Category:Mitgliedsländer der Europäischen Union|Ehemalige]]
# [[Category:Marine Nation]]
# [[Category:Bestehendes souveränes Land]]
# [[Category:Inselstaat]]
# [[Category:Eine Nation / ein Gebiet, das 1801 gegründet wurde]]


# ans22
def extract_category_value(string: str) -> str:
    """
    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: [[Category:England|*]]
    Output: 'England'
    """
    pattern = re.compile(
        r"""
        ^       #Zeilenanfang
        .*      #Beliebiges Zeichen 0 oder mehr
        \[\[Category:
        (       #Startgruppe, die erfasst werden soll
        .*?     #Alle Zeichen 0 oder mehr, nicht gierig übereinstimmen (wenn gierig, die zweite Hälfte'|'Enthält Dekorationen, die mit beginnen)
        )       #Gruppenende
        (?:     #Starten Sie eine Gruppe, die nicht erfasst wird
        \|.*    # '|'Es folgen 0 oder mehr Zeichen
        )?      #Gruppenende, 0 oder 1 Aussehen
        \]\]
        .*      #Beliebiges Zeichen 0 oder mehr
        $       #Ende der Linie
        """,
        re.VERBOSE | re.S,
    )
    result = re.findall(pattern, string)[0]
    return result


category_values = [extract_category_value(s) for s in ans]
print(category_values)
# ['England',
#  'Vereinigte Königreich Mitgliedsländer',
#  'Königreich des Vereinigten Königreichs',
#  'G8-Mitgliedsländer',
#  'Mitgliedsländer der Europäischen Union',
#  'Marine Nation',
#  'Bestehendes souveränes Land',
#  'Inselstaat',
#  'Eine Nation / ein Gebiet, das 1801 gegründet wurde']

Recommended Posts

100 Sprachverarbeitungsklopfen 03 ~ 05
100 Sprachverarbeitungsklopfen (2020): 40
100 Sprachverarbeitungsklopfen (2020): 32
100 Sprachverarbeitungsklopfen (2020): 35
100 Sprachverarbeitungsklopfen (2020): 47
100 Sprachverarbeitungsklopfen (2020): 39
100 Sprachverarbeitungsklopfen (2020): 22
100 Sprachverarbeitungsklopfen (2020): 26
100 Sprachverarbeitungsklopfen (2020): 34
100 Sprachverarbeitungsklopfen (2020): 42
100 Sprachverarbeitungsklopfen (2020): 29
100 Sprachverarbeitungsklopfen (2020): 49
100 Sprachverarbeitungsklopfen 06 ~ 09
100 Sprachverarbeitungsklopfen (2020): 43
100 Sprachverarbeitungsklopfen (2020): 24
100 Sprachverarbeitungsklopfen (2020): 45
100 Sprachverarbeitungsklopfen (2020): 10-19
100 Sprachverarbeitungsklopfen (2020): 30
100 Sprachverarbeitungsklopfen (2020): 00-09
100 Sprachverarbeitungsklopfen (2020): 31
100 Sprachverarbeitungsklopfen (2020): 48
100 Sprachverarbeitungsklopfen (2020): 44
100 Sprachverarbeitungsklopfen (2020): 41
100 Sprachverarbeitungsklopfen (2020): 37
100 Sprachverarbeitungsklopfen (2020): 25
100 Sprachverarbeitungsklopfen (2020): 23
100 Sprachverarbeitungsklopfen (2020): 33
100 Sprachverarbeitungsklopfen (2020): 20
100 Sprachverarbeitungsklopfen (2020): 27
100 Sprachverarbeitungsklopfen (2020): 46
100 Sprachverarbeitungsklopfen (2020): 21
100 Sprachverarbeitungsklopfen (2020): 36
100 Amateur-Sprachverarbeitungsklopfen: 41
100 Amateur-Sprachverarbeitungsklopfen: 71
100 Amateur-Sprachverarbeitungsklopfen: 56
100 Amateur-Sprachverarbeitungsklopfen: 50
100 Amateur-Sprachverarbeitungsklopfen: 59
100 Amateur-Sprachverarbeitungsklopfen: 70
100 Amateur-Sprachverarbeitungsklopfen: 62
100 Amateur-Sprachverarbeitungsklopfen: 60
100 Amateur-Sprachverarbeitungsklopfen: 30
100 Amateur-Sprachverarbeitungsklopfen: 06
100 Amateur-Sprachverarbeitungsklopfen: 84
100 Amateur-Sprachverarbeitungsklopfen: 81
100 Amateur-Sprachverarbeitungsklopfen: 33
100 Amateur-Sprachverarbeitungsklopfen: 46
100 Amateur-Sprachverarbeitungsklopfen: 88
100 Amateur-Sprachverarbeitungsklopfen: 89
100 Amateur-Sprachverarbeitungsklopfen: 40
100 Amateur-Sprachverarbeitungsklopfen: 45
100 Amateur-Sprachverarbeitungsklopfen: 43
100 Amateur-Sprachverarbeitungsklopfen: 55
100 Amateur-Sprachverarbeitungsklopfen: 22
100 Amateur-Sprachverarbeitungsklopfen: 61
100 Amateur-Sprachverarbeitungsklopfen: 94
100 Amateur-Sprachverarbeitungsklopfen: 54
100 Amateur-Sprachverarbeitungsklopfen: 04
100 Amateur-Sprachverarbeitungsklopfen: 63
100 Amateur-Sprachverarbeitungsklopfen: 78
100 Amateur-Sprachverarbeitungsklopfen: 12
100 Amateur-Sprachverarbeitungsklopfen: 14