2013-12-01 4 views
1

Я пытаюсь удалить стоп-слова из строки ввода пользователя с помощью функции .join. Это выглядит следующим образом:Удаление стоп-слов в Python

while True: 
    line = raw_input() 
    if line.strip() == stopword: 
     break 
    remove_stopwords = ''.join(word for word in line.split() if word not in stop_words) 

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

+0

где объявляется '' секундомер'? – msturdy

+0

oh, что также указано выше показанного кода. он устанавливается для прерывания, когда вводится строка, содержащая только полный стоп. – SophieF

ответ

4

Вот один вкладыш с использованием функции filter:

" ".join(filter(lambda word: word not in stop_words, line.split())) 

Кроме того, рекомендуется хранить стоп-слова в set, а не list. Средняя алгоритмическая сложность операции поиска (in) является постоянной для set и линейной для list.

Редактировать: Ваша программа работает нормально, так как она содержит дополнительное пространство для строки join. Это имеет смысл, как (x for x in y if f(x)) примерно эквивалентно filter:

stop_words = set(["hi", "bye"]) 
    stopword = "DONE" 
    while True: 
     line = raw_input() 
     if line.strip() == stopword: 
      break 
     print(" ".join(word for word in line.split() if word not in stop_words)) 

вход:

hello hi my name is bye justin 

выход:

hello my name is justin 

Ваша ошибка должна быть где-то еще в вашей программе. Что еще вы делаете?

+0

@ DSM спасибо, исправлено. – countfromzero

+0

Спасибо, это помогло. Переключение из списка в набор, похоже, помогло решить эту проблему. – SophieF

 Смежные вопросы

  • Нет связанных вопросов^_^