2011-04-01 7 views
5

Avevo del codice che funzionava bene rimuovendo la punteggiatura/numeri usando le espressioni regolari in python, ho dovuto cambiare un po 'il codice in modo che funzionasse una lista di interruzioni, non particolarmente importante. Ad ogni modo, ora la punteggiatura non viene rimossa e francamente sono perplesso sul perché.Rimozione di punteggiatura/numeri dal problema di testo

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 

Eventuali indicazioni sul motivo per cui non funziona sarebbe grande, io non sono esperto in python quindi è probabilmente qualcosa di ridicolmente stupido. Grazie.

risposta

7

Change

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

a

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

Assegnazione di word nel for-loop sopra, cambia semplicemente il valore riferimento questa variabile temporanea. Non altera word_list.

3

Non stai aggiornando il tuo elenco di parole. Prova

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

ricordare che, sebbene word inizia come un riferimento all'oggetto stringa nel word_list, assegnazione rebinds il nome word al nuovo oggetto stringa restituita dalla funzione sub. Non cambia l'oggetto di riferimento originario.

Problemi correlati