Je veux que ma fonction Python divise une phrase (entrée) et stocke chaque mot dans une liste. Mon code actuel divise la phrase, mais ne stocke pas les mots sous forme de liste. Comment je fais ça?
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)
print(word)
comme dernière ligne.Réponses:
Cela devrait être suffisant pour stocker chaque mot dans une liste.
words
est déjà une liste des mots de la phrase, il n'y a donc pas besoin de la boucle.Deuxièmement, ce pourrait être une faute de frappe, mais votre boucle est un peu fouillie. Si vous vouliez vraiment utiliser append, ce serait:
ne pas
la source
Fractionne la chaîne
text
sur toutes les séquences consécutives d'espaces.Diviser la chaîne dans
text
le delimiter:","
.La variable mots sera a
list
et contiendra les mots detext
split sur le délimiteur.la source
str.split ()
la source
Selon ce que vous prévoyez de faire avec votre phrase sous forme de liste, vous voudrez peut-être consulter le Kit de langage naturel . Il traite fortement du traitement et de l'évaluation du texte. Vous pouvez également l'utiliser pour résoudre votre problème:
Cela a l'avantage supplémentaire de fractionner la ponctuation.
Exemple:
Cela vous permet de filtrer toute ponctuation dont vous ne voulez pas et d'utiliser uniquement des mots.
Veuillez noter que les autres solutions utilisant
string.split()
sont meilleures si vous ne prévoyez pas de faire une manipulation complexe de la phrase.[Édité]
la source
split()
s'appuie sur un espace blanc comme séparateur, il ne parviendra donc pas à séparer les mots avec trait d'union - et les phrases séparées par des tirets longs ne se sépareront pas également. Et si la phrase contient une ponctuation sans espaces, ceux-ci ne colleront pas. Pour toute analyse de texte du monde réel (comme pour ce commentaire), votre suggestion nltk est bien meilleure que split () `.','
et"'s"
ne sont pas des mots. Normalement, si vous souhaitez diviser la phrase ci-dessus en "mots" d'une manière sensible à la ponctuation, vous voudrez supprimer la virgule et obtenir"fox's"
un seul mot.Et cet algorithme? Fractionnez le texte sur un espace, puis coupez la ponctuation. Cela supprime soigneusement la ponctuation du bord des mots, sans nuire aux apostrophes à l'intérieur de mots tels que
we're
.la source
e.g.
etMrs.
et l'apostrophe de fin dans le possessiffrogs'
(comme dansfrogs' legs
) font partie du mot, mais seront supprimés par cet algorithme. Les abréviations bon déroulement peuvent être plus ou moins atteints par la détection de sigles de points séparés , plus en utilisant un dictionnaire de cas particuliers (commeMr.
,Mrs.
). Il est beaucoup plus difficile de distinguer les apostrophes possessives des guillemets simples, car cela nécessite d'analyser la grammaire de la phrase dans laquelle le mot est contenu.La
str().split()
méthode fait cela, elle prend une chaîne, la divise en une liste:Le problème que vous rencontrez est dû à une faute de frappe, vous avez écrit
print(words)
au lieu deprint(word)
:En renommant la
word
variablecurrent_word
, voici ce que vous aviez:..quand vous auriez dû faire:
Si, pour une raison quelconque, vous souhaitez construire manuellement une liste dans la boucle for, vous utiliserez la
append()
méthode list , peut-être parce que vous voulez mettre en minuscule tous les mots (par exemple):Ou plus un peu plus net, en utilisant une liste de compréhension :
la source
shlex a une
.split()
fonction. Il diffère dustr.split()
fait qu'il ne conserve pas les guillemets et traite une phrase citée comme un seul mot:la source
Si vous voulez tous les caractères d'un mot / phrase dans une liste, procédez comme suit:
la source
Je pense que vous êtes confus à cause d'une faute de frappe.
Remplacez-le
print(words)
par l'print(word)
intérieur de votre boucle pour que chaque mot soit imprimé sur une ligne différentela source