Quiero que mi función Python divida una oración (entrada) y almacene cada palabra en una lista. Mi código actual divide la oración, pero no almacena las palabras como una lista. ¿Cómo puedo hacer eso?
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
Gracias
fuente
fuente
print(word)
como tu última línea.Respuestas:
Esto debería ser suficiente para almacenar cada palabra en una lista.
words
ya es una lista de las palabras de la oración, por lo que no hay necesidad del bucle.En segundo lugar, puede ser un error tipográfico, pero tienes el bucle un poco desordenado. Si realmente quisiera usar append, sería:
no
fuente
Divide la cadena en
text
cualquier ejecución consecutiva de espacios en blanco.Dividir la cadena en
text
el delimitador:","
.La variable de palabras será ay
list
contendrá las palabras detext
split en el delimitador.fuente
str.split ()
fuente
Dependiendo de lo que planee hacer con su oración como una lista, es posible que desee ver el Kit de lenguaje natural . Se trata en gran medida con el procesamiento de texto y la evaluación. También puede usarlo para resolver su problema:
Esto tiene el beneficio adicional de dividir la puntuación.
Ejemplo:
Esto le permite filtrar cualquier puntuación que no desee y usar solo palabras.
Tenga en cuenta que las otras soluciones que usan
string.split()
son mejores si no planea hacer una manipulación compleja de la oración.[Editado]
fuente
split()
depende del espacio en blanco como separador, por lo que no se podrán separar las palabras con guiones, y las frases separadas por guiones largos tampoco se dividirán. Y si la oración contiene algún signo de puntuación sin espacios, no se pegarán. Para cualquier análisis de texto del mundo real (como para este comentario), su sugerencia nltk es mucho mejor que split () `.','
y"'s"
no son palabras. Normalmente, si desea dividir la oración anterior en "palabras" de manera consciente de la puntuación, desearía eliminar la coma y obtener"fox's"
una sola palabra.¿Qué tal este algoritmo? Divida el texto en espacios en blanco, luego recorte la puntuación. Esto elimina cuidadosamente la puntuación del borde de las palabras, sin dañar los apóstrofes dentro de palabras como
we're
.fuente
e.g.
yMrs.
, y el apóstrofe final en el posesivofrogs'
(como enfrogs' legs
) son parte de la palabra, pero serán eliminados por este algoritmo. El manejo correcto de las abreviaturas se puede lograr de manera aproximada mediante la detección de los inicialismos separados por puntos y el uso de un diccionario de casos especiales (comoMr.
,Mrs.
). Distinguir los apóstrofes posesivos de las comillas simples es dramáticamente más difícil, ya que requiere analizar la gramática de la oración en la que está contenida la palabra.El
str().split()
método hace esto, toma una cadena, la divide en una lista:El problema que tienes es debido a un error tipográfico que escribiste en
print(words)
lugar deprint(word)
:Cambiando el nombre de la
word
variable acurrent_word
, esto es lo que tenía:..cuando deberías haber hecho:
Si por alguna razón desea construir manualmente una lista en el bucle for, usaría el
append()
método de la lista , tal vez porque desea minúsculas todas las palabras (por ejemplo):O más un poco más ordenado, usando una lista de comprensión :
fuente
shlex tiene una
.split()
función. Se diferencia destr.split()
que no conserva las citas y trata una frase citada como una sola palabra:fuente
Si desea todos los caracteres de una palabra / oración en una lista, haga esto:
fuente
Creo que estás confundido por un error tipográfico.
Reemplace
print(words)
conprint(word)
dentro de su bucle para imprimir cada palabra en una línea diferentefuente