Как создать собственное горячее кодирование по ключевым словам в текстовых последовательностях - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть список текстовых последовательностей, которые выглядят так:

    sequences = [
    ['okay', ''],
    ['ahead', 'fred', ''],
    ['i', 'dont', 'remember', 'you', 'want', 'to', 'go', ''],
    ['um', ''],
    ['let', 'me', 'think', '']
]

Я хочу создать один горячий вектор для каждой последовательности, который подсчитывает вхождение определенных слов из списка. Список слов для поиска приведен здесь:


    keywords = ['i', 'you', 'we']

В конечном счете, я хочу l oop через каждую текстовую последовательность и вернуть следующее (где 0 означает, что ключевое слово не было, а 1 означает, что оно было ):


    seq_to_vec = [
        [0,0,0],
        [0,0,0],
        [1,1,0],
        [0,0,0],
        [0,0,0]
    ]

Как мне это сделать?

Ответы [ 2 ]

1 голос
/ 24 апреля 2020

Это довольно простое (ну, простое для Python) понимание списка:

[[1 if keyword in sequence else 0 for keyword in keywords] for sequence in sequences]

Следующая полная программа показывает это в действии:

sequences = [
    ['okay', ''],
    ['ahead', 'fred', ''],
    ['i', 'dont', 'remember', 'you', 'want', 'to', 'go', ''],
    ['um', ''],
    ['let', 'me', 'think', '']
]
keywords = ['i', 'you', 'we']

print([[1 if keyword in sequence else 0 for keyword in keywords] for sequence in sequences])

Как и ожидалось, Вывод:

[[0, 0, 0], [0, 0, 0], [1, 1, 0], [0, 0, 0], [0, 0, 0]]

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

Если вам нужен фактический счет вместо 0/1 индикатор присутствия (на основе вашего текста «подсчитывает вхождение»), он немного сложнее, но все еще использует ту же основную c идею:

[[sum([1 if keyword == word else 0 for word in sequence]) for keyword in keywords] for sequence in sequences]

Дублирование i в третьем Затем последовательность доставит вам:

[[0, 0, 0], [0, 0, 0], [2, 1, 0], [0, 0, 0], [0, 0, 0]]
0 голосов
/ 24 апреля 2020

Вот возможное решение, используя понимание списка и список count () метод

def sequences_to_num_of_ocuerences_vector(sequences, keywords):
    return [[seq.count(k) for k in keywords] for seq in sequences]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...