2016-10-09 2 views
1

In Python muss ich fast alle Satzzeichen aus einer Liste entfernen, aber Punkte und Kommas speichern. Soll ich eine Funktion erstellen, um dies oder eine Variable zu machen? Grundsätzlich möchte ich alle Symbole außer Buchstaben (ich habe bereits Großbuchstaben in Kleinbuchstaben konvertiert) und Punkte und Kommas (und vielleicht Apostrophe) löschen.Entfernen von Satzzeichen/Symbolen aus einer Liste mit Python mit Ausnahme von Punkten, Kommas

#Clean tokens up (remove symbols except ',' and '.') 

def depunctuate() 
    clean_tokens = [] 

    for i in lc_tokens: 
     if (i not in [a-z.,]) 
     ... 

Antwort

0
import string 

# Create a set of all allowed characters. 
# {...} is the syntax for a set literal in Python. 
allowed = {",", "."}.union(string.ascii_lowercase) 

# This is our starting string. 
lc_tokens = 'hello, "world!"' 

# Now we use list comprehension to only allow letters in our allowed set. 
# The result of list comprehension is a list, so we use "".join(...) to 
# turn it back into a string. 
filtered = "".join([letter for letter in lc_tokens if letter in allowed]) 

# Our final result has everything but lowercase letters, commas, and 
# periods removed. 
assert filtered == "hello,world" 
+0

Dies entfernt nicht nur ungewollte (Satzzeichen) Symbole, sondern auch Leerzeichen und Nicht-ASCII-Buchstaben, wodurch Wörter wie "naiv" in "Kirchenschiff" verwandelt werden. – lenz

+0

Ja, das erlaubt nur ASCII-Kleinbuchstaben plus die wenigen erwähnten Interpunktionszeichen. Das war meine Interpretation der Anforderungen, aber es hängt stark davon ab, was der Fragesteller meinte, wenn er das Wort "Buchstaben" benutzte. Die andere Antwort hat ein ähnliches Problem; Es entfernt Dinge in 'string.punctuation', aber es ist unklar, ob das alle" Symbole "abdeckt, die der ursprüngliche Fragesteller entfernen möchte. – smarx

+0

Sie haben Recht, "string.punctuation" fehlt auch eine Menge von Interpunktionszeichen, z. schicke Anführungszeichen. Trotzdem denke ich, dass "Buchstaben" und "Interpunktionszeichen" ziemlich gut definierte Kategorien sind (und eigentlich ziemlich einfach über die Unicode-Zeicheneigenschaften zu überprüfen sind). – lenz

2

Sie eine Reihe von unerwünschten Interpunktion aus string.punctuation bauen kann -, die einen String mit Interpunktion liefert, und dann eine Liste Verständnis verwenden, um die Buchstaben im Set enthaltenen herauszufiltern:

import string 

to_delete = set(string.punctuation) - {'.', ','} # remove comma and fullstop 
clean_tokens = [x for x in lc_tokens if x not in to_delete] 
+0

Danke. Sieht so aus, als ob das wie ein Zauber funktioniert. ^^ –

Verwandte Themen