he publicado esto como un comentario, pero pensamos que también podría carne hacia fuera en una respuesta completa con una explicación:
Desea utilizar str.split()
a dividir la cadena en palabras, y luego detener cada palabra:
for word in text.split(" "):
PorterStemmer().stem_word(word)
Como desea obtener una cadena de todas las palabras de tallo juntos, es trivial para luego unirse a estos tallos de nuevo juntos. Para ello fácil y eficiente que utilizar str.join()
y una generator expression:
" ".join(PorterStemmer().stem_word(word) for word in text.split(" "))
Editar:
Para su otro problema:
with open("/path/to/file.txt") as f:
words = set(f)
Aquí abrimos el archivo con the with
statement (que es la mejor forma de abrir archivos, ya que se encarga de cerrarlos correctamente, incluso con excepciones, y es más legible) y leer los contenidos en un conjunto. Usamos un conjunto ya que no nos importa el orden de las palabras, o duplicados, y será más eficiente más adelante. Estoy presumiendo una palabra por línea; si este no es el caso, y están separados por coma, o espacios en blanco separados, entonces usando str.split()
como lo hicimos antes (con los argumentos apropiados) es probablemente un buen plan.
stems = (PorterStemmer().stem_word(word) for word in text.split(" "))
" ".join(stem for stem in stems if stem not in words)
Aquí se utiliza la cláusula if expresión de un generador de hacer caso omiso de las palabras que se encuentran en el conjunto de palabras que cargan desde un archivo. Las verificaciones de membresía en un conjunto son O (1), por lo tanto, esto debería ser relativamente eficiente.
Edición 2:
Para eliminar las palabras antes de que se derivaban, es aún más simple:
" ".join(PorterStemmer().stem_word(word) for word in text.split(" ") if word not in words)
La eliminación de las palabras dadas es simplemente:
filtered_words = [word for word in unfiltered_words if not in set_of_words_to_filter]
'por palabra en text.split (''): stemmer.stem_word (palabra) '? – birryree
stemmed = for word in text.split (''): stemmer.stem_word (palabra) ¿funcionará? – ChamingaD
No exactamente. Si desea una lista de los troncos, puede hacer 'stemmed = [stemmer.stem_word (w) for w in text.split ('')]'. Si quiere una oración, puede hacer 'sente = '' .join (stemmed)', que devolverá una oración de todos los tallos. Avísame si eso ayuda. – birryree