Как мне использовать rstrip для удаления висячих символов? - PullRequest
2 голосов
/ 15 октября 2010

Я пытаюсь перебрать кучу документов, я должен поместить каждое слово в список для этого документа. Я делаю это так. stoplist это просто список слов, которые я хочу игнорировать по умолчанию.

texts = [[word for word in document.lower().split() if word not in stoplist]
         for document in documents]

Я вернулся со списком документов, и в каждом из этих списков есть список слов. Некоторые из слов все еще содержат пунктуацию или другие аномалии. Я думал, что смогу сделать это, но, похоже, он не работает правильно

texts = [[word.rstrip() for word in document.lower().split() if word not in stoplist]
         for document in documents]

Или

texts = [[word.rstrip('.,:!?:') for word in document.lower().split() if word not in stoplist]
         for document in documents]

Мой другой вопрос заключается в следующем. Я могу видеть такие слова, где я хочу сохранить слово, но выбросить конечные числа / специальные символы.

agency[15]
assignment[72],
you’ll
america’s

Таким образом, чтобы убрать большую часть других шумов, я подумал, что мне следует продолжать удалять символы с конца строки до тех пор, пока она не станет a-zA-Z или если в строке больше специальных символов, чем буквенных символов, бросьте ее , Вы можете видеть, хотя в моих последних двух примерах конец строки является альфа-символом. Так что в этих случаях я должен просто игнорировать слово из-за количества специальных символов (больше, чем альфа-символов). Я подумал, что мне нужно просто поискать конец строки, потому что я хотел бы сохранить дефисные слова нетронутыми, если это возможно.

По сути, я хочу удалить все конечные знаки препинания для каждого слова и, возможно, подпрограмму, которая обрабатывает случаи, которые я только что описал. Я не уверен, как это сделать или если это лучший способ.

Ответы [ 2 ]

3 голосов
/ 15 октября 2010
>>> a = ['agency[15]','assignment72,','you’11','america’s']
>>> import re
>>> b = re.compile('\w+')
>>> for item in a:
...     print b.search(item).group(0)
...
agency
assignment72
you
america
>>> b = re.compile('[a-z]+')
>>> for item in a:
...     print b.search(item).group(0)
...
agency
assignment
you
america
>>>

Обновление

>>> a = "I-have-hyphens-yo!"
>>> re.findall('[a-z]+',a)
['have', 'hyphens', 'yo']
>>> re.findall('[a-z-]+',a)
['-have-hyphens-yo']
>>> re.findall('[a-zA-Z-]+',a)
['I-have-hyphens-yo']
>>> re.findall('\w+',a)
['I', 'have', 'hyphens', 'yo']
>>>
1 голос
/ 15 октября 2010

Возможно, вместо этого попробуйте re.findall с шаблоном, подобным [a-z]+:

import re
word_re = re.compile(r'[a-z]+')
texts = [[match.group(0) for match in word_re.finditer(document.lower()) if match.group(0) not in stoplist]
          for document in documents]

texts = [[word for word in word_re.findall(document.lower()) if word not in stoplist]
          for document in documents]

Вы можете легко настроить свое регулярное выражение, чтобы получить слова, которые вы хотите. Альтернативная версия использует re.split:

import re
word_re = re.compile(r'[^a-z]+')
texts = [[word for word in word_re.split(document.lower()) if word and word not in stoplist]
          for document in documents]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...