Как создать матрицу частот для нескольких текстовых файлов? - PullRequest
0 голосов
/ 01 февраля 2020

У меня есть следующий код для четырех текстовых файлов, содержащих несколько разных ключевых слов. Они называются test1.txt, test2.txt, test3.txt и test4.txt. Я хочу превратить его в матрицу / список списков. У меня есть следующий код.

temp = [''] + list(sample_collection)
values = list(sample_collection['test1.txt'])

sample_collection = [temp] + [[x] + [v.get(x, 0) for v in sample_collection.values()] for x in values]

Однако я хочу изменить его, чтобы он включал не только ключевые слова из test1, но и все другие уникальные ключевые слова из других файлов. Я понятия не имею, как это сделать. Есть ли способ сделать это с этим фрагментом кода?

ожидаемый результат:

[['', 'test1.txt', 'test2.txt', 'test3.txt', 'test4.txt'],
['apple', 1, 0, 2, 1],
['banana', 1, 1, 1, 1],
['lemon', 1, 1, 0, 0],
['grape', 0, 0, 0, 1]]

1 Ответ

2 голосов
/ 01 февраля 2020

Я бы использовал sklearn framework.

Он не является частью python базовых пакетов, поэтому вам нужно будет установить его (pip install sklearn).

than, импортируйте CountVectorizer:

from sklearn.feature_extraction.text import CountVectorizer

для чтения ваших файлов и сохранения их в списке. скажем, вы назовете это my_corpus. теперь у вас есть список с именем my_corpus с 4 членами.

просто используйте:

vectorizer =  CountVectorizer()    
matrix = vectorizer.fit_transform(my_corpus)

В качестве альтернативы, если вы не хотите использовать другие пакеты, просто выполните: corpus = [«Я люблю собак», «Я люблю кошек», «Кошки любят молоко», «Я тебя люблю»]
token_corpus = [s.split () для s в корпусе]

vocabulary = {}                                                                      
for i, f in enumerate(token_corpus):                                                 
    for t in f:                                                                      
        if t not in vocabulary:                                                      
             vocabulary[t] = [0]*len(corpus)                                         
        vocabulary[t][i]+=1                                                          

vocabulary
{'I': [1, 1, 0, 0], 'like': [1, 1, 1, 0], 'dogs': [1, 0, 0, 0], 'cats': [0, 1, 1, 0], 'milk': [0, 0, 1, 0], 'You': [0, 0, 0, 1], 'likes': [0, 0, 0, 1], 'me': [0, 0, 0, 1]}

если вы хотите сохранить его в списке, просто используйте:

list(map(list, vocabulary.items()))
[['I', [1, 1, 0, 0]], ['like', [1, 1, 1, 0]], ['dogs', [1, 0, 0, 0]], ['cats', [0, 1, 1, 0]], ['milk', [0, 0, 1, 0]], ['You', [0, 0, 0, 1]], ['likes', [0, 0, 0, 1]], ['me', [0, 0, 0, 1]]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...