Как рассчитать tf-idf при работе с файлами .txt в python 3.7? - PullRequest
0 голосов
/ 11 января 2020

У меня есть книги в формате pdf, и я хочу выполнять над ними задачи НЛП, такие как предварительная обработка, вычисление tf-idf, word2ve c и др. c. Поэтому я конвертировал их в файлы .txt и пытался получить оценки tf-idf. Ранее я выполнял tf-idf для CSV-файла, поэтому внес некоторые изменения в этот код и попытался использовать его для файла .txt. Но я безуспешен в моей попытке.

Ниже мой код:

import pandas as pd
import numpy as np
from itertools import islice
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
data = open('jungle book.txt', 'r+')
# print(data.read())
cvec = CountVectorizer(stop_words='english', min_df=1, max_df=.5, ngram_range=(1,2))
cvec.fit(data)
list(islice(cvec.vocabulary_.items(), 20))
len(cvec.vocabulary_)
cvec_count = cvec.transform(data)
print('Sparse Matrix Shape : ', cvec_count.shape)
print('Non Zero Count : ', cvec_count.nnz)
print('sparsity: %.2f%%' % (100 * cvec_count.nnz / (cvec_count.shape[0] * cvec_count.shape[1])))

occ = np.asarray(cvec_count.sum(axis=0)).ravel().tolist()
count_df = pd.DataFrame({'term': cvec.get_feature_names(), 'occurrences' : occ})
term_freq = count_df.sort_values(by='occurrences', ascending=False).head(20)
print(term_freq)
transformer = TfidfTransformer()
transformed_weights = transformer.fit_transform(cvec_count)
weights = np.asarray(transformed_weights.mean(axis=0)).ravel().tolist()
weight_df = pd.DataFrame({'term' : cvec.get_feature_names(), 'weight' : weights})
tf_idf = weight_df.sort_values(by='weight', ascending=False).head(20)
print(tf_idf) 

Этот код работает до печати ('Non Zero Count:', cvec_count.shape) и печати:

Форма разреженной матрицы: (0, 7132)

Счетчик ненулевых значений: 0

Тогда выдается ошибка:

Ошибка ZeroDivisionError: деление на ноль

Даже если я запускаю этот код с игнорированием ZeroDivisionError, он все равно ошибочен, поскольку не учитывает никакие частоты.

Понятия не имею, как обойти файл .txt. Как правильно работать с файлом .txt для задач НЛП?

Заранее спасибо!

1 Ответ

0 голосов
/ 11 января 2020

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

data = open('jungle book.txt', 'r+')
# print(data.read())

на

with open('jungle book.txt', 'r') as file:
     data = file.read()
...