Jupyter Notebook- Problem mit der Encodierung

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
Noranora
User
Beiträge: 62
Registriert: Donnerstag 21. Januar 2016, 12:51

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!
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@Noranora: das was Du da siehst ist nur die Repräsentation eines Strings, die nur für Debugzwecke gedacht ist. Wie gibst Du wo Text aus?
Noranora
User
Beiträge: 62
Registriert: Donnerstag 21. Januar 2016, 12:51

Ich lasse den Text direkt in dem Jupyter Notebook ausgeben. Also leite das nicht in eine extra Datei um, falls du das meinst?...Ich brauche den Text um ihn dann auf Worthäufigkeiten, etc zu untersuchen
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@Noranora: um Dir helfen zu können, müssen wir schon wissen was Du genau machst.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Noranora hat geschrieben:Ich lasse den Text direkt in dem Jupyter Notebook ausgeben.
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
User
Beiträge: 62
Registriert: Donnerstag 21. Januar 2016, 12:51

okay, also die Befehle sehen so aus :

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
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!
Noranora
User
Beiträge: 62
Registriert: Donnerstag 21. Januar 2016, 12:51

Code: Alles auswählen

s = parse(inhalt) # parst den Text aus der Datei
s = split(s) 

saetze=s.sentences
Der Teil ist oben irgendwie verloren gegangen. In dem Teil werden die einzelnen Sätze der Datei geparst
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@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:

Code: Alles auswählen

for satz in saetze:
    print(satz)
Noranora
User
Beiträge: 62
Registriert: Donnerstag 21. Januar 2016, 12:51

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?
Noranora
User
Beiträge: 62
Registriert: Donnerstag 21. Januar 2016, 12:51

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...?
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@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)
Noranora
User
Beiträge: 62
Registriert: Donnerstag 21. Januar 2016, 12:51

Vielen, vielen Dank! Du hast mir sehr geholfen! :))
Noranora
User
Beiträge: 62
Registriert: Donnerstag 21. Januar 2016, 12:51

Gibt es denn auch noch eine Möglichkeit, bei der die Resultatse von dem prasen übrig bleiben?...also /NN/NP...
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@Noranora: erster Schritt wäre Dokumentation lesen.
Antworten