基于 python 的文本颜色词:一个优雅的解决方案

Color words in text based python: an elegant solution

Python 今日挑战。我正在读取带有格式化文本(spaces、新行、标点符号)的输入文件。我想按原样保留文本,同时根据某些条件突出显示某些单词。

然后控制台打印带有颜色高亮字词的文本。

代码在这里,首先是应该突出显示的单词集。

diff=set(g_word_counts.keys()).difference(set(t_word_index.keys()))

为了将文本中的单词与此集合进行比较,我降低了它,这给出了

colored_text=""
for t in generated_text.lower().split():
    if t in diff:
        colored_text+=colored(t, 'green')
    else:
        colored_text+=t
    colored_text+=" "
    
print(colored_text) 

结果显然都是小写的,这不太好。此外,我不仅想拆分白色 space,还想拆分任何标点符号,我尝试根据 Splitting the sentences in python

import re

def to_words(text):
    return re.findall(r'\w+', text)

但在这里它又会小写所有内容并重建没有标点符号的文本。

保持格式、颜色和打印​​不变的优雅高效方式?

奖金:有没有办法打印到文本文件中,很好地突出显示单词?现在这给了 un-nice

 [32mdémoniais[0m en la foule ou la couronnement à [32ml’enchance[0m de la piété, 
 pour cette fois de ce qui a simule comme le capital et départ du [32mdépour[0m de la [32msubissement[0m

你可以使用colorama:pip install colorama 这是将其导入项目的方式:from colorama import Fore,Back 这就是您的使用方式:print(f"{Fore.Green}Hello world!{Fore.RESET}"

我清理文本,在标点符号周围添加空格

def clean_input_text(text):

    w = re.sub(r"([?.!,;¿’])", r"  ", text)
    w = re.sub(r'[" "]+', " ", w)
    
    return w

然后处理文本的 .split()

# color new words
colored_text=""
for t in generated_text.split():
    if t in diff:
        colored_text+=colored(t, 'green')
    else:
        colored_text+=t
    colored_text+=" "

最后我围绕标点符号进行了排列

colored_text = colored_text.replace(" . ", ". ")
colored_text = colored_text.replace(" , ", ", ")
colored_text = colored_text.replace(" ! ", "! ")
colored_text = colored_text.replace(" ? ", "? ")
colored_text = colored_text.replace(" ’ ", "’")