Ich möchte, dass meine Python-Funktion einen Satz (Eingabe) teilt und jedes Wort in einer Liste speichert. Mein aktueller Code teilt den Satz, speichert die Wörter jedoch nicht als Liste. Wie mache ich das?
def split_line(text):
# split the text
words = text.split()
# for each word in the line:
for word in words:
# print the word
print(words)
python
list
split
text-segmentation
Danke
quelle
quelle
print(word)
als letzte Zeile verwenden.Antworten:
Dies sollte ausreichen, um jedes Wort in einer Liste zu speichern.
words
ist bereits eine Liste der Wörter aus dem Satz, so dass die Schleife nicht erforderlich ist.Zweitens könnte es ein Tippfehler sein, aber Sie haben Ihre Schleife ein wenig durcheinander. Wenn Sie wirklich append verwenden wollten, wäre es:
nicht
quelle
Teilt die Zeichenfolge in
text
aufeinanderfolgende Leerzeichenläufe auf.Teilen Sie die Zeichenfolge
text
am Trennzeichen auf :","
.Die Wortvariable ist a
list
und enthält die Wörter aus demtext
geteilten Trennzeichen.quelle
str.split ()
quelle
Je nachdem, was Sie mit Ihrem Satz als Liste vorhaben, sollten Sie sich das Natural Language Took Kit ansehen . Es befasst sich stark mit Textverarbeitung und Auswertung. Sie können es auch verwenden, um Ihr Problem zu lösen:
Dies hat den zusätzlichen Vorteil, dass Interpunktion aufgeteilt wird.
Beispiel:
Auf diese Weise können Sie nicht gewünschte Interpunktion herausfiltern und nur Wörter verwenden.
Bitte beachten Sie, dass die anderen verwendeten Lösungen
string.split()
besser sind, wenn Sie keine komplexe Manipulation des Satzes planen.[Bearbeitet]
quelle
split()
stützt sich auf Leerzeichen als Trennzeichen, sodass keine getrennten Wörter getrennt werden können - und durch lange Striche getrennte Phrasen können auch nicht getrennt werden. Und wenn der Satz eine Interpunktion ohne Leerzeichen enthält, bleiben diese nicht haften. Für jede reale Textanalyse (wie für diesen Kommentar) ist Ihr nltk-Vorschlag viel besser als split () `.','
und"'s"
sind keine Wörter. Wenn Sie den obigen Satz interpunktionsbewusst in "Wörter" aufteilen möchten, möchten Sie normalerweise das Komma entfernen und"fox's"
als einzelnes Wort erhalten.Wie wäre es mit diesem Algorithmus? Teilen Sie Text auf Leerzeichen und schneiden Sie dann die Interpunktion. Dadurch wird die Interpunktion sorgfältig vom Rand der Wörter entfernt, ohne dass Apostrophe in Wörtern wie z
we're
.quelle
e.g.
undMrs.
und der nachfolgende Apostroph im Possessivfrogs'
(wie infrogs' legs
) Teil des Wortes, werden jedoch durch diesen Algorithmus entfernt. Handhabungs Abkürzungen korrekt werden grob durch Erfassen Punkte getrennten initialisms erreicht und ein Wörterbuch von Spezialfällen verwendet (wieMr.
,Mrs.
). Das Unterscheiden von Possessivapostrophen von einfachen Anführungszeichen ist dramatisch schwieriger, da die Grammatik des Satzes, in dem das Wort enthalten ist, analysiert werden muss.Die
str().split()
Methode führt dies aus, nimmt eine Zeichenfolge und teilt sie in eine Liste auf:Das Problem, das Sie haben, ist ein Tippfehler, den Sie geschrieben haben,
print(words)
anstattprint(word)
:Wenn Sie die
word
Variable in umbenennencurrent_word
, haben Sie Folgendes:..wenn Sie hätten tun sollen:
Wenn Sie aus irgendeinem Grund eine Liste in der for-Schleife manuell erstellen möchten, verwenden Sie die
append()
Listenmethode, möglicherweise weil Sie alle Wörter (zum Beispiel) in Kleinbuchstaben schreiben möchten:Oder eher ein bisschen ordentlicher, mit einem Listenverständnis :
quelle
Shlex hat eine
.split()
Funktion. Es unterscheidet sich davon,str.split()
dass es keine Anführungszeichen beibehält und eine zitierte Phrase als ein einziges Wort behandelt:quelle
Wenn Sie alle Zeichen eines Wortes / Satzes in einer Liste haben möchten , gehen Sie folgendermaßen vor:
quelle
Ich denke, Sie sind wegen eines Tippfehlers verwirrt.
Ersetzen Sie
print(words)
durchprint(word)
innerhalb Ihrer Schleife, damit jedes Wort in einer anderen Zeile gedruckt wirdquelle