Je souhaite 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)
text.split()
Cela devrait suffire à stocker chaque mot dans une liste. words
est déjà une liste des mots de la phrase, la boucle n'est donc pas nécessaire.
Deuxièmement, il s’agit peut-être d’une faute de frappe, mais votre boucle est un peu foirée. Si vous vouliez vraiment utiliser append, ce serait:
words.append(Word)
ne pas
Word.append(words)
Fractionne la chaîne dans text
sur toutes les exécutions consécutives d'espaces.
words = text.split()
Fractionner la chaîne dans text
sur le délimiteur: ","
.
words = text.split(",")
La variable mots sera une variable list
et contiendra les mots de la division text
sur le délimiteur.
Retourne une liste des mots dans la chaîne, en utilisant sep comme délimiteur ... Si sep n'est pas spécifié ou vaut Aucun, un algorithme de fractionnement différent est utilisé. Appliqué: les espaces blancs consécutifs sont considérés comme un séparateur unique et le résultat ne contiendra aucune chaîne vide au début ou à la fin si la chaîne comporte des espaces de début ou de fin.
>>> line="a sentence with a few words"
>>> line.split()
['a', 'sentence', 'with', 'a', 'few', 'words']
>>>
Selon ce que vous envisagez de faire avec votre phrase sous forme de liste, vous pouvez consulter le Kit de prise en langage naturel . Il traite beaucoup du traitement et de l'évaluation du texte. Vous pouvez également l'utiliser pour résoudre votre problème:
import nltk
words = nltk.Word_tokenize(raw_sentence)
Cela présente l’avantage supplémentaire de séparer la ponctuation.
Exemple:
>>> import nltk
>>> s = "The fox's foot grazed the sleeping dog, waking it."
>>> words = nltk.Word_tokenize(s)
>>> words
['The', 'fox', "'s", 'foot', 'grazed', 'the', 'sleeping', 'dog', ',',
'waking', 'it', '.']
Cela vous permet de filtrer toute ponctuation que vous ne voulez pas et d'utiliser uniquement des mots.
Veuillez noter que les autres solutions utilisant string.split()
sont meilleures si vous n'envisagez aucune manipulation complexe de la phrase.
[Édité]
Que diriez-vous de cet algorithme? Fractionner le texte sur les espaces, puis couper la ponctuation. Cela supprime soigneusement la ponctuation du bord des mots, sans nuire aux apostrophes à l'intérieur de mots tels que we're
.
>>> text
"'Oh, you can't help that,' said the Cat: 'we're all mad here. I'm mad. You're mad.'"
>>> text.split()
["'Oh,", 'you', "can't", 'help', "that,'", 'said', 'the', 'Cat:', "'we're", 'all', 'mad', 'here.', "I'm", 'mad.', "You're", "mad.'"]
>>> import string
>>> [Word.strip(string.punctuation) for Word in text.split()]
['Oh', 'you', "can't", 'help', 'that', 'said', 'the', 'Cat', "we're", 'all', 'mad', 'here', "I'm", 'mad', "You're", 'mad']
Je veux que ma fonction python divise une phrase (entrée) et stocke chaque mot dans une liste
La méthode str().split()
le fait, elle prend une chaîne, la scinde en une liste:
>>> the_string = "this is a sentence"
>>> words = the_string.split(" ")
>>> print(words)
['this', 'is', 'a', 'sentence']
>>> type(words)
<type 'list'> # or <class 'list'> in Python 3.0
Le problème que vous rencontrez est dû à une faute de frappe, vous avez écrit print(words)
au lieu de print(Word)
:
Renommer la variable Word
en current_Word
, voici ce que vous aviez:
def split_line(text):
words = text.split()
for current_Word in words:
print(words)
..quand vous auriez dû faire:
def split_line(text):
words = text.split()
for current_Word in words:
print(current_Word)
Si, pour une raison quelconque, vous souhaitez créer manuellement une liste dans la boucle for, vous utiliseriez la méthode list append()
, peut-être parce que vous souhaitez mettre tous les mots en minuscule (par exemple):
my_list = [] # make empty list
for current_Word in words:
my_list.append(current_Word.lower())
Ou plus un peu plus propre, en utilisant un list-comprehension :
my_list = [current_Word.lower() for current_Word in words]
Si vous voulez tous les caractères d'un Word/phrase dans une liste, faites ceci:
print(list("Word"))
# ['w', 'o', 'r', 'd']
print(list("some sentence"))
# ['s', 'o', 'm', 'e', ' ', 's', 'e', 'n', 't', 'e', 'n', 'c', 'e']
Je pense que vous êtes confus à cause d'une faute de frappe.
Remplacez print(words)
par print(Word)
dans votre boucle pour que chaque mot soit imprimé sur une ligne différente.