Выделить конкретные слова в предложении в Python

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

from termcolor import colored

text = 'left foot right foot left foot right. Feet in the day, feet at night.'
l1 = ['foot', 'feet']
for t in text.lower().split():
    if t in l1:
        print(colored(t, 'white', 'on_red'))
    else: print(t)

В приведенном выше примере я хочу получить два предложения, а не список всех слов с выделением соответствующих слов.

5 ответов

Использование str.join

Пример:

from termcolor import colored
text='left foot right foot left foot right. Feet in the day, feet at night.'
l1=['foot','feet']
result = " ".join(colored(t,'white','on_red') if t in l1 else t for t in text.lower().split())
print(result)

Вам просто нужно иметь все слова в списке и затем присоединиться с пробелом

from termcolor import colored
text='left foot right foot left foot right. Feet in the day, feet at night.'
l1=['foot','feet']
formattedText = []
for t in text.lower().split():
    if t in l1:
        formattedText.append(colored(t,'white','on_red'))
    else: 
        formattedText.append(t)

print(" ".join(formattedText))

Результат ниже:

https://i.st ack.imgur.com/pItnC.png

Вы также можете использовать end=" " внутри print(), чтобы сделать все предложение.

Пример:

from termcolor import colored
text='left foot right foot left foot right. Feet in the day, feet at night.'
l1=['foot','feet']
for t in text.lower().split():
    if t in l1:
        print(colored(t,'white','on_red'), end=" ")
    else: print(t, end=" ")
print("\n")

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


ic = text.lower().split()
for ix, el in enumerate(ic):
    if el in list_of_words:
        # Run your instructions
        ic[ix] = colored(el,'white','on_red'), end=" "

Второе предложение будет тогда:


output = ' '.join(ic)

Чтобы иметь лучшую скорость, чем предложенное @Rakesh решение, я рекомендую использовать:

from functools import reduce
from itertools import chain

text = 'left foot right foot left foot right. Feet in the day, feet at night.'
l1 = ['foot','feet']

print(reduce(lambda t, x: t.replace(*x), chain([text.lower()], ((t, colored(t,'white','on_red')) for t in l1)))) 

И выступления:

Другие вопросы по тегам