comment faire pour supprimer "\xe2' partir d'une liste
Je suis nouveau sur le python et je suis aide à l'utilisation nltk dans mon projet.Après le mot-segmentation des données brutes obtenues à partir d'une page web j'ai une liste contenant '\xe2' ,'\xe3','\x98", etc.Cependant je n'ai pas besoin et que vous voulez supprimer.
J'ai simplement essayé
if '\x' in a
et
if a.startswith('\xe')
et il me donne un message d'erreur indiquant invalide \x échapper
Mais lorsque je tente une expression régulière
re.search('^\\x',a)
- je obtenir
Traceback (most recent call last):
File "<pyshell#83>", line 1, in <module>
print re.search('^\\x',a)
File "C:\Python26\lib\re.py", line 142, in search
return _compile(pattern, flags).search(string)
File "C:\Python26\lib\re.py", line 245, in _compile
raise error, v # invalid expression
error: bogus escape: '\\x'
même ré.recherche ("^\\x',a) n'est pas de l'identifier.
Je suis confus par ce,même googler na pas aider(j'ai peut-être raté quelque chose).Veuillez suggérer un moyen simple de supprimer les chaînes de la liste et ce qui n'allait pas avec ce qui précède.
Merci d'avance!
OriginalL'auteur silentNinJa | 2010-07-25
Vous devez vous connecter pour publier un commentaire.
Ça aide à comprendre la différence entre un littéral de chaîne et d'une chaîne.
Un littéral de chaîne est une séquence de caractères dans votre code source. Lorsque analysées et compilées par l'interpréteur Python, il produit un chaîne, qui est une séquence de caractères dans mémoire.
Par exemple, la chaîne littérale
"
a
"
produit la chaînea
.Les littéraux de chaîne peuvent prendre plusieurs formes. L'ensemble de ces produire la même chaîne
a
:Code Source est traditionnellement ASCII seulement, mais nous aimerions qu'elle contient de littéraux de chaîne qui peut produire des caractères au-delà de l'ASCII. Pour ce faire échappe peut être utilisé. Par exemple, la chaîne littérale
"\xe2"
produit une unique chaîne de caractères, avec un caractère à la valeur entière E2 hexadécimal, soit 226 décimal.C'est ce qui explique l'erreur sur
"\x"
être une défaillance de s'échapper: l'analyseur vous attend pour spécifier la valeur hexadécimale d'un caractère.Pour détecter si une chaîne a tous les caractères dans une certaine plage, vous pouvez utiliser une regex avec une classe de caractères spécifiant les limites inférieure et supérieure des caractères que vous ne voulez pas:
OriginalL'auteur Ned Batchelder
Vous pouvez utiliser
unicode(a, 'ascii', 'ignore')
pour supprimer tous les caractères non-ascii dans la chaîne de caractères à la fois.J'aime bien cette solution, mais connaissez-vous une seule ligne de remplacement pour Python 3?
OriginalL'auteur cypheon
'\xe2'
est un caractère,\x
est une séquence d'échappement qui est suivie par un nombre hexadécimal et utilisé pour spécifier un octet littéralement.Cela signifie que vous devez spécifier l'ensemble de l'expression:
Plus d'informations peuvent être trouvées dans le Python docs.
OriginalL'auteur abyx
Je vois d'autres réponses ont fait un bon travail en expliquant votre confusion en ce qui concerne
'\x'
, mais tout en suggérant que vous ne pouvez pas supprimer complètement les caractères non-ASCII, n'ont pas fourni d'une manière spécifique de faire d'autres normalisation-delà d'un tel retrait.Si vous souhaitez obtenir des "raisonnablement proche de caractères ASCII" (par exemple, la bande des accents de lettres, mais de laisser le sous-jacent lettre, &c), cette SORTE de réponse peut aider, le code de la accepté de répondre, uniquement à l'aide de la bibliothèque standard de Python, est:
Bien sûr, vous aurez besoin d'appliquer cette fonction à chaque chaîne de l'élément dans la liste que vous mentionnez dans le titre, l'e.g
si tous les éléments de la
mylist
sont des chaînes de caractères.OriginalL'auteur Alex Martelli
Prenons du recul et de réfléchir à ce un peu ...
Vous utilisez nltk (natural language toolkit) pour analyser (sans doute) de la langue naturelle.
Votre
'\xe2'
est très susceptible de représenter U+00E2 LETTRE minuscule LATINE A AVEC un accent CIRCONFLEXE (â).Votre
'\xe3'
est très susceptible de représenter U+00E3 LETTRE minuscule LATINE AVEC UN TILDE (ã).Ils ressemblent à de la langue naturelle des lettres pour moi. Êtes-vous SÛR que vous n'en avez pas besoin?
Vous utilisez nltk pour extraire les numéros?? (2) "Latin" ne signifie pas "accentués"; presque tous les personnages dans votre commentaire sont des "latins" (3) Si vous procédez à l'extraction des numéros seulement, il n'a pas d'importance si le
'a'
lettres dans'abracadabra'
ont des accents ou pas; vous n'avez pas besoin de supprimer les caractères que vous ne voulez pas extraire les caractères que vous voulez. Vous devriez peut-être poser une autre question en décrivant ce que vous essayez de faire.OriginalL'auteur John Machin
Si vous voulez seulement d'entrer dans ce schéma et d'éviter l'erreur,
vous pouvez essayer d'insérer un + entre \ et x comme ici:
OriginalL'auteur dominique