Quero que minha função Python divida uma frase (entrada) e armazene cada palavra em uma lista. Meu código atual divide a frase, mas não armazena as palavras como uma lista. Como faço isso?
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)
python
list
split
text-segmentation
Thanx
fonte
fonte
print(word)
como sua última linha.Respostas:
Isso deve ser suficiente para armazenar cada palavra em uma lista.
words
já é uma lista das palavras da frase, portanto não há necessidade do loop.Segundo, pode ser um erro de digitação, mas você tem um pouco de confusão. Se você realmente quisesse usar o anexo, seria:
não
fonte
Divide a string em
text
todas as execuções consecutivas de espaço em branco.Dividir a string em
text
no delimitador:","
.A variável words será ae
list
conterá as palavras datext
divisão no delimitador.fonte
str.split ()
fonte
Dependendo do que você planeja fazer com sua frase como lista, convém consultar o Kit de Tomo de Linguagem Natural . Ele lida fortemente com o processamento e avaliação de texto. Você também pode usá-lo para resolver seu problema:
Isso tem o benefício adicional de dividir a pontuação.
Exemplo:
Isso permite filtrar qualquer pontuação que você não deseja e usar apenas palavras.
Observe que as outras soluções utilizadas
string.split()
são melhores se você não planeja manipular complexa a frase.[Editado]
fonte
split()
depende do espaço em branco como separador, portanto, ele não consegue separar as palavras hifenizadas - e as frases separadas por traços longos também não conseguem se dividir. E se a sentença contiver alguma pontuação sem espaços, eles não serão atendidos. Para qualquer análise de texto do mundo real (como para este comentário), sua sugestão nltk é muito melhor que split () `.','
e"'s"
não são palavras. Normalmente, se você quiser dividir a frase acima em "palavras" de maneira sensível à pontuação, retire a vírgula e obtenha"fox's"
uma única palavra.E esse algoritmo? Divida o texto em espaço em branco e apare a pontuação. Isso remove cuidadosamente a pontuação da borda das palavras, sem prejudicar apóstrofos dentro de palavras como
we're
.fonte
e.g.
eMrs.
, e o apóstrofo final no possessivofrogs'
(como emfrogs' legs
) fazem parte da palavra, mas serão removidos por esse algoritmo. Abreviaturas corretamente tratamento pode ser mais ou menos conseguida através da detecção initialisms separados por pontos mais usando um dicionário de casos especiais (comoMr.
,Mrs.
). Distinguir apóstrofos possessivos de aspas simples é muito mais difícil, pois exige a análise da gramática da sentença na qual a palavra está contida.O
str().split()
método faz isso, pega uma string e a divide em uma lista:O problema que você está tendo é devido a um erro de digitação, que você escreveu em
print(words)
vez deprint(word)
:Renomeando a
word
variável paracurrent_word
, é isso que você tinha:..quando você deveria ter feito:
Se, por algum motivo, você deseja construir manualmente uma lista no loop for, você usaria o
append()
método list , talvez porque queira minúsculas todas as palavras (por exemplo):Ou mais um pouco mais limpo, usando uma lista de compreensão :
fonte
shlex tem uma
.split()
função. Difere destr.split()
não preservar aspas e tratar uma frase citada como uma única palavra:fonte
Se você quiser todos os caracteres de uma palavra / frase em uma lista, faça o seguinte:
fonte
Eu acho que você está confuso por causa de um erro de digitação.
Substitua
print(words)
porprint(word)
dentro do seu loop para que cada palavra seja impressa em uma linha diferentefonte