В Python, как удалить несколько слов в строке в соответствии со списком? - PullRequest
0 голосов
/ 06 января 2019

Это то, что я придумал, прежде чем застрять (NB источник текста: The Economist):

import random
import re

text = 'One calculation by a film consultant implies that half of Hollywood productions with budgets over one hundred million dollars lose money.'

nbofwords = len(text.split())

words = text.split()

randomword = random.choice(words)
randomwordstr = str(randomword)

Шаг 1 работает: Удалить случайное слово из исходного текста

replaced1 = re.sub(randomwordstr, '', text)
replaced2 = re.sub('  ', ' ', replaced1)

Шаг 2 работает: выберите определенное количество случайных слов

nbofsamples = 3
randomitems = random.choices(population=words, k=nbofsamples)

дает, например [«над», «консультант», «один»]

Шаг 3 работает: Удалить из исходного текста один элемент этого списка случайных слов благодаря его индексу

replaced3 = re.sub(randomitems[1], '', text)
replaced4 = re.sub('  ', ' ', replaced3)

удаляет слово «консультант»

Шаг 4 не выполнен: удалить из исходного текста все элементы этого списка случайных слов благодаря их индексу Лучшее, что я могу понять:

replaced5 = re.sub(randomitems[0],'',text)
replaced6 = re.sub(randomitems[1],'',replaced5)
replaced7 = re.sub(randomitems[2],'',replaced6)
replaced8 = re.sub('  ', ' ', replaced7)
print(replaced8)

Это работает (все 3 слова были удалены), но это неуклюже и неэффективно (мне пришлось бы переписать его, если я изменил переменную nbofsamples).

Как я могу перебрать свой список случайных слов (шаг 2), чтобы удалить эти слова из исходного текста?

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 06 января 2019

Обратите внимание, что пока вы не используете регулярные выражения, а заменяете просто простые строки другими (или ничего), вам не нужно re:

for r in randomitems:
    text = text.replace(r, '')
print(text)

Для замены только первого вхождения вы можете просто установить желаемое количество вхождений в функции замены:

text = text.replace(r, '', 1)
0 голосов
/ 06 января 2019

, чтобы удалить слова из списка из строки, просто используйте цикл for. Это будет выполнять итерацию по каждому элементу в списке, присваивая значение элемента в списке любой переменной, которую вы хотите (в этом случае я использовал «i», но я могу быть почти любым, каким может быть нормальная переменная) и выполняет код в цикле, пока в списке не останется больше элементов. Вот голая версия цикла for:

list = []
for i in list:
    print(i)

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

r=replaced3
for i in randomitems:
    replaced4 = re.sub(i, '', r)
    r=replaced4
print(replaced4)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...