Отображение «тепловой карты» для слов в Python - PullRequest
0 голосов
/ 25 апреля 2020

Я пытаюсь создать нечто похожее на это изображение (изображение взято с здесь ) enter image description here

У меня есть список слов и список нормализованная оценка (скажем, в 0-1) для документа. Как я могу создать такую ​​тепловую карту (каждое слово получает цвет, назначенный на основе оценки)? Я понятия не имею, с чего начать, я не очень разбираюсь в matplotlib!
PS баллы в основном 0, это редкое отображение.

Ответы [ 2 ]

2 голосов
/ 26 апреля 2020

Есть много решений для этого. Почти все, что отображает выделенный текст, будет работать, если вы можете получить к нему доступ с помощью программного обеспечения (HTML, TeX / LaTex, MS Word с использованием python-docx, LibreOffice и т. Д. c). Вероятно, самый простой, самый универсальный и с наиболее универсальным результатом - HTML.

Вот фрагмент кода, который, например, случайным образом выделяет около 1: 5 слов с одним из четырех предустановленных значений. цвета. (Я предполагаю, что у ОП будет лучший план для выбора, какие слова и какие цвета использовать.)

Я написал это в блокноте Jupyter, потому что он позволял легко отображать вывод. Существует много способов отображения html (что является главным преимуществом html), но если вы не хотите использовать ноутбук Jupyter, пропустите строку импорта IPython и строку display.

enter image description here

import random
from IPython.core.display import display, HTML

data = """Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."""

def highlighter(word):
    colors = ["#FF3333", "#DD9999", "#9999DD", '#3333FF']
    i = random.randint(0, 18)
    if i < len(colors):
        color =  colors[i]
        word = '<span style="background-color:' +color+ '">' +word+ '</span>'
    return word

text = ' '.join([highlighter(word) for word in data.split()])

display(HTML(text))
1 голос
/ 25 апреля 2020

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

Output Example

...