Ich bin neu bei Python und benutze es, um nltk in meinem Projekt zu verwenden. Nachdem ich die von einer Webseite erhaltenen Rohdaten mit einem Wort versehen habe, habe ich eine Liste mit '\ xe2', '\ xe3', '\ x98' usw .aber ich brauche diese nicht und möchte sie löschen.
Ich habe es einfach versucht
%Vor%und
%Vor%und es gibt mir eine Fehlermeldung mit ungültigem \ x escape
Aber wenn ich einen regulären Ausdruck versuche
%Vor%ich bekomme
%Vor%sogar re.search ('^ \\ x', a) identifiziert es nicht.
Ich bin davon verwirrt, sogar googeln half nicht (ich könnte etwas vermissen). Bitte schlagen Sie einen einfachen Weg vor, um solche Zeichenfolgen aus der Liste zu entfernen und was mit dem oben genannten falsch war.
Vielen Dank im Voraus!
Hier hilft es, den Unterschied zwischen einem String-Literal und einem String zu verstehen.
Ein Zeichenfolgenliteral ist eine Zeichenfolge in Ihrem Quellcode . Wenn er vom Python-Interpreter analysiert und kompiliert wird, erzeugt er eine Zeichenkette , die eine Folge von Zeichen in Speicher ist.
Beispielsweise erzeugt das String-Literal "
a
"
die Zeichenfolge a
.
String-Literale können eine Reihe von Formen annehmen. Alle erzeugen den gleichen String a
:
Quellcode ist traditionell nur ASCII-Code, aber wir möchten, dass er Zeichenfolgenliterale enthält, die Zeichen jenseits von ASCII erzeugen können. Dazu kann escape verwendet werden. Beispielsweise erzeugt das Zeichenfolgenliteral "\xe2"
eine Zeichenfolge mit einem einzelnen Zeichen mit einem Ganzzahlwert E2 hexadezimal oder 226 dezimal.
Dies erklärt den Fehler, dass "\x"
eine ungültige Escape ist: Der Parser erwartet, dass Sie den hexadezimalen Wert eines Zeichens angeben.
Um zu erkennen, ob eine Zeichenfolge Zeichen in einem bestimmten Bereich enthält, können Sie eine Regex mit einer Zeichenklasse verwenden, die die untere und obere Grenze der Zeichen angibt, die Sie nicht möchten:
%Vor% '\xe2'
ist ein Zeichen, \x
ist eine Escape-Sequenz gefolgt von einer Hex-Zahl und wird verwendet, um ein Byte wörtlich anzugeben.
Das bedeutet, dass Sie den gesamten Ausdruck angeben müssen:
Weitere Informationen finden Sie in den Python-Dokumenten .
Ich sehe, dass andere Antworten eine gute Arbeit geleistet haben, Ihre Verwirrung in Bezug auf '\x'
zu erklären, aber während Sie vorschlagen, dass Sie Nicht-ASCII-Zeichen möglicherweise nicht vollständig entfernen möchten, haben Sie keine spezielle Methode zur weiteren Normalisierung bereitgestellt solche Entfernung.
Wenn Sie ein "einigermaßen nahes ASCII-Zeichen" erhalten möchten (z. B. Akzente aus Buchstaben entfernen, aber den darunter liegenden Buchstaben & amp; c lassen), diese SO-Antwort kann helfen - der Code in der akzeptierten Antwort, der nur das Standard-Python verwendet Bibliothek, ist:
%Vor%Natürlich müssen Sie diese Funktion auf jedes Zeichenfolgenelement in der Liste anwenden, die Sie im Titel angeben, z. B.
%Vor% Wenn alle Elemente in mylist
Strings sind.
Lasst uns zurückstehen und darüber ein wenig nachdenken ...
Sie verwenden nltk (Natural Language Toolkit), um (vermutlich) die natürliche Sprache zu parsen.
Ihr '\xe2'
repräsentiert höchstwahrscheinlich U + 00E2 LATIN KLEINER BRIEF A MIT CIRCUMFLEX (â).
Ihr '\xe3'
steht höchstwahrscheinlich für U + 00E3 LATIN KLEINER BUCHSTABE A MIT TILDE (ã).
Sie sehen für mich wie Briefe in natürlicher Sprache aus. Bist du sicher, dass du sie nicht brauchst?