Sätze aus dt. Text mit nltk und dehyphen

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
ohrs
User
Beiträge: 3
Registriert: Donnerstag 21. Oktober 2021, 19:32

Diesen Satz habe ich mit nltk.sent_tokenize aus einem größeren Text erstellt:
"Die Bürgerinnen und Bürger in Nordrhein- Westfalen sind dringend auf neue Forschungser- gebnisse für lebensrettende Medikamente angewie- sen."

Dabei macht es keinen Unterschied, ob ich
german_tokenizer = nltk.data.load('tokenizers/punkt/PY3/german.pickle')
sentences = german_tokenizer.tokenize(text)
verwende oder
sentences = sent_tokenize(text, language='german')
Das Ergebnis ist in beiden Varianten gleich.

Mit dehyphen.format.text_to_format erhalte ich:
[['Die', 'Bürgerinnen', 'und', 'Bürger', 'in', 'Nordrhein-', 'Westfalen', 'sind', 'dringend', 'auf', 'neue', 'Forschungser-', 'gebnisse', 'für', 'lebensrettende', 'Medikamente', 'angewie-', 'sen.']]

dehyphen sollte dann die Bindestriche klarmachen, was aber leider nicht klappt.
dehyphened_sent = scorer.dehyphen(sent_w_hyphens)
Die Bürgerinnen und Bürger in Nordrhein- Westfalen sind dringend auf neue Forschungser- gebnisse für lebensrettende Medikamente angewie- sen.

Ich weiß, dass dehyphen im Versuchsstadium ist, aber das Frustrierende ist, dass es bereits eine ganze Zeitlang geklappt hat und jetzt auf einmal nicht mehr. Gibt es eine Alternative zu dehyphen? Wie könnte ich das besser machen?
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Was immer geht:
Du schaust dir für ein Element an, ob das letzte Zeichen ein Bindestrich ist: Beginnt das nachfolgende Wort mit einem Großbuchstabe, wird der Bindestrich nicht entfernt aber die beiden Elemente vereint - beginnt das nachfolgende Element mit einem Kleinbuchstaben, werden die beiden Elemente vereint und der Bindestrich entfernt.
einfachTobi
User
Beiträge: 491
Registriert: Mittwoch 13. November 2019, 08:38

Kann nichts zum Problem sagen, aber sparrows Regel hat Lücken: "... Be- und Entladen ." und ähnliche Satzkonstruktionen. Oder Wörter mit Bibdestrich, wie Nordrhein-Westfalen im Beispiel.
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Ich befürchte "Be- und Entladen" wird immer schwierig. Selbst mit einer komplexen Prüfung anhand eines Wörterbuches.
"Nordrhein-Westfalen" funktioniert aber, indem man den Bindestrich vor einem Großbuchstaben nicht entfernt.

Wenn man sich ansieht, was der Duden zu Bindestrichen zu sagen hat, ist das Problem auch nicht ganz trivial.
ohrs
User
Beiträge: 3
Registriert: Donnerstag 21. Oktober 2021, 19:32

sparrow hat geschrieben: Donnerstag 21. Oktober 2021, 21:46 Was immer geht:
Du schaust dir für ein Element an, ob das letzte Zeichen ein Bindestrich ist: Beginnt das nachfolgende Wort mit einem Großbuchstabe, wird der Bindestrich nicht entfernt aber die beiden Elemente vereint - beginnt das nachfolgende Element mit einem Kleinbuchstaben, werden die beiden Elemente vereint und der Bindestrich entfernt.
Danke für die Antwort - den Bindestrichen ist leider nicht gut mit einigen Regeln beizukommen, das wächst sich ganz schnell in eine Monsterkollektion aus. Daher wäre meine Frage, ob jmd andere packages auf pypi kennt, oder ob es inzwischen für Deutsch mit nltk etwas gibt.
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

@ohrs,

vielleicht das:
https://spacy.io/

Es kommt ja auch darauf an, was du eigentlich erreichen möchtest.
Wie stark würde das Ergebnis beeinträchtig, wenn Wortfetzen wie "angewie" und "sen" einfach wegfallen, weil sie alleine keinen Sinn mehr ergeben?
ohrs
User
Beiträge: 3
Registriert: Donnerstag 21. Oktober 2021, 19:32

rogerb hat geschrieben: Freitag 22. Oktober 2021, 10:14 @ohrs,

vielleicht das:
https://spacy.io/

Es kommt ja auch darauf an, was du eigentlich erreichen möchtest.
Wie stark würde das Ergebnis beeinträchtig, wenn Wortfetzen wie "angewie" und "sen" einfach wegfallen, weil sie alleine keinen Sinn mehr ergeben?
Danke für den Hinweis!

Ich hatte den Text aus einer PDF-Datei, die ich mit fitz /mupdf extrahiert hatte. Das habe ich jetzt anders gemacht, nämlich mit textract, und erstaunlicherweise habe ich jetzt den Text ohne Bindestriche. Bin mir nicht ganz klar, wie das kommt, jedenfalls kann ich jetzt erst einmal auf dehyphen verzichten.
Antworten