replace
не изменяет исходную строку. Вам нужно переназначить его для каждого предложения:
for sentence in boilerplates:
corpus_jn = corpus_jn.replace(sentence, '')
Или вы можете использовать регулярное выражение:
import re
regex = '|'.join(map(re.escape, boilerplates))
corpus_jn = re.sub(regex, '', corpus_jn)
Это, вероятно, будет более эффективным, поскольку итерирует по строке только один раз.
Просто чтобы уточнить: ваши исходные коды не заменяют вообще. Аргумент str
является выражением-генератором, которое создает объект generator
, который ничего не делает, пока что-то не перебирает его.
Однако вызов str
не повторяет его, он просто преобразует его в этот <generator object ...>
текст.
Даже если вы правильно использовали генератор, используя ''.join
или понимание списка, вы не получили бы то, что ожидали:
>>> text = 'hello 123 hello bye'
>>> boilerplates = ['hello', 'bye']
>>> [text.replace(sentence, '') for sentence in boilerplates]
[' 123 bye', 'hello 123 hello ']
Как вы можете видеть в первый раз, когда слово hello
заменяется на text
, но вторая итерация по-прежнему выполняется для исходного значения, и, следовательно, вы получаете строку без bye
, но она по-прежнему содержит hello
, Чтобы удалить оба, вы должны использовать решения, описанные выше, вы не можете сделать это, используя генератор таким образом.