2011-04-01 3 views
5

У меня был код, который отлично работал, удаляя пунктуацию/цифры с использованием регулярных выражений в python, мне пришлось немного изменить код, чтобы рабочий стол остановился, что не особенно важно. В любом случае, теперь пунктуация не удаляется и, откровенно говоря, я в тупике, почему.Удаление пунктуации/цифры из текстовой проблемы

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 

Любые указатели о том, почему он не работает было бы здорово, я не эксперт в Python, так что это, вероятно, что-то до смешного глупо. Благодарю.

ответ

7

Изменить

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

в

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

Присвоение word в вышеприведенном for-loop, просто изменяет значение, на который ссылается этой временной переменной. Он не изменяет word_list.

3

Вы не обновляете свой список слов. Попробуйте

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

Помните, что, хотя word начинается как ссылки на объект строки в word_list, присваивание повторного связывания имени word на новый объект строки, возвращаемой функцией sub. Он не изменяет первоначально ссылающийся объект.

Смежные вопросы