web-dev-qa-db-fra.com

Comment diviser une chaîne en une liste?

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)
533
Thanx
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)
458
nstehr

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.

427
zalew

str.split ()

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']
>>> 
82
gimel

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é]

51
tgray

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']
29
Colonel Panic

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]
15
dbr

shlex a une fonction .split() . Il diffère de str.split() en ce qu'il ne conserve pas les guillemets et traite une phrase entre guillemets comme un simple mot:

>>> import shlex
>>> shlex.split("Sudo echo 'foo && bar'")
['Sudo', 'echo', 'foo && bar']
11
Tarwin

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']
8
BlackBeard

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.

4
Aditya Mukherji