Удаление знаков препинания / цифр из текстовой задачи - PullRequest
5 голосов
/ 01 апреля 2011

У меня был некоторый код, который отлично работал, удаляя знаки препинания / числа с использованием регулярных выражений в 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, поэтомунаверное что-то нелепо глупое.Спасибо.

Ответы [ 2 ]

7 голосов
/ 01 апреля 2011

Изменение

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 голосов
/ 01 апреля 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...