Substantive mit Python filtern

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Vesemir
User
Beiträge: 3
Registriert: Montag 6. April 2026, 16:39

Gibt es einen einfachen Weg deutsche Substabtive aus einem Datensatz zu filtern. Gerne mit nltk oder so simpel wie möglich. Ich will mir die 200 häufigsten anzeigen lassen
nezzcarth
User
Beiträge: 1803
Registriert: Samstag 16. April 2011, 12:47

Du kannst mit einem Part-of-Speech-Tagger die Wortarten in einem Text bestimmen und anschließend dann nach Substantiven filtern. POS-Tagger gibt es als Teil größerer Frameworks (spaCy, nltk, textblob) oder standalone.
Pedroski55
User
Beiträge: 52
Registriert: Freitag 25. Juli 2025, 00:20

Nichts einfacher wie das! Probieren wir mit diesem Text:
"""Ein neues Jahr besteht aus insgesamt vier Jahreszeiten.
Frühling, Sommer, Herbst und Winter folgen nacheinander.
Das Jahr beginnt im Januar.
Im Januar und Februar ist es draußen noch sehr kalt und man muss sich warm anziehen, um nicht zu frieren und krank zu werden.
Der Frühling beginnt im März.
Dann steigen die Temperaturen und es wird wieder wärmer.
In den Monaten März, April und Mai ist Frühling.
Von Juni bis September findet der Sommer statt.
Der Sommer ist die heißeste Jahreszeit in Deutschland.
Viele Menschen fahren in dieser Zeit in den Urlaub.
Ab Mitte September bis November gibt es in Deutschland den Herbst.
Dann wird es draußen langsam kälter und man muss sich wieder wärmer anziehen.
Der November und Dezember sind die letzten Monate des Jahres.
Dann stellt sich der Winter ein.
Wenn es besonders kalt ist, kann es im Winter schneien."""

Code: Alles auswählen

import regex as re

# alle gesuchte Worter
worter = ['Jahr',  'Frühling', 'Sommer', 'Herbst', 'Winter']
# Dict um Zahlen zu speichern
wortzahl = {wort: 0 for wort in worter}

# speicher die Datei als Textdatei um sich das Leben bequem zu machen
dtext = '/home/peterr/temp/Deutschetexte/Dtext1.txt'

# falls der Text sehr gross ist benutze einen Generator
def zeilen_holen(text):
    with open(text) as f:
        for line in f:
            yield line

# finde alle Buchstaben und nur Buchstaben
e = re.compile(r'\w+')

# entferne was nicht Buchstabe ist ,.; Leertaste usw
def entferne_zeichen(text):
    res = e.findall(text)
    return res
    
for l in zeilen_holen(dtext):
    print(l)
    linie_list = entferne_zeichen(l)
    for wort in linie_list:
        if wort in worter:
            wortzahl[wort] +=1
wortzahl =
{'Jahr': 2, 'Frühling': 3, 'Sommer': 3, 'Herbst': 2, 'Winter': 3}
Pedroski55
User
Beiträge: 52
Registriert: Freitag 25. Juli 2025, 00:20

Fiel mir grad ein:

Nun müsste man die obige Liste worter mit einer Liste aller Substantive. Die Internetseite hier hat eine solche Liste.

Bißchen webscraping und könnte man sich die holen.

Dann das Resultat nach Haufigkeit der Worter sortieren:

Code: Alles auswählen

sortiert_dict = {key: value for key, value in sorted(wortzahl.items(), reverse=True, key=lambda item: item[1])}
Dann einfach die ersten 200 von sortiert_dict abzweigen!

Code: Alles auswählen

häufige_worter = {}
if len(sortiert_dict) < 200:
    häufige_worter = sortiert_dict
else:
    count = 1
    for key in sortiert_dict.keys():
        häufige_worter[key] = sortiert_dict[key]
        count +=1
        if count > 200:
            break
Antworten