Question Comment diviser une chaîne en une liste?


Je veux que ma fonction python divise une phrase (entrée) et stocke chaque mot dans une liste. Le code que j'ai écrit jusqu'ici 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(word)

446
2018-04-13 12:48


origine


Réponses:


text.split()

Cela devrait suffire à stocker chaque mot dans une liste. words est déjà une liste des mots de la phrase, donc il n'y a pas besoin de la boucle.

Deuxièmement, cela pourrait être une faute de frappe, mais votre boucle est un peu désordonnée. Si vous vouliez vraiment utiliser append, ce serait:

words.append(word)

ne pas

word.append(words)

376
2018-04-13 12:54



Divise la chaîne en text sur toutes les séries consécutives d'espaces.

words = text.split()      

Diviser la chaîne en text sur délimiteur: ",".

words = text.split(",")   

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


361
2018-04-13 12:50



str.split ()

Renvoie un liste des mots dans la chaîne, en utilisant sep comme délimiteur   ... Si sep n'est pas spécifié ou si aucun, un algorithme de fractionnement différent est appliqué: les exécutions d'espaces consécutifs sont considérées comme un seul séparateur, et le résultat ne contiendra aucune chaîne vide au début ou à la fin si la chaîne a un début ou un fin. espace blanc

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

72
2018-04-13 12:54



En fonction de ce que vous envisagez de faire avec votre phrase-comme-une-liste, vous pouvez regarder le Kit de prise de langue naturelle. Il traite beaucoup du traitement de texte et de l'évaluation. Vous pouvez également l'utiliser pour résoudre votre problème:

import nltk
words = nltk.word_tokenize(raw_sentence)

Cela a l'avantage supplémentaire de diviser 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 mieux si vous ne prévoyez pas de faire une manipulation complexe de la sentance.


42
2018-04-13 14:24



Qu'en est-il de cet algorithme? Diviser le texte sur les espaces, puis couper la ponctuation. Cela supprime soigneusement la ponctuation au bord des mots, sans nuire aux apostrophes à l'intérieur des 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']

23
2017-07-30 15:32



Je veux que ma fonction python divise une phrase (entrée) et stocke chaque mot dans une liste

le str().split() méthode fait cela, il prend une chaîne, la divise 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 avez est à cause d'une faute de frappe, vous avez écrit print(words) au lieu de print(word):

Renommer le word variable à current_wordc'est 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 voulez construire manuellement une liste dans la boucle for, vous utiliserez la liste append() méthode, peut-être parce que vous voulez 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 compréhension de liste:

my_list = [current_word.lower() for current_word in words]

14
2018-04-13 13:46



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

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

11
2017-11-28 16:33



Je pense que vous êtes confus à cause d'une faute de frappe.

Remplacer print(words) avec print(word) dans votre boucle pour avoir chaque mot imprimé sur une ligne différente


3
2018-04-13 13:17