2011-04-01 39 views
5

Tôi đã có một số mã hoạt động tốt khi xóa dấu câu/số bằng cách sử dụng cụm từ thông dụng trong python, tôi phải thay đổi mã một chút để danh sách dừng hoạt động, không đặc biệt quan trọng. Dù sao, bây giờ các dấu chấm câu không được loại bỏ và thẳng thắn tôi đang bối rối là tại sao.Xóa dấu chấm câu/số khỏi sự cố văn bản

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 

Bất kỳ con trỏ nào về lý do tại sao nó không hoạt động sẽ tuyệt vời, tôi không có chuyên gia về python để nó có thể là điều ngu xuẩn. Cảm ơn.

Trả lời

7

Thay đổi

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

để

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

Chuyển nhượng để word trong for-loop trên, bạn chỉ cần thay đổi giá trị tham chiếu bởi biến tạm thời này. Nó không thay đổi word_list.

3

Bạn hiện không cập nhật danh sách từ của mình. Hãy thử

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

Hãy nhớ rằng mặc dù word bắt đầu như một tham chiếu đến đối tượng chuỗi trong word_list, chuyển nhượng rebinds tên word đến đối tượng chuỗi mới được trả về bởi các sub chức năng. Nó không thay đổi đối tượng được tham chiếu ban đầu.

Các vấn đề liên quan