Datei einlesen, verschiedene Zeichensätze

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.
Loo.py
User
Beiträge: 9
Registriert: Donnerstag 29. Oktober 2009, 16:47

Hallo,

ich möchte folgende Aufgabe lösen:
und zwar möchte ich einen speziellen Zeichensatz aus einer Datei einlesen, und zwar IPA (International Phonetic Alphabet, siehe: http://en.wikipedia.org/wiki/Internatio ... c_Alphabet) Zeichen des Zeichensatzes von der Seite:
http://scripts.sil.org/cms/scripts/page ... L_download
und dort
"CharisSIL4.106.zip"
Ich wechsel in diesem Dokument also zwischen diesen beiden Zeichensätzen, weil ich mit Helvetica nicht die IPA - Zeichen darstellen kann.
Die IPA Zeichen befinden sich innerhalb von normalem Text, d.h. ein anderer Zeichensatz wie z.B. hier Helvetica Normal:

Ich = iç
rauschen = rauʃən

usw. dabei ist links von dem Gleichheitszeichen immer Helvetica, rechts davon IPA Zeichen mittels dem Zeichensatz CharisSIL

Meine Frage ist nun:
Wie kann ich das Dokument einlesen, so dass Python die IPA Zeichen auch als solche erkennt?

Danke schon mal!

Loo.py
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Also Python ist ein Zeichensatz doch vollkommen egal! Das ist doch nur für Grafik- / Officeprogramme interessant. Python liest doch nur Textdateien in einer bestimmten Zeichencodierung ein. Das ist aber imho etwas vollkommen anderes.

Vielleicht beschreibst Du noch einmal, was Du genau machen willst! Was hast Du vorliegen, was willst Du erreichen?
Loo.py
User
Beiträge: 9
Registriert: Donnerstag 29. Oktober 2009, 16:47

Hi!
Ich möchte ein Aussprachewörterbuch anlegen,
das ich zunächst in einer normalen Textdatei im Format
Wort = Aussprache
speicher.
Dabei ist Wort mittels dem Zeichensatz Helvetica geschrieben und Aussprache mittels dem CharisSIL Zeichensatz.

Ich habe bisher einiges zu Unicode gelesen. Aber ich verstehe das nicht so genau mit der Codierung, von der du schreibst.
Als ich CharisSIL -Zeichen im IDLE eingegeben habe, wurde ein Syntax - Error und es werden auch Zeichen von CharisSIL einfach als leere Quadrate dargestellt.
Muss ich jetzt alles in dem Dokument in Unicodezeichen darstellen?
Ich würde eben gerne in der Datei zwei Zeichensätze verwenden und dann ist eben meine Frage, wie ich Python sagen kann, das in dem Dokument zwei verschiedene Zeichensätze verwendet werden und Python eben die richtigen Unicodezeichen zuordnet?
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Falls die IPA-Symbole als unicode daher kommen und nicht eine der anderen Mappingmethoden benutzt wird, könntest Du prüfen, ob für das jeweilige Unicodezeichen ein Symbol in Deiner Schrift definiert ist oder im Voraus die nicht belegten Bereiche ausschließen und mit der IPA-Schrift anzeigen lassen. Du müßtest dann allerdings jedes Zeichen einzeln prüfen, z.B. mit ord().

Falls nur rechtsseitig IPA-Symbole auftauchen, und hier nur IPA-Symbole, dann könntest Du am '=' die Zeichenkette aufteilen und linke und rechte Hälfte gesondert verarbeiten (z.B. mit unterschiedlichen Schriften anzeigen lassen usw.)

So richtig klar ist mir Dein Problem nicht, da die Schriftsache ja eher ein Anzeigeproblem ist und solange Du keine Gui baust, nicht weiter interessiert.

Edit:
War wohl etwas langsam....
Deinem Dokument ist nichts Helvetica oder CharisSIL "kodiert", das es sich hier nur um Schriften handelt. Eine Schrift ist nur für die Anzeige, und mappt stark vereinfacht einem Zeichen ein Symbol zu.

Die Zeichen selbst können wiederum verschieden kodiert sein, für IPA gibts da unterschiedliche Ansätze (hab ich jetzt auch nur aus dem Wikipediaartikel), wobei Du sicherlich mit unicode am einfachsten zum Ziel kommst.
Zuletzt geändert von jerch am Donnerstag 29. Oktober 2009, 18:04, insgesamt 1-mal geändert.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Loo.py hat geschrieben: Dabei ist Wort mittels dem Zeichensatz Helvetica geschrieben und Aussprache mittels dem CharisSIL Zeichensatz.
Ist die Datei schon "geschrieben" (also angelegt)? Wenn ja:Womit denn?

Willst Du diese Datei schreiben? Wenn ja, in welches Format? *.odt, *.doc, ...?
Loo.py
User
Beiträge: 9
Registriert: Donnerstag 29. Oktober 2009, 16:47

ok, ich hatte angefangen, sie anzulegen, und zwar ist das rtf (rich text format), wahrscheinlich ist das ein Problem,oder?
Ich habe eben versucht die gleiche Datei in ein normales Text Dokument von IDLE zu kopieren, und wieder diese leeren Quadrate an den Stellen der CharisSIL Zeichen.
Entschuldige, dass ich das gerade so wenig durchblicke!
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Die leeren Quadrate lassen sich am ehesten damit erklären, daß Deine IDLE-Schrift keine Symbole für die entsprechenden Unicodezeichen vorhält.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Entschuldige, dass ich das gerade so wenig durchblicke!
Ist doch kein Problem!

Wie ich in der deutschen Wikipedia grad sehe, wird da einiges imho zu sehr durcheinander gewürfelt oder gleich gesetzt.

Ich hätte jetzt einmal gesagt:

Zeichensatz != Zeichencodierung.

Anscheinend steht das dort anders oder zumindest teilweise verworren.

Ein Zeichensatz (wie Helvetica) ist einfach ein Mapping, das einem Zeichen eine Darstellung zuweist. So wird dem Zeichen "A" in Helvetica eben die gewisse Form des A's zugewiesen.

Das Zeichen "A" wiederum ist eben auch nur ein bestimmter Bytewert. Hier kommt es auf die Zeichencodiereung an! ASCII, UTF-8, Latin-1, ISO-8859-1, usw.

Wenn Du also einen Text in Python erstellst und in eine Textdatei schreibst, kannst Du die Zeichencodierung beeinflussen, nicht den Zeichensatz (den bestimmt der Editor, mit dem Du Dir das grafisch anguckst!).

Was mir nicht klar ist: Sind die IPA-Zeichen nun ein Zeichensatz (ähnlich wie Helvetica) oder eine Codierung (ähnlich wie ASCII oder UTF-8). Das müßte man zunächst einmal herausfinden!
Loo.py
User
Beiträge: 9
Registriert: Donnerstag 29. Oktober 2009, 16:47

Hi!

Ich habe das so verstanden, dass Unicode auch eine Zeichencodierung ist, die im Vergleich zu anderen Codierungen sehr viel mehr Zeichen erfassen kann.
Stimmt das?
Von diesen einzelnen Zeichencodierungen bilde ich dann auf die Zeichensätze ab.
Z.B. stellt Helvetica keine IPA Zeichen dar, wenn ich "Hochtaste s" eingebe, aber bei dem CharisSIL Zeichensatz kommt dann das Zeichen für den Laut "sch".
Ich habe das so verstanden, dass die IPA Zeichen einen Bereich innerhalb der Unicode Zeichen haben. Heißt das dann, dass sie eine Codierung sind?
Aber wie komme ich so der Lösung meines Problems näher?
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Du könnstest z.B. in IDLE Deine besagte Schrift zur Anzeige verwenden. Damit sollten die Symbole auch angezeigt werden. Die Schrift ist aber nicht monospaced, so daß es etwas komisch aussehen dürfte.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ok, klingt für mich halbwegs plausibel!

Naja, Du legst eben ein Dictionary in Python an, das Du entsprechend mit Werten füllst.

Dann schreibst Du das eben in eine Textdatei, die Deinem Muster entspricht.

Um eine Datei in einem bestimmten Format zu speichern, gibt es die Lib "codecs" und darin die open()-Funktion:

Code: Alles auswählen

# data = Deine Daten, vermutlich muss man die noch speziell formatieren im write()
# datei_name = String mit dem Namen der Datei
import codecs

try:
    with codecs.open(datei_name, "w", "utf-8") as out_file:
        out_file.write(data)
except IOError, e:
    print e
Intern musst Du mit Unicode arbeiten, nicht mit Bytes. Genaueres dazu findest Du zu Hauf in diesem Board und hier:
http://wiki.python-forum.de/Von%20Umlau ... 0Encodings

http://wiki.python-forum.de/User%20Grou ... folien.pdf

Wenn Du die beiden Links gelesen, ein wenig ausprobiert und verstanden hast, solltest Du das Problem lösen können :-)

Was natürlich bleibt: Wie formt man die Ausspracheseite bzw. wie gibt man die ein ;-)
Loo.py
User
Beiträge: 9
Registriert: Donnerstag 29. Oktober 2009, 16:47

Hi jerch!
Aber ich will ja gleichzeitig auch normale Schrift wie Helvetica anzeigen lassen, die dann aber ja in CharisSIL angezeigt wird.
Loo.py
User
Beiträge: 9
Registriert: Donnerstag 29. Oktober 2009, 16:47

Hi Hyperion,

danke, ich lese mir die Links mal durch!
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Loo.py hat geschrieben:Hi jerch!
Aber ich will ja gleichzeitig auch normale Schrift wie Helvetica anzeigen lassen, die dann aber ja in CharisSIL angezeigt wird.
Das ist doch aber keine Frage der Datei, sondern einer zusätzlichen "Stil"-Information!

Im ODF wird es wohl eine Info geben, die einem "Textblock" einen bestimmten Zeichensatz zuordnet. In HTML geht das ja auch:

Code: Alles auswählen

<p>
<span style="font-family: Helvetica;">Test=</span>
<span style="font-family: IPA-font-dings-bla;">Tɘst</span>
</p>
(Ich hab das "ɘ" nur genommen, damit klat wird, dass auf der rechten Seite ein anderes Zeichen steht, also auf der linken)

Die Darstellung ist eben Sache eines interpretierenden Programms - nicht von Python selber. Du musst eben wissen, was Dein Zielformat sein soll (HTML, ODT, ...).

In dem obigen HTML-Schnipsel stehen nur Zeichen (=Bytes) in einer bestimmten Codierung. Kein Helvetica oder sonst was.
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Loo.py hat geschrieben:Hi jerch!
Aber ich will ja gleichzeitig auch normale Schrift wie Helvetica anzeigen lassen, die dann aber ja in CharisSIL angezeigt wird.
Dafür brauchst Du einen Wordprozessor, der verschiedene Schriften nebeneinander anzeigen kann (Officeprogramme) oder Du müßtest Dir selbst etwas entsprechendes mit Hilfe eines Gui-Toolkits bauen (wx, Gtk oder Qt).
Mit Konsolen geht das nicht, da die in der Regel nur eine Standardschrift unterstützen.

Womit wir wieder bei der Frage wären, inwieweit Dir Python hierbei helfen soll (Selbstbauen eines solchen Textwidgets ist sicher nicht in Deinem Interesse.)

Wir reden hier irgendwie aneinander vorbei. :shock:
In jedem Falle brauchst Du für dieses Nebeneinander der Schriften Zusatzinformationen im Dokument, z.B. wie von Hyperion für odf gezeigt.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Hyperion hat geschrieben:Zeichensatz != Zeichencodierung.
Doch, ich würde schon sagen dass es ``==`` ist.
Hyperion hat geschrieben:Ein Zeichensatz (wie Helvetica) ist einfach ein Mapping, das einem Zeichen eine Darstellung zuweist. So wird dem Zeichen "A" in Helvetica eben die gewisse Form des A's zugewiesen.
Naja, Helvetica ist eine Schriftart (kein Zeichensatz), die entsprechenden Codepoints Glyphen zuordnet die man dann "anschauen" kann. Dabei kann es sein, dass eine Schriftart für bestimmte Codepoints keine passenden Glyphen hat, dann wird eben ein Ersatzzeichen dargestellt.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Leonidas hat geschrieben: Naja, Helvetica ist eine Schriftart (kein Zeichensatz), die entsprechenden Codepoints Glyphen zuordnet die man dann "anschauen" kann.
Ok, das kann ich so akzeptieren :-)

Aber die OP bezog sich dennoch zu Beginn auf die "IPA-Schriftart", nicht auf eine bestimmte Codierung dieser... zumindest habe ich das so verstanden.

Was wäre denn IPA dann eigentlich? Wenn es ein Zeichensatz ist und das == Zeichencodierung, so wäre es also tatsächlich vergleichbar mit ASCII und Konsorten?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Nein, IPA sind im Kontext von Unicode nur bestimmte Codepoints (so wie HOT SPRINGS oder EM DASH) die dann von Fonts als eben diese IPA-Glyphen dargestellt werden: zum Beispiel so einer: ʃ. Wenn deine Schriftart diesen Glyphen unterstützt, dann wird er dargestellt, ansonsten eben nicht. Genauso wie mit öäü auf Fonts, die keine Umlaute enthalten. Oder € bei nicht eurofähigen Schriftarten (etwa die aus der c't bekannte Schriftart Myriad in der nicht-Pro-Variante).
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Yay für HOT SPRINGS!
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Typographisch ist Glyphe != Graphem, siehe http://www.typolexikon.de/g/glyphe.html.

Strenggenommen kodieren Zeichensätze nur Bitrepäsentation=>Graphem(+ ein paar Steuerzeichen) und Schriften Graphem=>grafische Repräsentation (Glyphe). Wobei die Gestaltungsvarianten eines Graphems innerhalb einer Schrift die Glyphen sind.
Antworten