2011-04-01 16 views
5

Tenía un código que funcionaba bien eliminando la puntuación/números usando expresiones regulares en python, tuve que cambiar el código un poco para que funcionara una lista de detención, no particularmente importante. De todos modos, ahora la puntuación no se elimina y francamente estoy perplejo en cuanto a por qué.Eliminando la puntuación/números del problema de texto

import re 
import nltk 

# Quran subset 
filename = raw_input('Enter name of file to convert to ARFF with extension, eg. name.txt: ') 

# create list of lower case words 
word_list = re.split('\s+', file(filename).read().lower()) 
print 'Words in text:', len(word_list) 
# punctuation and numbers to be removed 
punctuation = re.compile(r'[-.?!,":;()|0-9]') 
for word in word_list: 
    word = punctuation.sub("", word) 
print word_list 

Cualquier indicador de por qué no está funcionando sería grande, no soy un experto en Python, así que es probable que haya algo ridículamente estúpida. Gracias.

Respuesta

7

Cambio

for word in word_list: 
    word = punctuation.sub("", word) 

a

word_list = [punctuation.sub("", word) for word in word_list]  

Asignación a word en el for-loop anteriormente, simplemente cambia el valor al que hace referencia esta variable temporal. No altera word_list.

3

No está actualizando su lista de palabras. Trate

for i, word in enumerate(word_list): 
    word_list[i] = punctuation.sub("", word) 

recordar que aunque word comienza como una referencia al objeto de cadena en el word_list, misiones vuelve a vincular el nombre word al nuevo objeto cadena devuelta por la función sub. No cambia el objeto originalmente referenciado.

Cuestiones relacionadas