Удалить все статьи, соединительные слова и т. Д. Из строки в Python - PullRequest
5 голосов
/ 17 января 2011

У меня есть список, который содержит много предложений. Я хочу перебрать список, удалив из всех предложений такие слова, как «и», «the», «a», «are» и т. Д.

Я пробовал это:

def removearticles(text):


articles = {'a': '', 'an':'', 'and':'', 'the':''}
for i, j in articles.iteritems():
    text = text.replace(i, j)
return text

Как вы, вероятно, можете сказать, однако, это удалит «a» и «an», когда оно появится в середине слова. Мне нужно удалить только экземпляры слов, когда они разделены пробелом, а не когда они находятся внутри слова. Какой самый эффективный способ добиться этого?

Ответы [ 5 ]

6 голосов
/ 17 января 2011

Я бы выбрал регулярное выражение, что-то вроде:

def removearticles(text):
  re.sub('(\s+)(a|an|and|the)(\s+)', '\1\3', text)

или, если вы хотите удалить также первые пробелы:

def removearticles(text):
  re.sub('\s+(a|an|and|the)(\s+)', '\2', text)
3 голосов
/ 17 января 2011

Это больше похоже на работу НЛП, чем на обычное регулярное выражение. Я хотел бы проверить NLTK (http://www.nltk.org/) IIRC, он поставляется с корпусом, полным слов-наполнителей, подобных тем, от которых вы пытаетесь избавиться.

1 голос
/ 17 января 2011
def removearticles(text):


articles = {'a': '', 'an':'', 'and':'', 'the':''}
rest = []
for word in text.split():
    if word not in articles:
        rest.append(word)
return ' '.join(rest)

in оператор dict работает быстрее, чем список.

1 голос
/ 17 января 2011

Попробуйте что-нибудь вроде

articles = ['and', 'a']
newText = ''
for word in text.split(' '):
    if word not in articles:
        newText += word+' '
return newText[:-1]
0 голосов
/ 17 января 2011

Это можно сделать с помощью regex . Выполните итерацию ваших строк или (''. Присоединитесь к списку и отправьте его как строку) для следующего регулярного выражения.

>>> import re
>>> rx = re.compile(r'\ban\b|\bthe\b|\band\b|\ba\b')
>>> rx.sub(' ','a line with lots of an the and a baad')
'  line with lots of         baad'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...