Hallo Forum,
als erstes kleines Pythonscript (mal von 'Hello World' abgesehen) versuche ich grade ein Programm zu schreiben das den "Komplexitätsindex" eines Textes berechnet. Dazu lese ich mit read() den ganzen Inhalt als ein String ein und suche dann per findall alle Substantive raus.
Allerdings habe ich ein Problem mit Umlauten, denn aus z.B. 'Missverständniss' wird 'Missverst\xe4', was vor allem schlecht ist weil ich später eigentlich auf die Wortendungen matchen will.
Ich bin mir als Anfänger etwas unsicher wie ich jetzt verfahren soll, kann ich entweder irgendwie die Umlaute zu etwas sinnvollem konvertieren, oder Python dazu bekommen mir die Wörter nicht immer nach den Umlauten abzuschneiden?
Wie geht man am besten damit um?
Gruß & Danke
buebo
P.S.: Ich habe gegoogelt und auch ein paar Sachen gefunden, aber nichts was mir auf Anhieb geholfen hätte, sorry falls ich hier einen alten Hut neu anschneide.
[Newbie] Umgang mit Umlauten
Hi. Das kann an sich nicht sein, da \xe4 die interne Darstellung von einem 'ä' ist. Das (e4) ist der Asciiwert von einem 'ä' im Hexadezimalsystem. Das hat allerdings keinen Einfluss auf die Arbeit von Python, nur werden Ergebnisse, wenn man sie ohne print ausgeben lässt, mit repr formatiert. Es wird also kein 'ä' gebildet, sondern eine Escapesequenz aus 4 Buchstaben verwendet, die als 1 Buchstabe (nämlich ä) zählt. Beleg:
Ich glaube also, dass du eher in deiner Regex irgendetwas falsch geschrieben hast. Gib die mal an, dann können wir da mal nachschauen, ob was nicht ok ist.
Milan
Code: Alles auswählen
>>> re.findall('bäc','bb\xe4cc')
['b\xe4c']
>>> re.findall('bäc','bbäcc')
['b\xe4c']
>>> re.findall('b\xe4c','bbäcc')
['b\xe4c']
>>> print re.findall('b\xe4c','bbäcc')[0]
bäc
Milan
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Hi buebo,
das ist ein Problem mit verschiedenen Zeichencodierungen. Am Besten arbeitest Du mit Unicode, also erstmal einen Editor verwenden der Unicode unterstützt. als zweite Zeile in Deinen Scripten
Nun musst Du noch rausfinden, welcher Codec das auf dem System eingestellt ist. Den liefert die Funktion getfilesystemencoding() aus dem modul sys. In der Regel sind Dateien die auf dem System gespeichert wurden auch in diesem Coding gehalten. Es gibt aber auch Ausnahmen, wie XML HTML oder Pythonscripts. Mit den stringmethoden encode und decode kannst Du dann zwischen verschiedenen Codierungen hin und her convertieren.
Hier noch ein paar Links:
http://p-nand-q.com/python/unicode_faq.html
http://www.reportlab.com/i18n/python_un ... orial.html
Gruß
Dookie
das ist ein Problem mit verschiedenen Zeichencodierungen. Am Besten arbeitest Du mit Unicode, also erstmal einen Editor verwenden der Unicode unterstützt. als zweite Zeile in Deinen Scripten
Code: Alles auswählen
# -*- coding: UTF-8 -*-
Hier noch ein paar Links:
http://p-nand-q.com/python/unicode_faq.html
http://www.reportlab.com/i18n/python_un ... orial.html
Gruß
Dookie
Ok, da hast Du wahrscheinlich recht, allerdings würde ich das gerne erstmal zurückstellen und mich den Zeichensätzen widmen, ich habe immer meine Probleme bei paraleller ProblemverarbeitungMilan hat geschrieben: Ich glaube also, dass du eher in deiner Regex irgendetwas falsch geschrieben hast. Gib die mal an, dann können wir da mal nachschauen, ob was nicht ok ist.
Milan

Ich habe leider die Problematik das ich dem Script einfach eine Textdatei übergebem will und das sollte auch von meinen technisch wenig intressierten Kommilitonen geschafft werden und möglichst nicht nur auf einem Unix, sondern auch noch auf einem bestimmten Redmonder Betriebssystem.Hi buebo,
das ist ein Problem mit verschiedenen Zeichencodierungen. Am Besten arbeitest Du mit Unicode, also erstmal einen Editor verwenden der Unicode unterstützt. als zweite Zeile in Deinen Scripten
Nachdem ich mal deine Links gelesen habe bin ich zu folgendem Ansatz gekommen:
Code: Alles auswählen
#!/usr/local/bin/python
# -*- coding: UTF-8 -*-
from sys import getfilesystemencoding
codierung = getfilesystemencoding()
datei = file('text.txt', 'r')
inhalt = datei.read()
inhalt = inhalt.decode(codierung).encode("UTF-8")
Gruß
buebo