Hallo! Ich habe ein Probelm. Und zwar lese ich mit dem Jupyter Notebook eine Textdatei ein. Bei deiser werden jedoch alle Umlaute falsch ausgegeben.
Bei dem ort " erläutere" sieht das dann so aus " xa4uterte ".
Folgende Versuche habe ich schon unternommen:
import codecs
#text=with codecs.open(filename, encoding='utf8')
#inhalt= codecs.open(datei,"r","utf-8")
# text= open(filename, encode= utf-8)
Jedoch funktioniert keines davon. Woran kann das liegen, bzw. was kann ich ansonsten machen? Es ist echt wichtig! ...
Danke schon mal!
Jupyter Notebook- Problem mit der Encodierung
Aber wie? Liest du den Dateiinhalt komplett in einen String oder in eine Liste aus? Wie verwendest du anschließend print um den Text auszugeben?Noranora hat geschrieben:Ich lasse den Text direkt in dem Jupyter Notebook ausgeben.
okay, also die Befehle sehen so aus :
habe manche Versuche schon wieder aukommentiert, da sie nicht funktionierten....
dann folgt eine ziemlich lange Ausgabe des Dateiinhaltes in der geparsten Form, das sieht dann alles so aus:
Gesetzes\xc3\xa4nderung/NN/I-NP/O durch/IN/B-PP/B-PNP die/DT/B-NP/I-PNP
wie Ihr seht, funktioniert die richtige Kodierung bei den Umlauten dann nicht. Es müsste bspw."Gesetzesänderung" heißen...
Danke schon mal für eure Mühe!
Code: Alles auswählen
import codecs
import nltk
from nltk import sent_tokenize, word_tokenize
import urllib
import re
from pattern.de import parse, split
#with codesc.open("filename.txt", encoding'utf8')as text:
text= open("filename.txt")
#text=with codecs.open(filename, encoding='utf8')
#inhalt= codecs.open(datei,"r","utf-8")#with codecs.open(filename, encoding='utf8') as f
kontext=(text.read())
kontext=kontext.decode('utf-8')
s = parse(kontext) # parst den Text aus der Datei
s = split(s)
saetze=s.sentences
dann folgt eine ziemlich lange Ausgabe des Dateiinhaltes in der geparsten Form, das sieht dann alles so aus:
Gesetzes\xc3\xa4nderung/NN/I-NP/O durch/IN/B-PP/B-PNP die/DT/B-NP/I-PNP
wie Ihr seht, funktioniert die richtige Kodierung bei den Umlauten dann nicht. Es müsste bspw."Gesetzesänderung" heißen...
Danke schon mal für eure Mühe!
Code: Alles auswählen
s = parse(inhalt) # parst den Text aus der Datei
s = split(s)
saetze=s.sentences
@Noranora: und saetze ist eine Liste, deren Repräsentation besteht aus eckigen Klammern und den Repräsentationen der Elemente, also der Strings. Wie schon oben geschrieben ist das keine Ansicht, die man einem Nutzer vor die Füße werfen sollte, sondern nur zu Debugging-Zwecken.
Je nach dem, was Du mit saetzen machen willst, mußt Du dann die passende Ausgabe programmieren, im einfachsten Fall also:
Je nach dem, was Du mit saetzen machen willst, mußt Du dann die passende Ausgabe programmieren, im einfachsten Fall also:
Code: Alles auswählen
for satz in saetze:
print(satz)
Hallo! Das habe ich nun ausprobiert. In der geparsten Form werden die Sachen dann trotzdem in der Form ausgegeben:
die/DT/B-NP/I-PNP Antr\xc3\xa4ge/NN/I-NP/I-PNP von
"Antr\xc3\xa4ge " anstelle von "Anträge"
Ich brauche irgendwie eine Lösung mit der ich die Sätze parsen kann und dazu die Utf-8 Codierung verwendet wird. Ist das nicht möglich?
die/DT/B-NP/I-PNP Antr\xc3\xa4ge/NN/I-NP/I-PNP von
"Antr\xc3\xa4ge " anstelle von "Anträge"
Ich brauche irgendwie eine Lösung mit der ich die Sätze parsen kann und dazu die Utf-8 Codierung verwendet wird. Ist das nicht möglich?
BZW. ist es möglich anhand solcher Daten eine Analyse über Worthäufigkeiten, etc.anzufertigen, oder sind die Ergebnisse dann immer verfälscht. Also ich meine, ob das jetzt halt nur für mich so aussieht, der Computer die Unterschiede aber kennt, oder ob er ebenfalls mit diesen visualisierten Daten arbeitet...?
@Noranora: so ein bißchen mußt Du Dich schon mit den Objekten auseinandersetzen, mit denen Du arbeitest. Mit print kann man z.B. nur einfache Datentypen wie Zahlen oder Strings ausgeben lassen, oder Objekte, die eine sinnvolle __str__-Methode definieren. Bei allen anderen Objekten wird die Repräsentation ausgegeben, wie schon öfter geschrieben mit den entsprechenden Effekten auf Sonderzeichen. Jetzt soll ich mich also durch die Dokumentation Deiner exotischen Module durcharbeiten um zu sehen, dass ein Sentence-Objekt ein string-Property hat statt einer __str__-Methode:
Code: Alles auswählen
for satz in saetze:
print(satz.string)