Преобразование значений из словаря в матрицу - PullRequest
3 голосов
/ 31 января 2020

Я посчитал, сколько раз слово появляется в текстовом документе, и поместил эти значения в словарь. Теперь я хочу добавить эти суммы в матрицу, состоящую из текстовых файлов в виде столбцов и различных слов в виде строк. Это вывод словаря:

{'test1.txt': {'peer': 1, 'appel': 1, 'moes': 1}, 
'test2.txt': {'peer': 1, 'appel': 1}, 
'test3.txt': {'peer': 1, 'moes': 2}, 
'test4.txt': {'peer': 1, 'moes': 1, 'ananas': 1}}

И вывод матрицы должен выглядеть следующим образом:

[['', 'test1.txt', 'test2.txt', 'test3.txt', 'test4.txt'],
['moes', 1, 0, 2, 1],
['appel', 1, 1, 0, 0],
['peer', 1, 1, 1, 1],
['ananas', 0, 0, 0, 1]]

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

term_freq_matrix = []

list_of_files.insert(0," ")
term_freq_matrix.insert(1, list_of_files)

for unique_word in unique_words:
    unique_word = unique_word.split()
    term_freq_matrix.append(unique_word)

print(term_freq_matrix)

Спасибо!

Ответы [ 4 ]

3 голосов
/ 31 января 2020

С pandas:

import pandas as pd
df = pd.DataFrame(d).fillna(0)  #d is your dictionary
result = [[''] + df.columns.to_numpy().tolist()]+ df.reset_index().to_numpy().tolist()
print(result)

Выход

[['', 'test1.txt', 'test2.txt', 'test3.txt', 'test4.txt'],
 ['ananas', 0.0, 0.0, 0.0, 1.0], 
 ['appel', 1.0, 1.0, 0.0, 0.0], 
 ['moes', 1.0, 0.0, 2.0, 1.0], 
 ['peer', 1.0, 1.0, 1.0, 1.0]]
2 голосов
/ 31 января 2020

Для этого без внешних библиотек:

Код:

d = {'test1.txt': {'peer': 1, 'appel': 1, 'moes': 1}, 
    'test2.txt': {'peer': 1, 'appel': 1}, 
    'test3.txt': {'peer': 1, 'moes': 2}, 
    'test4.txt': {'peer': 1, 'moes': 1, 'ananas': 1}}

res = [[''] + list(d.keys())]
for c in set(k for v in d.values() for k in v.keys()):
    res.append([c] + [d[k].get(c, 0) for k in res[0][1:]])

Вывод:

>>> res
[['', 'test1.txt', 'test2.txt', 'test3.txt', 'test4.txt'],
 ['peer', 1, 1, 1, 1],
 ['ananas', 0, 0, 0, 1],
 ['appel', 1, 1, 0, 0],
 ['moes', 1, 0, 2, 1]]
2 голосов
/ 31 января 2020
your_dict = {'test1.txt': {'peer': 1, 'appel': 1, 'moes': 1}, 
'test2.txt': {'peer': 1, 'appel': 1}, 
'test3.txt': {'peer': 1, 'moes': 2}, 
'test4.txt': {'peer': 1, 'moes': 1, 'ananas': 1}}

sklearn имеет удобный класс утилит для такой предварительной обработки

from sklearn.feature_extraction import DictVectorizer
vectorizer = DictVectorizer()
matrix = vectorizer.fit_transform(list(your_dict.values()))

Отображение ключа словаря в индекс матрицы доступно в vectorizer.vocabulary_

1 голос
/ 31 января 2020

Вы можете использовать понимание вложенного списка:

data = {'test1.txt': {'peer': 1, 'appel': 1, 'moes': 1}, 'test2.txt': {'peer': 1, 'appel': 1}, 'test3.txt': {'peer': 1, 'moes': 2}, 'test4.txt': {'peer': 1, 'moes': 1, 'ananas': 1}}
h, v = data.keys(), {i for b in data.values() for i in b}
r = [['', *h], *[[b, *[data[k].get(b, 0) for k in h]] for b in v]]

Вывод:

[['', 'test1.txt', 'test2.txt', 'test3.txt', 'test4.txt'], 
 ['moes', 1, 0, 2, 1], 
 ['peer', 1, 1, 1, 1], 
 ['appel', 1, 1, 0, 0], 
 ['ananas', 0, 0, 0, 1]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...