Wie findet man Akzentzeichen in einer Zeichenkette in Python?

8

Ich habe eine Datei mit Sätzen, von denen einige auf Spanisch sind und Akzentbuchstaben (z. B. é) oder Sonderzeichen (z. B. ¿) enthalten. Ich muss in der Lage sein, nach diesen Zeichen im Satz zu suchen, damit ich feststellen kann, ob der Satz in Spanisch oder Englisch ist.

Ich habe mein Bestes versucht, um das zu erreichen, aber ich hatte kein Glück, es richtig zu machen. Unten ist eine der Lösungen, die ich versucht habe, aber eindeutig die falsche Antwort gegeben hat.

%Vor%

Ich habe auch versucht, codecs.open (.., .., 'latin-1') zu verwenden, um stattdessen die Datei einzulesen, aber das hat nicht geholfen. Dann habe ich versucht, Code ('latin-1') zu schreiben, und das hat nicht funktioniert.

Ich habe hier keine Ideen mehr, irgendwelche Vorschläge?

@ickttoofay lieferte die Lösung. Ich habe die Dekodierung der Datei beibehalten (mit latin-1), aber dann den Python-Unicode für die Zeichen verwendet ( u'é' ). Daher musste ich die Python-Unicode-Codierung oben im Skript festlegen. Der letzte Schritt bestand darin, die unicodedata.normalize -Methode zu verwenden, um beide Zeichenfolgen zu normalisieren und dann entsprechend zu vergleichen. Vielen Dank für die schnelle und großartige Unterstützung.

    
user1411331 10.11.2012, 20:22
quelle

2 Antworten

5

Verwenden Sie unicodedata.normalize in der Zeichenfolge, bevor Sie sie überprüfen.

Erklärung

Unicode bietet mehrere Formulare zum Erstellen einiger Zeichen. Zum Beispiel könnte á mit einem einzelnen Zeichen, á , oder zwei Zeichen dargestellt werden: a , dann 'fügen Sie ´ hinzu'. Wenn Sie die Zeichenfolge normalisieren, wird sie auf die eine oder die andere der Darstellungen gezwungen. (Welche Darstellung normalisiert wird, hängt davon ab, was Sie als Parameter form übergeben)

    
icktoofay 10.11.2012 20:24
quelle
0

Ich vermute, dass Ihr Terminal UTF-8 verwendet, daher ist 'é'.decode('latin-1') falsch. Verwenden Sie stattdessen eine Unicode-Konstante statt u'é' .

Um Unicode in einem Skript korrekt zu behandeln, deklarieren Sie die Codierungen für das Skript und die Datendatei, dekodieren Sie eingehende Daten und kodieren Sie ausgehende Daten. Verwenden von Unicode-Zeichenfolgen für Text im Skript.

Beispiel (Skript in UTF-8 speichern):

%Vor%

Beachten Sie, dass print implizit die Ausgabe in der Terminalcodierung codiert.

    
Mark Tolonen 11.11.2012 19:37
quelle

Tags und Links