2011-04-01 3 views
5

파이썬에서 정규식을 사용하여 구두점/숫자를 제거하는 데 도움이되는 코드가 있었지만 중지 목록이 효과적 이도록 특별히 변경하지 않으면 안되었습니다. 어쨌든, 구두점은 제거되지 않고 있으며, 솔직히 나는 왜 그런지 잘 모르겠다. 아마 안되게 바보 같은, 그래서텍스트 문제에서 구두점/숫자 제거 문제

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 

이 좋은 것 작동하지 않는 이유에 모든 포인터는, 내가 파이썬 전문가는 아니지만. 감사.

답변

7

변경

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

위의 for-loop에서 word에 할당

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

하려면이 임시 변수에 의해 참조되는 값을 변경합니다. word_list을 변경하지 않습니다.

3

단어 목록을 업데이트하지 않습니다.

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

wordword_list에서 문자열 객체에 대한 참조로 시작합니다하지만, 할당은 sub 함수에 의해 반환되는 새로운 문자열 객체에 이름 word를 리 바인드 것을 기억하십시오. 원래 참조 된 객체는 변경되지 않습니다.