Я пытаюсь получить разреженную матрицу подсчета сроков огромного (~ 160.000) количества документов.
Я очистил текст и хочу перебрать все документы (то есть посчитать векторизацию по одному за раз и добавить полученные массивы 1xN. Следующий код работает для случая слово за словом, но не для биграмм:
cv1 = sklearn.feature_extraction.text.CountVectorizer(stop_words=None,vocabulary=dictionary1)
cv2 = sklearn.feature_extraction.text.CountVectorizer(stop_words=None,vocabulary=dictionary2)
for row in range(start,end+1):
report_name = fund_reports_table.loc[row, "report_names"]
raw_report = open("F:/EDGAR_ShareholderReports/" + report_name, 'r', encoding="utf8").read()
## word for word
temp = cv1.fit_transform([raw_report]).toarray()
res1 = np.concatenate((res1,temp),axis=0)
## big grams
bigram=set()
sentences = raw_report.split(".")
for line in sentences:
token = nltk.word_tokenize(line)
bigram = bigram.union(set(list(ngrams(token, 2))) )
temp = cv2.fit_transform(list(bigram)).toarray()
res2=np.concatenate((res2,temp),axis=0)
Python возвращает
"AttributeError: 'tuple' object has no attribute 'lower'"
предположительно потому, что способ подачи данных в биграмный векторизованный счетчик недопустим.
"raw_report" - это строка. Словарь по одному слову:
dictionary1 =['word1', 'words2',...]
dictionary2 аналогичен, но основан на биграммах, построенных путем объединения всех биграмм всех документов (и сохранения уникальных значений, сделанных в предыдущем), так что результирующая структура будет
dictionary2 =[('word1','word2'),('wordn','wordm'),...]
Биграмма документа имеет такую же структуру, поэтому я озадачен, почему python не примет ввод. Есть ли способ исправить это или весь мой подход не очень питоничен и начинает иметь неприятные последствия?
Заранее спасибо за любую помощь!
Примечание: я понимаю, что мог бы выполнить весь процесс более сложной командой CountVectorize (т. Е. Очисткой, токенизацией и подсчетом за один шаг), но я бы предпочел сделать это сам (для того, чтобы увидеть и сохранить). промежуточные выходы). Кроме того, я боюсь, что у меня проблемы с памятью из-за большого количества текста, который я использую.