2011-04-01 8 views
5

Miałem trochę kodu, który działał dobrze, usuwając interpunkcje/liczby za pomocą wyrażeń regularnych w pythonie, musiałem zmienić kod trochę tak, aby lista zatrzymania działała, nie jest szczególnie ważna. W każdym razie teraz interpunkcja nie jest usuwana i szczerze mówiąc jestem zaskoczony, dlaczego.Usuwanie interpunkcji/liczb z problemu tekstowego

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 

Wszelkie wskazówki na temat, dlaczego to nie działa byłoby świetnie, nie jestem ekspertem w Pythonie, więc to chyba coś śmiesznie głupie. Dzięki.

Odpowiedz

7

Zmień

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

do

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

Przypisanie do word w powyższym for-loop, po prostu zmienia wartość odwołuje się tej zmiennej tymczasowej. Nie zmienia się word_list.

3

Nie aktualizujesz swojej listy słów. Spróbuj

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

Pamiętaj, że chociaż word zaczyna się jako odniesienie do obiektu String w word_list, cesja powoduje ponowne powiązanie nazwy word do nowego obiektu ciąg zwracany przez funkcję sub. Nie zmienia pierwotnie przywoływanego obiektu.