Python: Ersetzen Sie typografische Anführungszeichen, Bindestriche usw. durch ihre Ascii-Entsprechungen

9

Auf meiner Website können Leute Nachrichten veröffentlichen, und einige Redakteure benutzen MS Word und ähnliche Tools, um den Text zu schreiben und dann kopieren und in den Editor meiner Website einfügen (einfache Textarea, kein WYSIWYG usw.).

Diese Texte enthalten normalerweise "nette" Anführungszeichen anstelle der einfachen ASCII-Anführungszeichen ( " ). Sie enthalten manchmal auch längere Bindestriche wie anstelle von - .

Nun möchte ich alle diese Zeichen durch ihre ASCII-Gegenstücke ersetzen. Ich möchte jedoch keine Umlaute und andere nicht-ASCII-Zeichen entfernen. Ich würde auch sehr gerne eine geeignete Lösung verwenden, die kein Mapping-Diktat für all diese Zeichen erstellt.

Alle meine Strings sind Unicode-Objekte.

    
ThiefMaster 24.04.2012, 08:04
quelle

5 Antworten

0

Sie können die Methode str.translate () verwenden ( Ссылка ). Lesen Sie jedoch das Dokument zu Unicode - die Übersetzungstabelle hat eine andere Form: Unicode Ordnungszahl - & gt; Unicode-String (normalerweise char) oder None.

Nun, aber es erfordert das Diktat. Sie müssen die Ersetzungen trotzdem erfassen. Wie möchten Sie das ohne Tabellen oder Arrays tun? Sie könnten str.replace () für die einzelnen Zeichen verwenden, aber das wäre ineffizient.

    
pepr 24.04.2012 10:01
quelle
0

Was ist damit? Es erstellt zuerst Übersetzungstabelle, aber ehrlich gesagt glaube ich nicht, dass Sie das ohne es tun können.

%Vor%

Ich konnte diesen Druck nicht auf einer Konsole (unter Windows) ausführen, daher musste ich in die txt-Datei schreiben.
Die Ausgabe in der a.txt-Datei sieht folgendermaßen aus:

  

a_str="lustige single quotes" lange und kurze Striche 'nette Single   Zitate '"schöne doppelte Anführungszeichen" fixed_str =' lustige einfache Anführungszeichen '   lang - und - kurze Striche "schöne einfache Anführungszeichen" "schöne doppelte Anführungszeichen"

Übrigens funktioniert der obige Code in Python 3. Wenn Sie ihn für Python 2 benötigen, müssen möglicherweise einige Korrekturen vorgenommen werden, da die Unicode-Zeichenfolgen in beiden Versionen der Sprache anders gehandhabt werden.

    
Mateo 06.01.2017 23:49
quelle
0

Sie können auf dem Unidecode -Paket aufbauen.

Das ist ziemlich langsam, da wir zuerst den Unicode in der kombinierten Form normalisieren und dann versuchen herauszufinden, woraus der Unidecode besteht. Wenn wir einen lateinischen Buchstaben verwenden, verwenden wir tatsächlich das ursprüngliche NFC-Zeichen. Wenn nicht, dann liefern wir den Entschlüsselungscode, den Unidecode vorgeschlagen hat. Dies lässt akzentuierte Buchstaben allein, aber wird alles andere konvertieren.

%Vor%     
Rich L 04.09.2017 17:45
quelle
0

Es gibt keine solche "richtige" Lösung, weil für jedes gegebene Unicode-Zeichen kein "ASCII-Gegenstück" definiert ist.

Nehmen Sie beispielsweise die scheinbar einfachen Zeichen, die Sie ASCII-Anführungszeichen und doppelten Anführungszeichen und Bindestrichen zuordnen möchten. Lassen Sie zunächst alle Unicode-Zeichen mit ihren offiziellen Namen generieren. Zweitens, lassen Sie alle Anführungszeichen, Bindestriche und Bindestriche nach den Namen suchen:

%Vor%

Wie Sie sehen können, gibt es viele Probleme, so einfach dieses Beispiel ist. Es gibt viele Anführungszeichen in Unicode, die nicht so aussehen wie die Anführungszeichen in US-ASCII, und in Unicode gibt es viele Bindestriche, die in US-ASCII nicht wie das Bindestrich-Minus-Zeichen aussehen.

Und es gibt viele Fragen. Zum Beispiel:

  • sollte das "SWUNG DASH" (⁓) -Symbol durch einen ASCII-Bindestrich (-) oder eine Tilde (~) ersetzt werden?
  • sollte die "CANADIAN SYLLABICS HYPHEN" (᐀) durch einen ASCII-Bindestrich (-) oder ein Gleichheitszeichen (=) ersetzt werden?
  • sollte die "EINZELN LINKE WINKELQUOTATIONSMARKIERUNG" (<) durch ein ASCII-Anführungszeichen ("), ein Apostroph (') oder ein Kleiner-als-Zeichen (& lt;)?
  • ersetzt werden

Um ein "korrektes" ASCII-Gegenstück zu erstellen, muss jemand diese Fragen basierend auf dem Verwendungskontext beantworten. Aus diesem Grund basieren alle Lösungen für Ihr Problem auf der einen oder anderen Weise auf einem Mapping-Wörterbuch. Und all diese Lösungen werden zu unterschiedlichen Ergebnissen führen.

    
Andriy Makukha 23.02.2018 11:06
quelle
-2

Dieses Werkzeug normalisiert die Interpunktion im Markdown: Ссылка

  

-S, --smart Produziert typografisch korrekte Ausgabe, konvertiert gerade Zitate in geschweifte Anführungszeichen, --- in em-Bindestriche, - in Bindestriche,   und ... zu Ellipsen. Nichtbrechende Leerzeichen werden nach bestimmten Kriterien eingefügt   Abkürzungen wie "Mr." (Hinweis: Diese Option ist nur wichtig   wenn das Eingabeformat Markdown oder Textil ist. Es ist ausgewählt   automatisch, wenn das Eingabeformat Textil oder das Ausgabeformat ist   Latex oder Kontext.)

Es ist Haskell, also müssen Sie die Schnittstelle herausfinden.

    
Marcin 24.04.2012 08:36
quelle

Tags und Links