2016-03-02 3 views
1

Я хочу удалить все помехи из списка таких слов, сохраняя при этом формат: Приговор: Я иду домой. Я увижу, если я смогу это сделать! Я увижу?Удаление препинания из списка списков слов

Так вот как мой набор данных выглядит следующим образом:

[[u'i', u'am', u'going', u'home.', u'i', u'will', u'see,', u'if', u'i', u'can', u'do', u'that!', u'i', u'will', u'see?']] 

Как я могу избавиться от знаков препинания? Строковые методы не работают, поскольку данные находятся в списке формата списка.

Это то, что я пробовал:

punc=res 
punc=[''.join(c for c in s if c not in string.punctuation) for s in punc] 
print(punc) 

Где Рез мой набор данных в указанном выше формате. Это не работает.

ответ

1

Причина, по которой ваш фрагмент не работает, состоит в том, что у вас есть список внутри списка. Ваш код обрабатывает только плоский список. Смотрите ниже:

[[u'i', u'am', u'going', u'home.', u'i', u'will', u'see,', u'if', u'i', u'can', u'do', u'that!', u'i', u'will', u'see?']] 

Если вы удалите лишние скобки, ваш код будет работать:

>>> punc = [u'i', u'am', u'going', u'home.', u'i', u'will', u'see,', u'if', u'i', u'can', u'do', u'that!', u'i', u'will', u'see?'] 
>>> print [''.join(c for c in s if c not in string.punctuation) for s in punc] 
[u'i', u'am', u'going', u'home', u'i', u'will', u'see', u'if', u'i', u'can', u'do', u'that', u'i', u'will', u'see'] 

можно упростить, что код немного по телефону str.strip()

>>> [x.strip(string.punctuation) for x in punc] 
[u'i', 
u'am', 
u'going', 
u'home', 
u'i', 
u'will', 
u'see', 
u'if', 
u'i', 
u'can', 
u'do', 
u'that', 
u'i', 
u'will', 
u'see'] 

Если вам нужно обрабатывать списки внутри списков (например, в вашем примере), просто добавьте еще один цикл. Это также работает с вашим оригинальным фрагментом.

>>> [[x.strip(string.punctuation) for x in y] for y in punc] 
[[u'i', 
    u'am', 
    u'going', 
    u'home', 
    u'i', 
    u'will', 
    u'see', 
    u'if', 
    u'i', 
    u'can', 
    u'do', 
    u'that', 
    u'i', 
    u'will', 
    u'see']] 
+0

работы совершенно прямо сейчас! Благодаря! – minks

1

Я хотел бы использовать re.sub

>>> from string import punctuation 
>>> punctuation 
'!"#$%&\'()*+,-./:;<=>[email protected][\\]^_`{|}~' 
>>> s = [[u'i', u'am', u'going', u'home.', u'i', u'will', u'see,', u'if', u'i', u'can', u'do', u'that!', u'i', u'will', u'see?']] 
>>> [re.sub(r'[' + re.escape(punctuation) + ']', '', j) for i in s for j in i] 
[u'i', u'am', u'going', u'home', u'i', u'will', u'see', u'if', u'i', u'can', u'do', u'that', u'i', u'will', u'see'] 
Смежные вопросы