608 votes

Comment diviser une chaîne de caractères en une liste ?

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 dans une liste. Comment dois-je procéder ?

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)

1 votes

Quelle partie de ce code ne fonctionne pas ? Pouvez-vous fournir le message d'erreur ou le problème que vous rencontrez ?

5 votes

En l'état actuel des choses, vous imprimerez la liste complète des mots pour chaque mot de la liste. Je pense que vous vouliez utiliser print(word) comme dernière ligne.

518voto

nstehr Points 2775
text.split()

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 boucle.

Deuxièmement, il se peut que ce soit une faute de frappe, mais votre boucle est un peu désordonnée. Si vous vouliez vraiment utiliser append, ce serait :

words.append(word)

no

word.append(words)

467voto

zalew Points 4213

Divise la chaîne de caractères en text sur toute suite consécutive d'espaces blancs.

words = text.split()      

Divisez la chaîne de caractères en text sur le délimiteur : "," .

words = text.split(",")   

La variable des mots sera un list et contiennent les mots de text divisé sur le délimiteur.

91voto

gimel Points 30150

str.split()

Retourner un liste des mots dans la chaîne, en utilisant sep comme délimiteur ... Si sep n'est pas spécifié ou est None, un algorithme de séparation différent est appliqué : les séries d'espaces consécutifs sont considérées 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 a des espaces en tête ou en queue.

line="a sentence with a few words" line.split() ['a', 'sentence', 'with', 'a', 'few', 'words']

0 votes

@warvariuc - j'aurais dû faire le lien avec docs.python.org/2/library/stdtypes.html#str.split

2 votes

Pourquoi ne pas diviser le mot "phrase" en "s" "e" "n" "t".... ?

57voto

tgray Points 4002

En fonction de ce que vous envisagez de faire avec votre phrase sous forme de liste, vous pouvez consulter l'outil d'aide à la décision. Kit de prise en charge du langage naturel . Il traite principalement du traitement et de l'évaluation des textes. 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 la ponctuation que vous ne voulez pas et de n'utiliser que des mots.

Veuillez noter que les autres solutions utilisant string.split() sont préférables si vous n'avez pas l'intention de faire des manipulations complexes de la phrase.

[Modifié]

5 votes

split() s'appuie sur l'espace blanc comme séparateur, il ne parviendra donc pas à séparer les mots avec un trait d'union - et les phrases séparées par un tiret long ne seront pas séparées non plus. Et si la phrase contient des signes de ponctuation sans espace, ceux-ci ne seront pas collés. Pour toute analyse de texte dans le monde réel (comme pour ce commentaire), votre suggestion nltk est bien meilleure que split()`.

2 votes

Potentiellement utile, bien que je ne qualifierais pas cela de scission en "mots". Par toute définition anglaise simple, ',' y "'s" ne sont pas des mots. Normalement, si vous vouliez diviser la phrase ci-dessus en "mots" en respectant la ponctuation, vous devriez enlever la virgule et obtenir "fox's" comme un seul mot.

1 votes

Python 2.7+ à partir d'avril 2016.

36voto

Colonel Panic Points 18390

Que pensez-vous de cet algorithme ? Diviser le texte sur les espaces blancs, puis couper la ponctuation. Cette méthode supprime soigneusement la ponctuation au bord des mots, sans endommager les 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']

4 votes

C'est bien, mais certains mots anglais contiennent vraiment une ponctuation de fin. Par exemple, les points de fin dans e.g. y Mrs. et l'apostrophe de fin dans le possessif. frogs' (dans le mot anglais frogs' legs ) font partie du mot, mais seront supprimés par cet algorithme. Gérer correctement les abréviations peut être à peu près en détectant les sigles séparés par un point et en utilisant un dictionnaire de cas particuliers (comme Mr. , Mrs. ). Distinguer les apostrophes possessives des guillemets simples est beaucoup plus difficile, car il faut analyser la grammaire de la phrase dans laquelle le mot est contenu.

2 votes

@MarkAmery Vous avez raison. Je me suis également rendu compte depuis que certains signes de ponctuation - comme le tiret em - peuvent séparer des mots sans espace.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X