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
Datei einlesen, verschiedene Zeichensätze
- 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?
Vielleicht beschreibst Du noch einmal, was Du genau machen willst! Was hast Du vorliegen, was willst Du erreichen?
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?
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?
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.
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.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Ist die Datei schon "geschrieben" (also angelegt)? Wenn ja:Womit denn?Loo.py hat geschrieben: Dabei ist Wort mittels dem Zeichensatz Helvetica geschrieben und Aussprache mittels dem CharisSIL Zeichensatz.
Willst Du diese Datei schreiben? Wenn ja, in welches Format? *.odt, *.doc, ...?
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!
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!
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Ist doch kein Problem!Entschuldige, dass ich das gerade so wenig durchblicke!
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!
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?
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?
- 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:
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
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
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
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Das ist doch aber keine Frage der Datei, sondern einer zusätzlichen "Stil"-Information!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.
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>
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.
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).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.
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.
In jedem Falle brauchst Du für dieses Nebeneinander der Schriften Zusatzinformationen im Dokument, z.B. wie von Hyperion für odf gezeigt.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Doch, ich würde schon sagen dass es ``==`` ist.Hyperion hat geschrieben:Zeichensatz != Zeichencodierung.
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.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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Ok, das kann ich so akzeptierenLeonidas hat geschrieben: Naja, Helvetica ist eine Schriftart (kein Zeichensatz), die entsprechenden Codepoints Glyphen zuordnet die man dann "anschauen" kann.
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?
-
- 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
- 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!
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.
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.