Ich schreibe eine Python-Funktion, um Text in Wörter zu teilen und angegebene Interpunktion zu ignorieren. Hier ist ein funktionierender Code. Ich bin nicht davon überzeugt, dass das Konstruieren von Strings aus Listen (buf = [] im Code) effizient ist. Hat jemand einen Vorschlag für einen besseren Weg?Effektiver Weg, um eine Zeichenfolge in Python iterativ anzuhängen?
def getwords(text, splitchars=' \t|!?.;:"'):
"""
Generator to get words in text by splitting text along specified splitchars
and stripping out the splitchars::
>>> list(getwords('this is some text.'))
['this', 'is', 'some', 'text']
>>> list(getwords('and/or'))
['and', 'or']
>>> list(getwords('one||two'))
['one', 'two']
>>> list(getwords(u'hola unicode!'))
[u'hola', u'unicode']
"""
splitchars = set(splitchars)
buf = []
for char in text:
if char not in splitchars:
buf.append(char)
else:
if buf:
yield ''.join(buf)
buf = []
# All done. Yield last word.
if buf:
yield ''.join(buf)
Schade ... Also hier war jemand, der die beste Antwort gab und sagte, dass der eingebaute Splitter mehr als einen Splitchar setzen konnte. Sie sagten, sein Code sei hässlich, er löschte seine Nachricht. – fulmicoton